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

Lösen einer DGL und Plot im Phasenraum

 

Friedrich90
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 12.06.15
Wohnort: Ruhrgebiet
Version: R2012a
     Beitrag Verfasst am: 25.06.2015, 20:33     Titel: Lösen einer DGL und Plot im Phasenraum
  Antworten mit Zitat      
Hallo,

ich habe eine Frage.
Ich möchte eine DGL im Phasenraum plotten. Insbesondere möchte ich periodische Lösungen finden.
Ich habe das folgende System:
Code:
function dy = system1(t, y)
    dy = zeros(2,1);
    dy(1) = y(1)-y(2)-y(1)*(y(1)^2+y(2)^2);
    dy(2) = y(2)+y(1)-y(2)*(y(1)^2+y(2)^2);
 

Dann habe ich diesen Code versucht:
Code:
% System 2

close all
t=[0 100];

ic1=[3 0];  %initial condition 1

[T1,Y1]=ode15s(@system2,t,ic1);

% plot Phasenraum x-x'-Diagramm
figure(1)

plot(Y1(:,1),Y1(:,2), 'k')

xlabel('x')
ylabel('x''')
title('System2: Phasenraum')
 


Aber es funktioniert nicht.
Jetzt war meine Idee das System in Polarkoordinaten zu schreiben.
Code:
r'=r(r^2-2r(theta)-3)
(theta)'=1

Wie kann ich das System in Polarkoordinaten lösen lassen und wie kann ich den Orbit plotten?

Vielen Dank im Voraus
Viele Grüße

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
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: 25.06.2015, 20:46     Titel:
  Antworten mit Zitat      
Hallo,

was bedeutet "es funktioniert nicht"? Gibt es eine Fehlermeldung? Welche? Ein unerwartetes Verhalten? Inwiefern?

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 12.06.15
Wohnort: Ruhrgebiet
Version: R2012a
     Beitrag Verfasst am: 25.06.2015, 20:58     Titel:
  Antworten mit Zitat      
Hallo,

es wird die folgende Fehlermeldung ausgegeben:

Warning: Failure at t=4.231156e-01. Unable to meet integration tolerances without reducing the step size below the smallest value
allowed (8.881784e-16) at time t.
> In ode15s at 731
In plot_system2 at 11
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: 25.06.2015, 22:03     Titel:
  Antworten mit Zitat      
Hallo,

ich habe es nun mit mehreren Solvern versucht, und ich kann die Fehlermeldung nicht reproduzieren.

Die einzige Änderung: ich habe beim ode15-Aufruf @system1 eingesetzt, denn du hast nur die Funktion system1 zur Verfügung gestellt. Wenn du wirklich die Funktion system1 aufrufen wolltest, dann bitte auch diese zur Verfügung stellen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 12.06.15
Wohnort: Ruhrgebiet
Version: R2012a
     Beitrag Verfasst am: 26.06.2015, 06:45     Titel:
  Antworten mit Zitat      
Hallo,

es tut mir Leid. Ich habe das flasche System gepostet. Hier das richtige System:
Code:

function dy = system2(t, y)
    dy = zeros(2,1);
    dy(1) = y(1)*(y(1)^2+y(2)^2-2*y(1)-3)-y(2);
    dy(2) = y(2)*(y(1)^2+y(2)^2-2*y(1)-3)+y(1);


Die Transformation in Polarkoordinaten stimmt aber.

Viele Grüße

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
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: 26.06.2015, 07:54     Titel:
  Antworten mit Zitat      
Hallo,

jetzt kann ich das reproduzieren, ja.

Du kannst das transformierte Problem an sich genauso lösen wie das ursprüngliche. Letztlich sind es auch einfach zwei gekoppelte DGL.

Anschließend kannst du entweder zurücktransformieren oder
Code:

verwenden.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 12.06.15
Wohnort: Ruhrgebiet
Version: R2012a
     Beitrag Verfasst am: 26.06.2015, 14:27     Titel:
  Antworten mit Zitat      
Hallo,
ich habe folgendes versucht: (Entschuldigung oben ist leider das System in Polarkoordinaten falsch angegeben.)

Code:

function dy = system3(t, y)
    dy = zeros(2,1);
    dy(1) = y(1)*(y(1)^2-2y(1)*cos(y(2))-3);
    dy(2) = 1
 


Code:

% Skript
% System 3

close all
t=[0 2];

ic1=[2.8 1];  %initial condition 1

[T1,Y1]=ode15s(@system3,t,ic1);

% plot Phasenraum x-x'-Diagramm
figure(1)

