Verfasst am: 08.01.2014, 19:23
Titel: Vektoren aus Schleife als Matrix "zusammenfassen"
Hallo!
Ich bin erst seit Kurzem bei Matlab dabei und habe jetzt stundenlang versucht eine Antwort auf mein Problem zu finden, aber ich denke es ist zu einfach .
Ich habe eine Schleife erstellt und am Ende jeder Schleife bekomme ich einen Vektor, den ich zu einer Matrix Q_% zusammenfasse.
Also bei Durchlauf (n=200)
i= (1:n)
i=1 : v1
i=2: v2
..
und somit Q_1=[v1:v_n] (wie der Ausdruck hier richtig heißen sollte weiß ich nicht, ich habe jeweils
geschrieben. Ist das ok? Wie wäre das mit nur einem Befehl am Ende um alle erzeugten Vektoren in einer Matrix zusammenzufassen?
Dies wird jeweils für verschiedene Werte von A (Dicken) durchgeführt:
Ich möchte aber bei jedem Durchlauf die Spalten der Tabelle mit einer Überschrift versehen, siehe:
Code:
if A==1 xlswrite('Dateiname.xls', Q_1, 'sheetname','A1'); %Q_1 ist die Beschriftung der Q_2-Matrix-Spalten
xlswrite('Dateiname.xls', Q_2,'sheetname','A2');
xlswrite('Dateiname.xls', Q_3, 'sheetname','exceleintragposition');% Beschriftung xlswrite('Dateiname.xls', Q_4, 'sheetname','exceleintragposition');
xlswrite('Dateiname.xls', Q_5,'sheetname','exceleintragposition'); %Beschriftung
xlswrite('Dateiname.xls', Q_6, 'sheetname','exceleintragposition');
end
if A==2 xlswrite('Dateiname.xls', Q_1, 'sheetname','A1'); %Q_1 ist die Beschriftung der A2-MAtrix-Spalten
xlswrite('Dateiname.xls', Q_2,'sheetname','A2');
.
.
.
Ich möchte nicht jedes Mal die exceleintragposition per Hand ändern müssen, bzw überhaupt diese "if A==.. xlswrite" Schleife schreiben müssen, denn es werden sehr viele A's.
Dein Problem ist für mich absolut unverständlich. Du hast eine Matrix Q? Woher kommt die und wohin geht sie? Du hast Beschriftungen, woher kommen die? Wie soll die Ausgabe aussehen?
Kannst Du konkrete Beispiele geben?
Hallo, ja, entschuldige, dass es so unverständlich ist.
Im Grunde sind es 2 schleifen. "i" sind einfach Maschinen-Durchläufe und A ist eine Dicke.
Die innere ist die, die "i" einige Male durchlaufen lässt, die äußere das "A".
In der inneren Schleife habe ich es geschafft die Ergebnisse als Matrizen Q,W,U aus den verschiedenen Vektoren je Durchlauf i zu schreiben:
Also falls wir bei Durchlauf i=1 sind, ist Q der Vektor v und wenn i nicht 1, sondern in dem Fall eben größer 1, wird diesem Q einfach der neue Vektor v drangehangen.
Das ist, glaube ich, nicht sehr elegant.
Dann habe ich einen Vektor geschrieben, der die Spalteneinträge der Matrix Q benennt:
Das heißt für für die äußere Schleife schaffe ich es nicht die Daten für verschiedene A zusammenzufassen und einmalig excel zuzusenden, sondern ich habe eben sehr viele "if A==..." Blöcke.
Das würde ich (inklusive der Beschriftungsvektoren) gern machen.
Statt dem »if i==1« kannst Du einfach vor der Schleife »Q=[]« eine Leere Menge zuweisen, oder Du baust ein Cell-Array »Q{i}=v;« und setzt erst nach der Schleife die Matrix zusammen »Q = vertcat(Q{:});«.
Worin unterscheidet sich jetzt A==1 von A==2?? Das sieht man an Deinen Code-Fragmenten jetzt nicht.
Wie ist das mit den Überschriften,der einzelnen Tabellen/Matrizen, die ich gerne im Exceldokument geschrieben hätte? Ist das überhaupt machbar, wenn ich das nicht einzeln mit "A==.." schreiben möchte?
Ich versuche schon länger das effizienter zu machen, aber komme einfach auch nichts..
Hallo noch einmal,
habe den vertcat Tipp gerade ausprobiert und folgendes funktioniert. Ist das, was du meintest? Habe ich es richtig/praktisch gemacht?
Wenn M nun aus 1000 Vektoren bestehen sollte und nicht nur aus 2 wie hier M= [Q P], wie kann man es dann schreiben, damit ich nicht 1000 Vektoren einzeln schreiben muss?
Also pro Schleife.. ich lese schon gerade viel über strings und so, aber ich blicke da leider nicht durch wie ich die da pro Schleife eintragen lasse..
Und der längere Code oben macht Sinn?
Vielen Dank. Ich denke, wenn ich langsam durch die Basics steige, komme ich auch bald besser selber weiter.
LG
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.