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

Mehrere Axes in einem Gui Fenster

 

Sandro
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.02.11
Wohnort: Düsseldorf
Version: R2009a
     Beitrag Verfasst am: 19.02.2011, 20:54     Titel: Mehrere Axes in einem Gui Fenster
  Antworten mit Zitat      
Hallo zusammen,

Meine Aufgabe: Ein Mathematisches Pendel mittels Gui darstellen. Es soll
schwingen.

Erledigt: Ich hab es soweit geschafft, dass mein Pendel schwingt.[/img][/u]
Ich habe mal meine Ergebnisse hochgeladen, um euch
zu zeigen wie ich das gemacht habe. Einfach den Startwinkel
eingeben Bsp. 60 ,Ausganstellung betrachten und simulieren.

Problem: Nun habe ich versucht unter diesem Axes noch einen
Axes(2) einzubauen,
indem man den Winkelverlauf über die Zeit gleichzeitig abbilden
kann. Bzw. muss ich noch zusätzlich in zwei weiteren
Axes(3)+(4) das Phasenportrait und den reltiven Fehler
darstellen.


Wie kann ich das programmieren, dass alle Diagramme
zeitgleich mit dem Pendel in einem Fenster
untereinander ausgegeben werden?
Wie könnte die nötige ergänzung aussehen, dass ein bestimmter
Axes(n) mit einem bestimmten algorithmus programmiert wird?


Ich hoffe ihr könnt mit meiner frage was anfangen.

Beste Grüße

Sandro
Confused

N800T6Im.pdf
 Beschreibung:
Hier ein beispiel wie die Diagramm verläufe unter dem Pendel aussehen sollten. (Winkel/Zeit)(Phasenportrait)(Relative Fehler)

Download
 Dateiname:  N800T6Im.pdf
 Dateigröße:  20.02 KB
 Heruntergeladen:  480 mal
Pendel.rar
 Beschreibung:
Hier sind die Daten mit dem Programmcode.

Download
 Dateiname:  Pendel.rar
 Dateigröße:  9.14 KB
 Heruntergeladen:  352 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.02.2011, 22:09     Titel:
  Antworten mit Zitat      
Hallo,

das sollte alles mit SUBPLOT gehen. Du musst nur immer ins richtige Koordinatensystem gehen, wenn du die Plots aktualisieren willst.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sandro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.02.11
Wohnort: Düsseldorf
Version: R2009a
     Beitrag Verfasst am: 20.02.2011, 02:14     Titel: Super ^^
  Antworten mit Zitat      
Danke Harald,

auf die Idee hätte ich auch kommen können Very Happy Embarassed

So einfach hab ich nicht gedacht. Aber das sieht schonaml gut aus Wink


Danke nochmal
Private Nachricht senden Benutzer-Profile anzeigen
 
Sandro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.02.11
Wohnort: Düsseldorf
Version: R2009a
     Beitrag Verfasst am: 20.02.2011, 12:10     Titel: Rückfragen
  Antworten mit Zitat      
Ich hab das mal ausprobiert:

Ich bekomm jetzt zwar zwei Diagramme drauf hab aber zwei Probleme:

1. Die Diagramme verschieben sich hinter die Button's. Wie kann ich das
steuern, dass sie so bleiben wie beim einfachen Mathematischen Pendel.

2. Auf dem Winkel/Zeit verlauf ist der wandernde Punkt zu erkennen. Wie
schaff ich es, dass ein Spurverlauf zurückbleibt?
Hab das einfach mal ganz primitiv versucht und einfach die Null Position
mit dem wandernden Punkt verbunden. Klappt net Crying or Very sad


Hab festgestellt, dass ich mein M-file garnicht mit geschickt habe.
Deshalb hab ich noch einmal den Pendel allein und die veränderte Gui geschickt mit dem WInkel/Zeit verlauf.

Grüße

Sandro

Weiterentwicklung.zip
 Beschreibung:
Das ist das GUI mit dem versuch ein Winkel/Zeit-Verlauf einzubauen.

Download
 Dateiname:  Weiterentwicklung.zip
 Dateigröße:  7.28 KB
 Heruntergeladen:  405 mal
Pendel.zip
 Beschreibung:
Das ist die Datei nur mit dem Pendel

Download
 Dateiname:  Pendel.zip
 Dateigröße:  7.11 KB
 Heruntergeladen:  356 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Sandro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.02.11
