Wie zeichne ich Linien zwischen allen Punkten in einem Vektor?

8

Ich habe einen Vektor mit einigen Punkten im 2D-Raum. Ich möchte, dass MATLAB diese Punkte mit Linien zeichnet, die von jedem Punkt zu jedem anderen Punkt gezogen werden. Grundsätzlich möchte ich ein Diagramm mit allen verbundenen Scheitelpunkten. Kannst du das mit Plot tun und wenn ja, wie?

    
Reed Richards 09.11.2009, 16:28
quelle

2 Antworten

7

Eine Lösung besteht darin, eine Reihe von Indizes für jede Kombination von Punkten mit der Funktion zu erstellen MESHGRID . Sie können dann jede Zeile mit der Funktion LINE plotten (die eine Zeile pro Zeile darstellt) Spalte der Daten, die es gegeben ist):

%Vor%

BEARBEITEN:

Sie werden vielleicht feststellen, dass die obige Lösung eine Linie für jede Verbindung plotten wird, was bedeutet, dass sie Linien von Null-Länge-Verbindungspunkten mit sich selbst plotten und 2 Linien für jede Verbindung (dh von Punkt A zu Punkt B und von Punkt B zu Punkt A). Hier ist eine andere Lösung (mit den Funktionen HANKEL und FIND ), die die redundanten oder unnötigen Zeilen nicht darstellen:

%Vor%

Beide oben genannten Lösungen erstellen visuell identische Diagramme:

Eine Anmerkung zum Timing ...

Aus Neugierde dachte ich, ich würde meine HANKEL Lösung einplanen und vergleichen Sie es mit Amro's sehr knappe NCHOOSEK Lösung. Für N = 10 gab es keinen nennenswerten Unterschied. Als ich jedoch N auf viel größere Werte erhöhte, begann ich zu sehen, dass die NCHOOSEK-Lösung langsam sehr langsam wurde:

  • N = 200

    %Vor%
  • N = 1000

    %Vor%

Ich war irgendwie überrascht, bis ich den Code für NCHOOSEK sah (durch Eingabe von type nchoosek im MATLAB-Befehlsfenster). Nicht nur, dass eine Variable in einer Schleife gezüchtet wird, anstatt vorallokiert (wie Amro in einem Kommentar darauf hingewiesen hat), aber der verwendete Algorithmus ist auch rekursiv , was bedeutet, dass viele Funktionsaufrufe gemacht werden. Ich habe auch diese Zeile am Ende des Hilfetextes für NCHOOSEK bemerkt:

  

Diese Syntax ist nur in Situationen sinnvoll, in denen N kleiner als 15 ist.

    
gnovice 09.11.2009, 16:58
quelle
8

Aufbauend auf gnovice Beispiel: Eine einfachere, intuitivere Methode zum Generieren aller Paare verwendet die Funktion nchoosek :

%Vor%

    
Amro 09.11.2009 18:10
quelle

Tags und Links