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

Mehrdimensionale Matrix in for-Schleife beschreiben

 

Tekrum
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2011, 11:13     Titel: Mehrdimensionale Matrix in for-Schleife beschreiben
  Antworten mit Zitat      
Hallo,

ich hänge gerade ein wenig, wie am besten eine mehrdimensionale Matrix zu beschreiben ist.
Ich habe einen Raum in n Volumenelemente aufgeteilt. Dabei ist jeden Volumenelment über x,y,z ansprechbar. x,y,z sind natürliche Zahlen und dazugehörig ist b(reite), h(öhe) und l(änge). b,h undl sind Zeilenvektoren mit jeweils B, H und L Elementen. Zu jeden Volumenelement gehören 5 Eigenschaften.
Damit ich die jeweiligen Eigenschaften gut ansprechen kann, wollte ich eine mehrdimensionale Matrix der Dimension BxHxLx5, so dass ich schlussendlich die Eigenschaften über bspw. eig(1,2,1,: ) auslesen kann.

Ich dachte mir, ich kann das ganze in einer for-schleifen Verkettung wie folgt packen:

Code:

%Version die nicht funktioniert
eig = zeros(size(b,2),size(h,2),size(l,2),5);
for x=1:size(b,2)
    for y=1:size(h,2)
        for z=1:size(l,2)
              eig1 = b(x)*h(y);
              eig2 = b(x)*l(z);
              eig3 = b(x)*b(x);
              eig4 = h(y)*h(y);
              eig5 = 1/(l(z)*l(z)*b(z));
              eig(x,y,z,:)=[eig1 eig2 eig3 eig4 eig5];
        end
    end
end
%Version die funktioniert
q=1; %Zählvariable
for x=1:size(b,2)
    for y=1:size(h,2)
        for z=1:size(l,2)
              eig1 = b(x)*h(y);
              eig2 = b(x)*l(z);
              eig3 = b(x)*b(x);
              eig4 = h(y)*h(y);
              eig5 = 1/(l(z)*l(z)*b(z));
              eig_vec(q,:)=[eig1 eig2 eig3 eig4 eig5];
              q=q+1;
        end
    end
end
eig = reshape(eig_vec,size(b,2),size(h,2),size(l,2),5);
 

So was denkt ihr?
Gibts Potential die Perfomance zu erhöhen oder die erste Version zum laufen zu bringen?

Wie dem auch sei - einen guten Rutsch!
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: 30.12.2011, 16:08     Titel: Re: Mehrdimensionale Matrix in for-Schleife beschreiben
  Antworten mit Zitat      
Hallo Tekrum,

Es ist sinnvoll statt "funktioniert nicht" zu beschreiben, was genau nicht funktioniert. Es wäre ineffizient, wenn ich jetzt anfange zu raten, was Dein Problem sein könnte.

Es gibt noch einiges Potential zur Beschleunigung. Es werden nämlich viele Berechnungen wiederholt ausgeführt, z.B. "eig3 = b(x)*b(x);". Das wird man also in die äußere Schleife ziehen.

"eig" ist ein Matlab-Befehl. Man sollte den Namen nicht überschreiben.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Tekrum
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2012, 09:26     Titel:
  Antworten mit Zitat      
Hallo,

ich hab den Code für das Forum umgeschrieben. Die Namen lauten nicht "eig". Somit aber unpassend gewählt für meine Erklärung.
Ebenso unpassend das Problem nicht zu beschreiben. Zum Testlauf hatte ich symbolische Werte [x=sym('x_',[1 3])] für die Abmessungen gewählt und das passte nicht mit der Initialisierung via 'zeros' zusammen. Also ein ganz einfacher Fehler. Aber ich hab diejenigen in eine äußere Schleife gezogen, wenn sie in einer Schleife drunter nicht weiter angesprochen werden.
Das Problem ist somit gelöst. Einzig wegen der Performance könnte, wie du ja auch selbst schreibst, weiter überlegt werden. Ich werde nochmal mit meinem Betreuer reden inwieweit das bei ca. zehn Elemente nötig ist.
Desweiteren war die Ausgabe/Sortierung über reshape auch falsch.

Vielen Dank,
Tekrum
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 - 2024 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.