Wohnort: Düsseldorf
Version: R2009a
     Beitrag Verfasst am: 20.02.2011, 21:36     Titel: Kleine entschärfung^^
  Antworten mit Zitat      
Also ich geb es zu,.. ich bin ein Blutiger Anfänger^^


Die Frage 2 hat sich so weit erledigt. Habe meine Antwort in einem anderen Thema entdeckt^^

Code:
so einfach ist das Very Happy

Die Dinge sind nicht immer so kompliziert^^

Aber Problem 1 besteht noch! Die Diagramme wollen einfach nicht in ihrer vorgegebenen Axes Größe bleiben.

Ich hab auch einfach mal versucht 2 Axes in meiner Figure einzubauen und mittels subplot darauf zu zugreifen,...aber Matlab macht immer sein eigenes Ding.

Grüße

Sandro
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.02.2011, 21:45     Titel:
  Antworten mit Zitat      
Hallo,

wenn du eine GUI hast und daher die Position der Koordinatensysteme selbst wählen musst, ist SUBPLOT ungeeignet.
Dann solltest du die Koordinatensysteme vorab erstellen und über die Handles (üblicherweise handles.axes1 etc.) das richtige Koordinatensystem ansteuern.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sandro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.02.11
Wohnort: Düsseldorf
Version: R2009a
     Beitrag Verfasst am: 20.02.2011, 22:08     Titel:
  Antworten mit Zitat      
Hi,

ok, so sieht es im moment aus. Das ist mein zweiter Push Bottom. Durch klicken auf diesen Bottom wird die Simulation gestartet.

So weit ich das verstanden habe, kann ich also mit handles.irgendwas daten zwischen der guir_OpeningFcn, der guir_OutputFcn und meiner Push Bottoms und Static Texte daten austauschen. Ich weis nicht wie und wo ich handles.axes1 anordnen soll damit er auf die Axes plottet in meiner figure.

Code:
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%Parameter
   tend=12;
   t0=0;
   n=400;
   w1=handles.w1;
%Zeit Intervalle
   dt=(tend-t0)/n;

   %Anfangsbedingungen
   z1(1)=w1;
   z2(1)=0;
   t(1)=t0;
 



 for i=1 : n+1
     
    %Runge Kuttaverfahren
    k(1,1) = f1(t(i),z1(i),z2(i));
    k(2,1) = f2(t(i),z1(i),z2(i));
   
    k(1,2) = f1(t(i)+dt/2,z1(i)+dt/2*k(1,1),z2(i)+dt/2*k(2,1));
    k(2,2) = f2(t(i)+dt/2,z1(i)+dt/2*k(1,1),z2(i)+dt/2*k(2,1));
   
    k(1,3) = f1(t(i)+dt/2,z1(i)+dt/2*k(1,2),z2(i)+dt/2*k(2,2));
    k(2,3) = f2(t(i)+dt/2,z1(i)+dt/2*k(1,2),z2(i)+dt/2*k(2,2));
   
    k(1,4) = f1(t(i)+dt,z1(i)+dt*k(1,3),z2(i)+dt*k(2,3));
    k(2,4) = f2(t(i)+dt,z1(i)+dt*k(1,3),z2(i)+dt*k(2,3));
   
    z1(i+1)= z1(i)+1/6*(k(1,1)+2*k(1,2)+2*k(1,3)+k(1,4))*dt;
    z2(i+1)= z2(i)+1/6*(k(2,1)+2*k(2,2)+2*k(2,3)+k(2,4))*dt;
 
    t(i+1)=t(i)+dt;
   
 end
 

     
       
       for i= 1: n+1
       x1 = [0,2*sin(z1(i))]; y1 = [0,-2*cos(z1(i))];
       subplot(2,1,1);
       h=plot(x1,y1,'-b',0,0,'ob');
       set(h,'MarkerFaceColor','blue')
       set(h,'LineWidth',2.5)
       axis([-3. 3. -4. 3.]);
       %Winkel/Zeit Verlauf
       subplot(2,1,2);
       plot(t(i),z1(i)*(180/pi),'-b');
       hold on;
       axis([0. 15. -90. 90.]);
       %Bild ausgabe
       Bild = getframe;
       end
       
       i= 1;
       x1 = [0,2*sin(z1(1))]; y1 = [0,-2*cos(z1(1))];
       subplot(2,1,1);
       h=plot(x1,y1,'-b',0,0,'ob');
       set(h,'MarkerFaceColor','blue')
       set(h,'LineWidth',2.5)
       axis([-3. 3. -4. 3.]);
       %Winkel/Zeit Verlauf
       subplot(2,1,2);
       plot(t(i),z1(i)*(180/pi),'-b');
       hold on;
       axis([0. 15. -90. 90.]);
       %Bild ausgabe
       Bild = getframe;
 





