goMatlab - Mein MATLAB Forum

Mein MATLAB Forum

 
Login  | Registrieren
Bücher:

Einstieg in das Programmieren mit MATLAB

Fachkräfte:
Testingenieur (w/m) Testframework für Simulink-basierte Echtzeitanwendungen
Pflege des MATLAB/Simulink-Testframeworks, Spezifizieren von Testkriterien, Testfällen und Testszenarien
dSPACE GmbH - Paderborn

Softwareentwickler MATLAB/Simulink (w/m)
Erarbeitung von Lösungen im Bereich der Schnittstelle zum Simulink-Modell und der Benutzeroberfläche von TargetLink
dSPACE GmbH - Paderborn

Testingenieur (w/m) Konfigurationswerkzeuge für Echtzeitsysteme
Einbinden von Simulink®-Simulationsmodellen, Verteilung der Simulationsmodelle auf Multicore- und Multiprozessorsysteme
dSPACE GmbH - Paderborn

Support-Ingenieur (w/m) für die dSPACE-Echtzeitsysteme
Diagnose von Anwenderproblemen, Erarbeitung von Lösungen, Konzeption geeigneter Testaufbauten und Simulationsmodelle
dSPACE GmbH - Paderborn

Entwicklungs-Ingenieure (m/w), BLDC Motoren und Steuerung
Entwicklung von Steuerstrategien für sensorlos betriebene Motoren
ixetic Bad Homburg GmbH - Bad Homburg

weitere Angebote

Partner:




Vermarktungspartner


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, 12: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: 3879
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 6.5, 2009a
     Beitrag Verfasst am: 30.12.2011, 17: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, 10: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



Options and Permissions
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2012 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.