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

vertcat für n-Matrizen anwenden

 

Grünschnabel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 25.03.2015, 18:51     Titel: vertcat für n-Matrizen anwenden
  Antworten mit Zitat      
Hallo Zusammen,
ich habe folgendes Problem und es wäre schön, wenn mir jemand weiterhelfen könnte.

Ich habe n verschiedene Matrizen (Anzahl der Spalten ist immer gleich) und diese möchte ich zu einer Matrix zusammenfassen. Folgender Code löst mein Problem für z.B. 3 Matrizen.

Code:

Mat(1).In = [ 1 2 3;
                    4 5 6];
         
Mat(2).In= [ 5 6 7;
                   2 4 8;
                   9 3 6 ];
         
Mat(3).In = [ 5 6 7;
                    2 4 8];

Matrix = vertcat ([Mat(1).In; Mat(2).In; Mat(3).In])


Das Ergebnis von Matrix ist richtig.

Wie kann ich das ganze so umbauen, dass ich eine große Anzahl an Matrizen (n=1000) zusammensetzen? Matrix = vertcat ([Mat(1).In; Mat(2).In; ...;Mat(1000).In]) würde das Problem zwar lösen, aber diese Zeile mit Hand zu schreiben ist definitiv nicht der richtige Lösungsweg. Confused
Vielen Dank im Voraus.
Beste Grüße
Der Grünschnabel
Private Nachricht senden Benutzer-Profile anzeigen


Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 26.03.2015, 09:51     Titel:
  Antworten mit Zitat      
Hallo nochmal,
gibt es vielleicht einen geeigneten Schleifenansatz für mein Problem? Kennt sich da jemand aus? Googlen hat mein Problem leider nicht gelöst. Sad

Über Denkanstöße wäre ich euch wirklich dankbar oder ist meine Frage zu schwammig formuliert?

Beste Grüße
Grünschnabel
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: 26.03.2015, 09:57     Titel: Re: vertcat für n-Matrizen anwenden
  Antworten mit Zitat      
Hallo Grünschnabel,

Für [a; b; c] wird intern bereits VERTCAT(a, b, c) aufgerufen. Deshalb kann man eine der beiden Methoden in Deinem Code-Beispiel einfach weglassen.
Bei einem größeren Struct kann die die Schreibweise sogar noch mehr vereinfachen:

Code:
Mat(1).In = [ 1 2 3;
                    4 5 6];
         
Mat(2).In= [ 5 6 7;
                   2 4 8;
                   9 3 6 ];
         
Mat(3).In = [ 5 6 7;
                    2 4 8];

M1 = [Mat(1).In; Mat(2).In; Mat(3).In]
M2 = vertcat (Mat(1).In, Mat(2).In, Mat(3).In);  % Intern identisch zu M1
M3 = vertcat (Mat(1:3).In)  % Für bestimmte Felder
M4 = vertcat (Mat(:).In)   % Falls es *alle* Felder sein sollen
M5 = vertcat(Mat.In)  % Identisch zu M4, etwas schneller

Die Ausführung von M5 ist ein klein wenig schneller als bei M4, aber ich finde das (:) bei M4 klarer, wenn man den Code liest. Bei M5 könnte man denken, dass der Programmierer nicht bedacht hat, dass Mat ein Struct-Array ist. Ein eindeutiger Kommentar dahinter wäre aber auch hilfreich genug:
Code:
M5 = vertcat(Mat.In);   % Shortcut for: Mat(:).In! Mat is an array

Wenn Mat ein Struct-Array ist, ist "Mat.In" eine komma-separierte Liste, auch wenn man es dem Ausdruck nicht auf Anhieb ansieht. Diese Liste kann als Input für VERTCAT dienen und der Befehl wird in Matlab-typischer Art sehr kompakt, hübsch und effizient. Man hat kaum noch eine Chance einen Tipp-Fehler oder sonstigen Bug einzubauen!

Das mag ich an Matlab so: Für einige Probleme läuft es langsamer als andere Sprachen. Aber wenn ich gerade VERTCAT(Mat.In) mal in C nach programmiere, gibt es mehr als 20 Möglichkeiten für fiese Bugs, die man mit aufwändigem Debuggen absichern muss. Wenn man dann irgendetwas nicht bedacht hat, stürzt das Programm ab und der Nerv-Faktor ist gigantisch. Genervt zu sein verringert aber meine Zufriedenheit, und deshalb programmiere ich gerne in Matlab :-)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 26.03.2015, 10:50     Titel:
  Antworten mit Zitat      
Guten Morgen Ja,
vielen Dank für Deine Hilfe, das Problem ist gelöst!!!

Ich wusste nicht ganz genau warum, konnte mich aber daran erinnern, dass es vorteilhaft sein könnte, meine Matrizen als Struct-Array zu definieren. Der von Dir genannte Befehl

Code:
M4 = vertcat (Mat(:).In)   % Falls es *alle* Felder sein sollen


löst das Problem und ich gebe Dir absolut recht, Matlab hat sehr viele nette Funktionen die (wenn man weiß wie man sie benutzten muss) sehr hilfreich sind.

Prima und schönen Tag. Very Happy

Der Grünschnabel
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.