Verfasst am: 30.07.2012, 11:10
Titel: Kombinieren von Matrizen
Hallo miteinander!
Ich habe eine Frage bez. des Füllens von Matrizen mit einer Schleife:
Folgendes Beispiel: Ich habe drei Vektoren mit Werten, die ich miteinander kombinieren möchte. Dabei kann ich perm() aber nicht verwenden, da er nur die Zeilen, nicht aber die Spalten verändern soll. Ein kleines Beispiel zum besser verstehen:
Code:
A=[1;2;3];
B=[4;5;6];
C=[7;8;9];
% brauche nun eine Möglichkeit, um folgende Matrix rauszubekommen (die Zeilenreihenfolge ist unerheblich)
Ich hoffe, es ist klar ausgedrückt, was ich will. Bei perm() werden auch die Spalten vertauscht, dass brauch ich nicht. Gibt's da einen eigenen Befehl zum zeilenweise kombinieren?
so, hab' das jetzt sehr einfach gelöst, allerdings nicht besonders elegant. vielleicht gibt's da eine bessere lösung?
Code ist für 5 Variablen mit je 5 Veränderlichen programmiert:
for u=1:(size(b,2)*size(c,2)*size(d,2)*size(e,2))
U1(u,:)=[a(1)];
U2(u,:)=[a(2)];
U3(u,:)=[a(3)];
U4(u,:)=[a(4)];
U5(u,:)=[a(5)];
u=u+1;
end
A=[U1;U2;U3;U4;U5];
for v=1:(size(c,2)*size(d,2)*size(e,2))
V1(v,:)=[b(1)];
V2(v,:)=[b(2)];
V3(v,:)=[b(3)];
V4(v,:)=[b(4)];
V5(v,:)=[b(5)];
v=v+1;
end
B=[V1;V2;V3;V4;V5];
B=[B;B;B;B;B];
for w=1:(size(d,2)*size(e,2))
W1(w,:)=[c(1)];
W2(w,:)=[c(2)];
W3(w,:)=[c(3)];
W4(w,:)=[c(4)];
W5(w,:)=[c(5)];
w=w+1;
end
C=[W1;W2;W3;W4;W5];
C=[C;C;C;C;C];
C=[C;C;C;C;C];
for x=1:(size(e,2))
X1(x,:)=[d(1)];
X2(x,:)=[d(2)];
X3(x,:)=[d(3)];
X4(x,:)=[d(4)];
X5(x,:)=[d(5)];
x=x+1;
end
D=[X1;X2;X3;X4;X5];
D=[D;D;D;D;D];
D=[D;D;D;D;D];
D=[D;D;D;D;D];
Ein paar Anmerkungen:
* "clear all" verschwendet viel Zeit mit dem Löschen aller Funktionen aus dem Speicher. Vorteile hat dies allerdings nicht. Deswegen bin ich immer wieder erstaunt, wieso "clear all" so inflationär häufig eingesetzt wird.
* Der Zähler einer FOR-Schleife sollte nich innerhalb der Schleife geändert werden:
Das inkrementieren von "u" hat hier keine Auswirkung, ausser den Leser zu verwirren und Rechenzeit zu verbraten.
* Einen skalaren Wert muss man genauso wenig wie einen Vektor in eckige Klammern einschließen. Also statt "V1(v,:)=[b(1)];" einfach "V1(v,:) = b(1);".
Das läßt sich auch auf die anderen Teile übertragen. RESHAPE, TRANSPOSE und PERMUTE sind üblicherweise bei solchen Aufgaben nützlich.
Gruß, Jan
Einstellungen und Berechtigungen
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
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.