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

Vektoren aus Schleife als Matrix "zusammenfassen"

 

Quinn
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2014, 19:23     Titel: Vektoren aus Schleife als Matrix "zusammenfassen"
  Antworten mit Zitat      
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 Wink.

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
Code:
 if i==1
    Q=[v];
    end
    Q=[Q;v];
end

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.

Könnt Ihr mir da bitte helfen??

Vielen Dank!!!!!
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2014, 21:26     Titel:
  Antworten mit Zitat      
Hallo Quinn,

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Quinn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2014, 22:17     Titel:
  Antworten mit Zitat      
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:
Code:
if i==1
    Q=[v];
    end
    Q=[Q;v];
end


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:
Code:
C={'Zeit', 'Geschwindikeit',..}


und das für jedes verschiedene A (Dicke) einzeln in eine Excel-Datei einfügen lassen mit dem Befehl
Code:

if A==1
xlswrite('Dateiname.xls',Beschriftungsvektor Q , 'sheetname','A1');
xlswrite('Dateiname.xls', Q,'sheetname','A2');
xlswrite('Dateiname.xls', Beschriftung W, 'sheetname','exceleintragposition');% Beschriftung
xlswrite('Dateiname.xls', W, 'sheetname','exceleintragposition');
xlswrite('Dateiname.xls', Beschriftung U,'sheetname','exceleintragposition'); %Beschriftung
xlswrite('Dateiname.xls', U, 'sheetname','exceleintragposition');
 end

  if A==2
xlswrite('Dateiname.xls', Beschriftungsvektor Q, 'sheetname','A1');
xlswrite('Dateiname.xls', Q,'sheetname','A2');
.
.
.


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.

Kannst du es jetzt verstehen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2014, 01:32     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Quinn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2014, 22:31     Titel:
  Antworten mit Zitat      
Hallo!
Vielen Dank für deine Tipps. Werde ich gleich mal ausprobieren.
Zu dem "A", das habe ich folgendermaßen (umständlich) gemacht:



Code:

A=1
j=1
while A<100
(Funktionen, die mit A arbeiten)

while i<20
(Funktionen)

i=i+1

end

if A==1
xlswrite('Dateiname.xls',Beschriftungsvektor Q , 'sheetname','A1');
xlswrite('Dateiname.xls', Q,'sheetname','A2');
xlswrite('Dateiname.xls', Beschriftung W, 'sheetname','exceleintragposition');% Beschriftung
xlswrite('Dateiname.xls', W, 'sheetname','exceleintragposition');
xlswrite('Dateiname.xls', Beschriftung U,'sheetname','exceleintragposition'); %Beschriftung
xlswrite('Dateiname.xls', U, 'sheetname','exceleintragposition');
 end

  if A==2
xlswrite('Dateiname.xls', Beschriftungsvektor Q, 'sheetname','A1');
......

A=A+1
end

 


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..

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Quinn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2014, 23:28     Titel:
  Antworten mit Zitat      
Hallo noch einmal,
habe den vertcat Tipp gerade ausprobiert und folgendes funktioniert. Ist das, was du meintest? Habe ich es richtig/praktisch gemacht?


Code:
i=1
z=2
while i<4
u=z+i
v=z*i

i=i+1
Q(i)=v
P(i)=u

end
%
Q = vertcat(Q(:))
P = vertcat(P(:))

M= [Q P]



MATLAB Ausgabe:
[...]
Q =

0
2
4
6


P =

0
3
4
5


M =

0 0
2 3
4 4
6 5



VG und DANKE! Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Quinn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2014, 21:27     Titel:
  Antworten mit Zitat      
Hallo, kurze Frage zu meinem letzten post:

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
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.