Also ich mach die subplots weg:

Code:

  for i= 1: n+1
       x1 = [0,2*sin(z1(i))]; y1 = [0,-2*cos(z1(i))];
       h=plot(x1,y1,'-b',0,0,'ob');
       set(h,'MarkerFaceColor','blue')
       set(h,'LineWidth',2.5)
       axis([-3. 3. -4. 3.]);
       %Winkel/Zeit Verlauf
       plot(t(i),z1(i)*(180/pi),'-b');
       hold on;
       axis([0. 15. -90. 90.]);
       %Bild ausgabe
       Bild = getframe;
       end

 




Kann ich jetzt z.B einfach handles.axes mit dem Plot definieren?

Code:
   



handles.axes2=plot(t(i),z1(i)*(180/pi),'-b');

       
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.02.2011, 22:19     Titel:
  Antworten mit Zitat      
Hallo,

beim Plotten musst du das Handle des Koordinatensystems angeben.
Code:
plot(handles.axes1, ...)

Dazu muss das Koordinatensystem vorher mit GUIDE erstellt worden sein, das Default-Handle ist dann eben handles.axes1.

Vielleicht kannst du das ja an einem einfacheren Problem nachvollziehen? Sich durch deinen ganzen Code zu wühlen ist doch etwas mühsam.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sandro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.02.11
Wohnort: Düsseldorf
Version: R2009a
     Beitrag Verfasst am: 20.02.2011, 22:35     Titel:
  Antworten mit Zitat      
Hi,


PRIIIIMMMMAAAA, so funktioniert es.

Im guide hatte ich die beiden axes eingefügt.
Nur wusste ich nciht wie er sie ansteuer konnte.

Danke Harald!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Sandro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.02.11
Wohnort: Düsseldorf
Version: R2009a
     Beitrag Verfasst am: 20.02.2011, 22:45     Titel:
  Antworten mit Zitat      
Oje, Crying or Very sad


das mit den zwei Diagrammen ansteuern hat er verstanden. Aber die unterschiedliche skalierung nimmt er so nicht an:

Code:


for i= 1: n+1
       x1 = [0,2*sin(z1(i))]; y1 = [0,-2*cos(z1(i))];
       h=plot(handles.axes1,x1,y1,'-b',0,0,'ob');
       set(h,'MarkerFaceColor','blue')
       set(h,'LineWidth',2.5)
       axis([-3. 3. -4. 3.]);
       %Winkel/Zeit Verlauf
       plot(handles.axes2,t(i),z1(i)*(180/pi),'-b');
       hold on;
       axis([0. 15. -90. 90.]);
       %Bild ausgabe
       Bild = getframe;
       end

 



Ich hab gerad mal danach gesucht axes zu skalieren. Da bin ich auf solch ein Lösung gestoßen:

Code:


       handles.axes1=axis([-3. 3. -4. 3.]);


       


Aber das war alles andere als gut. Scheint nicht richtig zu sein.


Ich hab auch festgestellt, dass er bei meinem einfachen Pendel zunächst irgend eine skalierung anzeigt und sobald er rechnet dann die von mir definierten skalierungen einführt.

Gibt es ein Befehl, dass die skalierungen von anfang andefineirt werden.

Theoretisch sollte das im OpeningFcn passieren, bevor das Fenster geöffnet wird.

Gruß

Sandro
Private Nachricht senden Benutzer-Profile anzeigen
 
Sandro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.02.11
Wohnort: Düsseldorf
Version: R2009a
     Beitrag Verfasst am: 20.02.2011, 23:13     Titel: ^^
  Antworten mit Zitat      
OK,....ich habs^^

Code:
axis(handles.axes1,[-3. 3. -4. 3.]);

 


Das zweite Problem besteh noch aber das such ich erstmal selber.


Danke Very Happy


Beste Grüße

Sandro
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.02.2011, 10:41     Titel:
  Antworten mit Zitat      
Hallo,

