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

Schleifenergebnisse in einer Variable zusammensetzen

 

Zool
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 25.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2010, 14:36     Titel: Schleifenergebnisse in einer Variable zusammensetzen
  Antworten mit Zitat      
Hallo,
ich versuche gerade über 2 for-Schleifen ein Ergebnis zu berechnen. Die Berechnung der inneren Schleife funktioniert korrekt und gibt nacheinander k mal n x 3 Matrizen aus, wobei die n, die Anzahl der Zeilen variiert.
Mit der zweiten Schleife möchte ich nun alle Schleifenergebisse F= n x 3 in einer Variable zusammenlegen. Normalerweise würde ich sowas so machen : A = [a;b]. Dann werden a und b untereinander geschrieben. Mit der zweiten Schleife bekomme ich das so aber nicht hin, weil es sich um jeweils 3 Spalten handelt bzw. sich alles in einer loop befindet...

Code:

for k=2:5
...
    for i=1:size(X,2)
        ...
        F(i,:)=X;
    end
F   % bis hier stimmt alles, alle Zwischenergebnisse F= nx3 sollen nun in FF      
    % untereinander geschrieben werden.
FF= F..????
end
FF
 


Das Ergebnis FF soll also folgendes Ergebnis ergeben:
FF=
[nx3;
nx3;
nx3;
...]
wobei n beliebig sein kann.
Danke für die Hilfe und Grüße,
Zool
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.09.2010, 14:17     Titel:
  Antworten mit Zitat      
Hallo

versuche mal mit VERTCAT die Matrizen einander anhängen.
Code:

F   = rand(2,3)
FF = rand(5,3)
 
FF = vertcat(FF,F);
 


anderenfalls, führe doch eigenen Zähler

Code:

c=1;
for k=2:5
...
    for i=1:size(X,2)
        ...
        F(c,:)=X;
        c=c+1;
    end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Zool
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 25.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2010, 12:31     Titel:
  Antworten mit Zitat      
Hallo,
danke für den Tip denny! Ich habe deine Vorschläge versucht, aber komme damit nicht weiter, da sich ja die "Zwischenergebnisse" in einer Schleife befinden. Ich habe zwischenzeitlich ein ähnliches Problem (s.u.). Es muss doch möglich sein, unterschiedlich lange Schleifenergebnisse zu einer Matrix zusammenzufügen?!? Den eigenen Zähler habe ich ja drin und das mit vertcat funktioniert nicht, da sich die Zusammenfassung ja in der nächst höheren Schleife befindet...
Vielleicht bin ich auch grad betriebsblind Shocked

Code:


    for h=1:size(gg,2)  
        clear Y2 s2 II
        s2=ismember(grp,gg(h));
        Y2=YN(:,find(s2==1));
              for i=1:size(Y2,2)
                  Spectrum=Y2(:,i);
                    for j=1:size(FI,2)
                        I=Spectrum(FI(h,j));
                        Intens(j,:)=I ;
                    end    
               II(i,:)=[Intens]';

              end    
II   % hier werden nun z.B. 46x5, 50x5 und 37x5  Matrices als Ergebnis  
     % ausgegeben...aber alle einzelnd...
     % ich möchte aber am Ende eine Matrix M=133*5 haben, also alle    
     % Zwischenschritte untereinander!
    end
 


Außerdem ist mir aufgefallen, dass das zweite Ergebnis einfach die kürzeren überschreibt anstelle sie untereinander anzuordnen. Ich habe das mit den clear II Befehlen gelöst. Aber untereinandergeschrieben wird da nichts.

Danke für jede Hilfe...ist etwas schwere Kost!

Rolling Eyes

Grüße,
Zool
Private Nachricht senden Benutzer-Profile anzeigen
 
Zool
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 25.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2010, 12:54     Titel:
  Antworten mit Zitat      
Juhuu...
ich habs eben durch Zufall gefunden. Ist ja gar nicht so schwer^^

Code:

Int = []; % Matrix definieren
for i = 1:h
   % Rechnerei mit II
   M = [A; II]; % Hier hinzufügen
end
M
 


Das Problem war wohl, dass ich nicht wusste, wie man in einer Schleife M = [A; y] darstellt. Die leere Matrix also vordefinieren und dann nacheinander und untereinander befüllen!
Danke trotzdem an alle die sich Gedanken gemacht haben!!
Grüße
Zool
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: 08.09.2010, 13:09     Titel:
  Antworten mit Zitat      
Hallo Zool,

Ich verstehe das Problem immer noch nicht. Ich versuche erstmal das Programm etwas zu vereinfachen:
Code:

for h=1:size(gg,2)  
  II = YN(FI(h, :), ismember(grp, gg(h)))';
  disp(II);  
end
 

Ist das richtig? Möglicherweise stimmen die Dimensionen von YN und grp nicht über ein, dann bräuchtest Du doch noch ein FIND(ismember()).

Wie ich sehe, hast Du eine Lösung gefunden, während ich gerade antworte. Dennoch könnte die oben gezeigte Vereinfachung hilfreich sein. Bei "ismember()==1" kann man das "==1" weglassen. Die Schleifen über i und j kann man besser als Matrix-Operation implementieren. Und das CLEAR bringt hier nichts.

Viel Erfolg, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Zool
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 25.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2010, 13:20     Titel:
  Antworten mit Zitat      
Danke für die Hinweise Jan! Deine Vereinfachung funktioniert bestens!
Ich lerne noch!^^
Grüße
Zool
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: 08.09.2010, 14:01     Titel:
  Antworten mit Zitat      
Hallo Zool,

schön! Ich lerne auch noch.

Das Weglassen von Schleifen ist eine sehr effiziente Method in Matlab. Erstens wird der Code dramatisch schneller, zweitens kann man einfach viel weniger Fehler machen, wenn man sich erst gar nicht mit Indices herumschlagen muss.

Deswegen heißt es auch "Mat(rix)lab"!

Gruß, Janv
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.