WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Spanning Tree für ausgewählte Knoten

 

MB

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2016, 23:49     Titel: Spanning Tree für ausgewählte Knoten
  Antworten mit Zitat      
Schönen Abend allerseits,

und zwar habe ich folgendes Problem. Ich habe ein Wasserleitungsnetz mit über 200 Knoten und über 300 Kanten. Dafür habe ich die Matrix Nodes mit Spalten für Knotennummer, X- und Y-Koordinaten. Weiters habe ich die Matrix Edges, mit Spalten VonKnoten, ZuKnoten und der Kantenlänge.

Nun möchte ich für 20 vorgegebene Knoten den minspantree finden. Den für alle Knoten kann ich erstellen, jedoch stoße ich bei obigem Problem an die Grenzen meiner Matlab-Fähigkeiten Question

Kann mir wer von euch weiterhelfen?

Lg MB


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.12.2016, 00:51     Titel:
  Antworten mit Zitat      
Hallo,

ich würde spontan den Graphen auf die 20 Knoten reduzieren.
Dazu müsstest du z.B. aus edges alle Zeilen entfernen, in denen die 1. oder 2. Spalte nicht zu diesen 20 Knoten gehört (z.B. mit ismember ).

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MB

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2016, 12:22     Titel:
  Antworten mit Zitat      
Danke Harald für deinen Vorschlag.

Hab das heute ausprobiert. Mit dem Ergebnis, dass nur mehr von jedem der 20 Knoten Kanten weggehen. Also habe ich jetzt 20 kleine Netze, die nicht miteinander verbunden sind.

Gibt es vielleicht eine Möglichkeit, das Problem über die Knoten zu lösen?

Das ist ein Kommentar meines Professors:
"You should try to get a spanning tree taking the whole network and calculate the spanning tree only for the nodes 1-20. You may try to define the full graph and define a subset of nodes and calculate the spanning tree only on the subset of nodes based on the full graph I have not yet implemented it myself, so I can not say, if it works."

Lg MB

Bildschirmfoto 2016-12-22 um 11.17.52.png
 Beschreibung:

Download
 Dateiname:  Bildschirmfoto 2016-12-22 um 11.17.52.png
 Dateigröße:  47.48 KB
 Heruntergeladen:  409 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.12.2016, 12:32     Titel:
  Antworten mit Zitat      
Hallo,

poste bitte deinen Code, am besten in reproduzierbarer Form.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MB

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2016, 12:54     Titel:
  Antworten mit Zitat      
So sieht das Ganze aus. Ist der letzte Teil von 4 Aufgaben.

Code:

%Edges auf 20 OD-Knoten begrenzen
NodeNumbers = ODNodes(:,1);     %liefert die Knotennummern der 20 OD-Knoten
ODEdges1 = EdgesReduced(ismember(EdgesReduced(:,1),NodeNumbers),1:end);     %checkt 1. Spalte ob Knotennummer vorkommt
ODEdges2 = EdgesReduced(ismember(EdgesReduced(:,2),NodeNumbers),1:end);     %checkt 2. Spalte ob Knotennummer vorkommt
ODEdges = [ODEdges1; ODEdges2];    %fügt die Matritzen zusammen
ODEdges(21,:)=[];   %löscht einen doppelten Wert, habe keine bessere Lösung gefunden

%Graphen definieren und plotten
figure('Position', [1, 1, 1800, 1000]);
GOD = graph(ODEdges(:,1),ODEdges(:,2),ODEdges(:,3), names);
p5 = plot(GOD,'xdata',x, 'ydata', y);
 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.12.2016, 16:04     Titel:
  Antworten mit Zitat      
Hallo,

du selektierst die Zeilen, in denen eine Edge von oder zu einem selektierten Knoten geht. Du brauchst doch aber die Zeilen für Edges zwischen selektierten Knoten, also
Code:
ODEdges = EdgesReduced(ismember(EdgesReduced(:,1),NodeNumbers) & ismember(EdgesReduced(:,2),NodeNumbers) ,1:end);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MB

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2016, 22:54     Titel:
  Antworten mit Zitat      
Leider hat dein Code mein Problem auch nicht gelöst.

Ich werde es aber weiterhin probieren.

Lg MB
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.