falls du auf keine Lösung stößt, sag doch noch mal kurz, was das zweite Problem war.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sandro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.02.11
Wohnort: Düsseldorf
Version: R2009a
     Beitrag Verfasst am: 23.02.2011, 13:05     Titel:
  Antworten mit Zitat      
Hallo,

das zweite Problem: skalierung der Axes habe ich lösen können.
Habe einfach den Befehl in die "OpeningFcn" eingebaut und somit ist die Skalierung von anfang an festgelegt Very Happy

Aber eine Sache muss ich anders Lösen. Undzwar das Problem das ich zu beginn hatte.

Ein Punkt läuft durch das Diagramm. Jeder Punkt muss erhalten bleiben, damit sich ein Winkel-Zeitverlauf bildet. (Linien-Verlauf)

Bisher mach ich das mit folgender Syntak:

Code:



Das Problem ist, dass das nur funktioniert wenn ich im laufe des Programms auf das Diagramm klicke. Und falls ich auf das andere Axes klick, dann macht er das bei dem anderen auch.

Ich kann z.B. Grid on einstellen im Property Inspector. Dann ist das Spezifisch für das eine Axes definiert, ohne von ausen einwirken zu können.
Kann ich solch eine Funktion auch für das festhalten von Punkten auf dem Diagramm einstellen?


Eine weitere Frage wär:

wenn ich meine skalierung einstelle z.B.

Code:
axis(handles.axes1,[-3. 3. -4. 3.]);
 


kann ich auch anstelle der Zahlen variablen verwenden die vorher definiert worden sind?

z.B
Code:


axis(handles.axes1,[-(n-10). (n+10). -(t+5). (t-5).]);
 


So dass sich die Skalierungen den Eingabedaten anpassen.

z.B. habe ich bei einem Start winkel von 90° eine Amplitude von 90° aufzuzeichnen. Wenn aber das Diagramm 90°/-90° als Amplitude hat und der Startwinkel bei 160° liegt, dann wird nicht alles im Diagramm aufgezeichnet.

Grüße,

Sandro
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.02.2011, 13:55     Titel:
  Antworten mit Zitat      
Hallo,

der hold-Befehl bezieht sich auf ein Koordinatensystem.
Um ihn auf ein anderes als das aktive KS zu beziehen, musst du das explizit angeben, z.B.:
Code:
hold(axes.handles1, 'on')


Zum anderen Problem:
ja, und genau so, wie du das geschrieben hast, nur ohne die Punkte.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sandro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.02.11
Wohnort: Düsseldorf
Version: R2009a
     Beitrag Verfasst am: 23.02.2011, 17:39     Titel:
  Antworten mit Zitat      
Hallo,

ich bekomm eine für die zwei letzten Problem Fehlermeldungen:

Bezüglich Problem 1 ( hold on;);

Axes1 soll nicht festgehalten werden,erst einmal nur Axes2.

Code:
 hold(axes.handles2, 'on')


No appropriate method, property, or field handles2 for class hg.axes.

Error in ==> Runge>pushbutton1_Callback at 237
hold(axes.handles2, 'on')

Error in ==> gui_mainfcn at 96
feval(varargin{:});

Error in ==> Runge at 42
gui_mainfcn(gui_State, varargin{:});

Error in ==>
@(hObject,eventdata)Runge('pushbutton1_Callback',hObject,eventdata,guidata(hObject))


??? Error while evaluating uicontrol Callback




Bezüglich Problem 2 :


Wenn ich die Variablen so einsetze bekomme ich folgende fehler meldung:

Code:
axis (handles.axes1[ 0.  t -(n+5) (n+5)]);


??? Error using ==> axis>LocSetLimits at 234
Vector must have 4, 6, or 8 elements.

Error in ==> axis at 94
LocSetLimits(ax(j),cur_arg);

Error in ==> Runge>pushbutton1_Callback at 235
axis(handles.axes2,[0. t -(n+5) (n+5)]);

Error in ==> gui_mainfcn at 96
feval(varargin{:});

Error in ==> Runge at 42
gui_mainfcn(gui_State, varargin{:});

Error in ==>
@(hObject,eventdata)Runge('pushbutton1_Callback',hObject,eventdata,guidata(hObject))


??? Error while evaluating uicontrol Callback



Kann aber mit den Fehlermeldungen nicht wirklich was anfangen.

gruß

Sandro
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.