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

Rotation in Schleifen

 

Gorum

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2010, 20:28     Titel: Rotation in Schleifen
  Antworten mit Zitat      
Guten Abend allerseits,

vielleicht kann mir hier jemand helfen... Ich versuch mal zu erklären, worum es geht.

Ich möchte Oberflächen auswerten, die in Form von x,y,z Matrizen gegeben sind. Die Daten sind ziemlich groß und davon hab ich auch jede Menge. Mein Programm arbeitet alle Daten, die in Unterverzeichnissen abgelegt sind, nacheinander ab und speichert mir die Ergebnisse.

Soweit, so gut... Nach etwa 2 Stunden oder auch bspw. 20 Dateien hängt sich mein Programm plötzlich auf. Wenn ich dann via strg+c abbreche verweist mich Matlab an folgende Zeile meines M-Files:

Code:

figure;
for i=-2:0.1:2
            for j=-2:0.1:2
 
                h1 = mesh(x,y,z);
                zdir = [0 1 0];
                center = [0 0 0];
                rotate(h,zdir,i,center)
                z_neu=get(h,'ZDATA');
                set(gca,'DataAspectRatio',[1 1 1])
                close gcf

         
                h2 = mesh(x,y,z_neu);
                zdir = [1 0 0];
                center = [0 0 0];
                rotate(h,zdir,j,center)
                z_neu2=get(h,'ZDATA');
                set(gca,'DataAspectRatio',[1 1 1])
                close gcf

                % hier folgt dann weitere Berechnung, in der z_neu2
                % mit einer Referenzfläche verglichen wird.
                % Ergebnis daraus wird mit den beiden Winkelparametern
                % i und j abgespeichert und später ausgewertet.

            end

end

 


Das Programm kippt also meine Fläche in allen Variationen um die y und die x Achse von jeweils -2 bis 2 Grad.

Dasselbe mache ich dann noch einmal im 1/100 Grad Bereich. Da es ja an sich funktioniert, vermute ich, dass ich ungewollt den Speicher überstrapaziere? Da ich ja 2 Plots mache, muß ich dann vor die Schleifen auch 2 mal "figure" schreiben?
Was ich auch versucht habe, ist vor die Schleifen ein "hold on" und dahinter ein "hold off" zu schreiben, Ergebnis seh ich allerdings erst morgen.
Oder muss ich die beiden Plots zusammen in einem Subplot unterbringen?

Oder mach ich irgendwas anderes falsch? Wink

Bedanke mich für's lesen, vielleicht hat ja jemand ne Idee,
Schönen Abend noch


dany2k3k
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 66
Anmeldedatum: 02.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2010, 02:18     Titel:
  Antworten mit Zitat      
eine genau antwort kann ich dir leider nicht bieten:
das mit dem speicherproblem könnte durchaus sein.
bei mir trat dies dann auf,wenn ich , so wie du, mit einer schleife viele plots in ein bild geplottet habe, also etwas der form

plot3(x1,y1,z1)
hold on
plot3(x2,y2,z2)
plot3(x3,y3,z3)
.
.
.

a)problem glaube ich ist,dass dann matlab für jeden "plot" im figure einen objektbaum anlegt, also für jeden plot auch die eigenschaften mitspeichern muss (farbe,strichstärke,markergröße,markerart,etc etc)

deutlich schneller gings bei mir,wenn ich zuerst die daten als eine wurst generiert habe, und dann mit
plot(xges,yges,zges) geplottet habe.
bereits ab 20 plots in einem figure bekam ich massive probleme mit der performance (rotation quälend langsam)


b)generell kannst du , wenn du mehrere figures haben willst,
einfach mit

figure(1), figure(2)
zwischen den figures wechseln.
also
figure(1) plot (blabla)
figure(2) plot (blabla)

(hoffe das beantwortet die fragen wegen "2 figure befehle" .


p.s.
nicht ganz klar ist mir,ob du alle variationen in einem figure haben möchtest,oder nur die aktuelle in der schleife ausgeben möchtest.


lg
daniel
Private Nachricht senden Benutzer-Profile anzeigen
 
Gorum

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2010, 11:20     Titel:
  Antworten mit Zitat      
Hallo Daniel,

vielen Dank für Deine Antwort!

Vorab, ich muss noch einen Tippfehler verbessern, es muß natürlich

rotate(h1,zdir,i center)
z_neu=get(h1,'ZDATA') heißen und entsprechend h2 im zweiten Plot.

Ja, vermutlich hast Du recht, dass ich dann zuviele Daten wegen den Plots habe. Dachte nur, dass sich durch das close gcf die Grafik eh schließt und dann im nächsten Durchlauf einfach überschrieben wird/neu erstellt.

Letztendlich mach ich's mir wohl sowieso zu kompliziert, mir gehts eigentlich nur um die z-Werte, die ich aus dem Graphen ziehe, die Plots brauche ich gar nicht. Deswegen werd ich das wohl nun von Hand machen und die Werte einfach normal ausrechnen.
Hatte das nur so erstellt, weil ich ursprünglich im weiteren Schritt nen Film für Präsentationszwecke gemacht hatte und dachte ich belasse den Teil jetzt einfach so.

Mit figure(1) und figure(2) über die jeweilige Grafik zu schreiben hab ich auch versucht, da ergibt sich dann dasselbe Problem.

Beste Grüße
 
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.