polar(Y1(:,1),Y1(:,2), 'k')

xlabel('x')
ylabel('x''')
title('System2: Phasenraum')
 


Dann habe ich folgende Fehlermeldung bekommen:

>> plot_system3
Error using feval
Error: File: system3.m Line: 3 Column: 27
Unexpected MATLAB expression.

Error in odearguments (line 88 )
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.

Error in ode15s (line 149)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in plot_system3 (line 12)
[T1,Y1]=ode15s(@system3,t,ic1);

Ich komme gerade nicht weiter.
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: 26.06.2015, 14:44     Titel:
  Antworten mit Zitat      
Hallo,

im Editor ist der Code Analyzer integriert. Das rote Quadrat rechts oben zeigt an, dass im Code Fehler enthalten sind. Auf den roten Balken rechts klicken, und du kommst an die zu korrigierende Zeile.
* einfügen, und schon läuft der Code.
Alternativ in die Zeile 3 gehen und die Zeichen abzählen.

Allerdings bekomme ich weiterhin dieselbe Warnung. Ist es möglich, dass die Lösung an der Stelle einfach explodiert?

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 12.06.15
Wohnort: Ruhrgebiet
Version: R2012a
     Beitrag Verfasst am: 26.06.2015, 15:21     Titel:
  Antworten mit Zitat      
Hallo,

dann besser zurück zum System mit kartesichen Koordinaten.
Ich möchte den periodischen Orbit des Systems finden.
Der Orbits muss zwischen (2.8 0) und (3 0) liegen. Kann man den Code so schreiben, dass er den Orbit bis z.B. einem Radius 100 zeichnet und dann abbricht? So das die Lösung nicht explodiert?
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: 26.06.2015, 15:40     Titel:
  Antworten mit Zitat      
Hallo,

das Beenden über ein Kriterium ist möglich, indem man mit odeset ein entsprechendes Event definiert.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 12.06.15
Wohnort: Ruhrgebiet
Version: R2012a
     Beitrag Verfasst am: 26.06.2015, 16:31     Titel:
  Antworten mit Zitat      
Hallo,

habe das Problem gelöst. Es ist richtig das die Lösung für große t (>1) für Radius >3 gegen unendlich geht. Aber dann ist natürtlich die richtige Schlussfolgerung, sich anzuschauen was die Orbits für fallende t machen.
Das ist jetzt der funktionierende Code:
Code:

function dy = system2(t, y)
    dy = zeros(2,1);
    dy(1) = y(1)*(y(1)^2+y(2)^2-2*y(1)-3)-y(2);
    dy(2) = y(2)*(y(1)^2+y(2)^2-2*y(1)-3)+y(1);
 


Code:

% Skript
% System 2

close all
t=[0 -10];

ic1=[0.5 0];  %initial condition 1
ic2=[-0.5 0];  %initial condition 2
ic3=[0 0.5];  %initial condition 3
ic4=[0 -0.5];  %initial condition 4
ic5=[5 0];  %initial condition 5
ic6=[-3 0];  %initial condition 6
ic7=[0 3];  %initial condition 7
ic8=[0 -3];  %initial condition 8

[T1,Y1]=ode15s(@system2,t,ic1);
[T2,Y2]=ode15s(@system2,t,ic2);
[T3,Y3]=ode15s(@system2,t,ic3);
[T4,Y4]=ode15s(@system2,t,ic4);
[T5,Y5]=ode15s(@system2,t,ic5);
[T6,Y6]=ode15s(@system2,t,ic6);
[T7,Y7]=ode15s(@system2,t,ic7);
[T8,Y8]=ode15s(@system2,t,ic8);

% plot Phasenraum x-x'-Diagramm
figure(1)

hold on

plot(Y1(:,1),Y1(:,2), 'k')
plot(Y2(:,1),Y2(:,2), 'b')
plot(Y3(:,1),Y3(:,2), 'r')
plot(Y4(:,1),Y4(:,2), 'm')
plot(Y5(:,1),Y5(:,2), 'k')
plot(Y6(:,1),Y6(:,2), 'b')
plot(Y7(:,1),Y7(:,2), 'r')
plot(Y8(:,1),Y8(:,2), 'm')


xlabel('x')
ylabel('x''')
title('System2: Phasenraum')

hold off
 


Aber trotzdem danke für die Hilfe.

System 2.jpg
 Beschreibung:

Download
 Dateiname:  System 2.jpg
 Dateigröße:  17.72 KB
 Heruntergeladen:  444 mal
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.