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

nxn-Matrix zu (n^2)x3-Matrix umwandeln

 

werne_47
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 02.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2016, 10:24     Titel: nxn-Matrix zu (n^2)x3-Matrix umwandeln
  Antworten mit Zitat      
Hallo,

ich habe wohl ein Verständnisproblem mit den for-Schleifen in Matlab. Ich habe eine nxn-Matrix, die die z-Koordinate eines Rechengitters beschreibt. Als Input für ein externes Programm brauche ich dieses Rechengitter jedoch als Punkteliste, also im Format (X-Koordinate, Y-Koordinate, Z-Koordinate).
Ich möchte die einzelnen Werte der Matrix nun nacheinander auslesen (erst alle Spalten der ersten Zeile, dann alle Spalten der zweiten Zeile etc.) und in eine neue Matrix übertragen.
Mein Ansatz war eine verschachtelte For-Schleife:

Code:

for i=1:length(xnodes)
    for j=1:length(ynodes)
        Punkteliste(i+j-1,1) = xnodes(i);
        Punkteliste(i+j-1,2) = ynodes(j);
        Punkteliste(i+j-1,3) = Rechengitter(i,j);
    end
end
 


Ich hatte erwartet, dass Matlab nun zuerst i=1 setzt und dann j komplett hochzählt, dann i=2 setzt etc. Allerdings scheint das so nicht zu funktionieren, anstatt einer (n^2)x3-Matrix bekomme ich nur eine (n+n-1)x3-Matrix. Wo ist mein Fehler?
Private Nachricht senden Benutzer-Profile anzeigen


ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2016, 11:16     Titel:
  Antworten mit Zitat      
Hallo,

sehe ich das aus deinem Code richtig dass du:

Alle Werte aus xnodes in die erste Spalte von Punkteliste schreiben willst,
alle Werte aus ynodes in die zweite Spalte von ... ,
alle Werte aus Rechengitter in die dritte Spalte ... .

Vielleicht kannst du exemplarisch aufführen was in xnodes, ynodes, Rechengitter steht und wie diese Daten in Punkteliste dargestellt werden sollen (anhand von Beipielzahlen)!

Lg Rob
Private Nachricht senden Benutzer-Profile anzeigen
 
Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 02.02.2016, 11:35     Titel:
  Antworten mit Zitat      
Hilft dir ggf. der Befehl "reshape" weiter?

http://de.mathworks.com/help/matlab.....dDomain=www.mathworks.com
Private Nachricht senden Benutzer-Profile anzeigen
 
werne_47
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 02.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2016, 11:48     Titel:
  Antworten mit Zitat      
ro_mat hat Folgendes geschrieben:
Hallo,

sehe ich das aus deinem Code richtig dass du:

Alle Werte aus xnodes in die erste Spalte von Punkteliste schreiben willst,
alle Werte aus ynodes in die zweite Spalte von ... ,
alle Werte aus Rechengitter in die dritte Spalte ... .

Vielleicht kannst du exemplarisch aufführen was in xnodes, ynodes, Rechengitter steht und wie diese Daten in Punkteliste dargestellt werden sollen (anhand von Beipielzahlen)!

Lg Rob


Genau so hatte ich mir das gedacht.
xnodes enthält die X-Koordinaten meiner Rechenknoten: xnodes = (x1 x2 x3 x4 ... xn)
ynodes enthält die Y-Koordinaten der Rechenknoten: ynodes = (y1 y2 y3 y4 ... yn)
Rechengitter enthält die Z-Koordinaten der Rechenknoten.
(z11 z12 z13 z14 ... z1n)
(z21 z22 z23 z24 ... z2n)
(z31 z32 z33 z34 ... z3n)
:
:
:
(zn1 zn2 zn3 zn4 ... znn)

In der gewünschten Matrix soll das ganze dann so ungefähr aussehen:
(x1 y1 z11)
(x1 y2 z12)
(x1 y3 z13)
:
:
:
(x2 y1 z21)
(x2 y2 z22)
....

Der Reshape-Befehl sieht aber auch schon einmal ziemlich gut aus, ich muss ihn mal ausprobieren um zu sehen, ob das so funktioniert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.02.2016, 11:54     Titel: Re: nxn-Matrix zu (n^2)x3-Matrix umwandeln
  Antworten mit Zitat      
Hallo Werne_47,

Die Frage ist noch nicht klar genug. Für Dich liegt es zwar auf der Hand, aber die Leser wüssen schon raten was das genau bedeutet:
Zitat:
Format (X-Koordinate, Y-Koordinate, Z-Koordinate).


Deine FOR-Schlöeife tut genau das, was Du möchtest. Aber Die Zuweisung der Variablen PunkteListe stimmt nicht.

Mit dem Debugger bekommt man in solchen Fällen heraus, was passiert. Setze einen Breakpoint in die FOR-Schleife und gehe Zeile für Zeile durch Dein Programm. Dann wird Dir auffallen, dass Elemente von PunkteListe überschrieben werden.

Wahrscheinlich möchtest Du:
Code:
for i=1:length(xnodes)
    for j=1:length(ynodes)
        Punkteliste(i, j, 1) = xnodes(i);
        Punkteliste(i, j, 2) = ynodes(j);
        Punkteliste(i, j, 3) = Rechengitter(i,j);
    end
end

% Und möglicherweise:
PunkteListe = reshape(PunkteList, length(xnodes) * length(ynodes), 3);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
werne_47
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 02.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2016, 15:43     Titel:
  Antworten mit Zitat      
So, ich habe meinen Fehler gefunden. Danke für den Tipp mit dem Breakpoint. Das Problem war, dass durch meine (i+j-1)-Konstruktion die ersten Zeilen der Matrix natürlich jedes Mal überschrieben wurden, sobald j wieder auf j=1 gesetzt wurde. Das Problem konnte ich durch die Einführung eines größeren Zeitschrittes (in Verbindung mit der Aufrundung der Zählvariablen) lösen, und habe jetzt folgende Schleife erstellt (falls noch jemand später dieses Problem haben sollte):

Code:

for i=1:length(xnodes):length(xnodes)*length(xnodes)
    for j=1:length(ynodes)
        Punkteliste((i+j-1),1) = xnodes(ceil(i/length(xnodes)));
        Punkteliste((i+j-1),2) = ynodes(j);
        Punkteliste((i+j-1),3) = Rechengitter(ceil(i/length(xnodes)),j);
    end
end
 


Gruß,
Michael
Private Nachricht senden Benutzer-Profile anzeigen
 
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.