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 der DGL's mit ODE

 

Peter0075
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2020, 14:57     Titel: Lösen der DGL's mit ODE
  Antworten mit Zitat      
Hallo zusammen,

ich benötige Hilfe beim numerischen Lösen der beiden angehängten DGL's.
Die beiden Variablen x und y sind rot markiert, bei den restlichen Größen handelt es sich um Konstanten.

Generelle Frage sind die DGL's überhaupt so lösbar ?

Leider schaffe ich den nötigen Schritt der Linearisierung der beiden Gleichungen durch Substitution nicht, um diese mit der ODE Funktion numerisch zu lösen. Vielleicht kann einer von euch mir weiterhelfen Wink

Schonmal Danke an alle die es versuchen!

VG
Peter

DGL.PNG
 Beschreibung:

Download
 Dateiname:  DGL.PNG
 Dateigröße:  17.44 KB
 Heruntergeladen:  438 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: 15.04.2020, 17:46     Titel:
  Antworten mit Zitat      
Hallo,

wenn du die DGLen nach x'' und y'' auflöst (alles andere auf die andere Seite bringen) und das dann in ein System von DGLen erster Ordnung umwandelst, sollte das mit ode45 oder ähnlichen Lösern klappen. Eine Linearisierung ist nicht notwendig.

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
 
Peter0075
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2020, 18:42     Titel:
  Antworten mit Zitat      
Danke für deine Rückmeldung!

Ich hab die erste Gleichung jetzt mal in eine DGL erster Ordnung gewandelt (siehe Bild im Anhang).

So könnte ich ODE45 verwenden, wenn da nicht das y' (erste Ableitung von y) wäre.
Bzw. ich verstehe noch nicht wie ich die erste Ableitung von y in die ODE45 Funktion integriere ? (siehe die Fragezeichen in der Matlab Funktion)

Hier mal die Funktion die ich bisher in Matlab habe:

function dydt = numerischeLoesung(x,y)

dxdt = [x(2); 3*K*r*sin(phi)*(r*(cos(phi)*y(1)-sin(phi)*x(1))+omega_2)-2*omega*???? ];

[x,y] = ode45(@numerischeLoesung,[0 20],[2; 0]);


Danke!!!

DGL_erste_Ordnung.PNG
 Beschreibung:

Download
 Dateiname:  DGL_erste_Ordnung.PNG
 Dateigröße:  11.56 KB
 Heruntergeladen:  353 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: 15.04.2020, 19:35     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
So könnte ich ODE45 verwenden, wenn da nicht das y' (erste Ableitung von y) wäre.

Du musst das gleiche mit der anderen DGL machen. Dann ist y' entsprechend y2.

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
 
Peter0075
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2020, 20:01     Titel:
  Antworten mit Zitat      
Danke !

Hab es jetzt so umgesetzt, leider erhalte ich nur Fehlermeldungen.

Was fehlt noch ?

Vielen Dank!!

function [dxdt,dydt] = Numerische_Loesung(x,y)

syms phi r K omega omega_2

dxdt=[
x(2);
3*K*r*sin(phi)*(r*(cos(phi)*y(1)sin(phi)*x(1))+omega_2)-2*omega*y(2)
];

dydt = [
y(2);
-3*K*r*cos(phi)*(r*(cos(phi)*y(1)-sin(phi)*x(1))+omega_2)+2*omega*x(2)
];

Solver:

[x,y] = ode45(@Numerische_Loesung, [0 10],[0; 0.01]);
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: 15.04.2020, 20:25     Titel:
  Antworten mit Zitat      
Hallo,

syms und ode45 passen nicht zusammen. Du meintest doch, dass phi etc. Konstanten wären. Ich bin davon ausgegangen, dass du Werte dafür kennst? Wenn nicht, dann musst du mit dsolve arbeiten. Die Vorgehensweise ist da aber ziemlich anders.

Erste Entscheidung also: numerische oder symbolische Lösung. Beides mischen geht jedenfalls nicht.

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
 
Peter0075
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2020, 07:44     Titel:
  Antworten mit Zitat      
Danke für deine Hilfe das hat mich nochmal ein Stück weiter gebracht!
Ich hab die syms durch Konstante Werte ersetzt.
Ich erhalte folgende Fehlermeldung:

Index exceeds the number of array elements (1).

Error in Numerische_Loesung (line 12)
dt(1)=[x(2); 3*K*r*sin(phi)*(r*(cos(phi)*x(1)*sin(phi)*x(1))+omega_2)-2*omega*x(2)];

Ich hab das Gefühl Matlab versteht nicht das x und y 2 Einträge haben...
Hab es auch schon versucht x und y durch eine Matrix mit zwei Einträgen vorzugeben, Fazit: gleiche Fehlermeldung.

Mein Skript:

[x,y]=ode45(@Numerische_Loesung,[0 20],[0;10]);


Meine Function:

function [dt] = Numerische_Loesung(x,y)

phi = (120/360)*2*pi;
K = 500;
omega = 105;
omega_2=1;
r=0.2;

dt = zeros(2,1);

dt(1)=[x(2); 3*K*r*sin(phi)*(r*(cos(phi)*y(1)*sin(phi)*x(1))+omega_2)-2*omega*y(2)];

dt(2) = [ y(2); -3*K*r*cos(phi)*(r*(cos(phi)*y(1)-sin(phi)*x(1))+omega_2)+2*omega*x(2) ];

dt = [dt(1); dt(2)];
end
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: 16.04.2020, 08:09     Titel:
  Antworten mit Zitat      
Hallo,

du musst x und y zu einem Vektor (hier: u) zusammenfassen. Das erste Argument der Funktion muss die Simulationszeit sein, die nur im Falle einer expliziten Zeitabhängigkeit (externe Anregung) genutzt wird.

Code:
function [du] = Numerische_Loesung(t,u)

x = u(1:2);
y = u(3:4);

phi = (120/360)*2*pi;
K = 500;
omega = 105;
omega_2=1;
r=0.2;

%du = zeros(4,1);

dx=[x(2); 3*K*r*sin(phi)*(r*(cos(phi)*y(1)*sin(phi)*x(1))+omega_2)-2*omega*y(2)];

dy = [ y(2); -3*K*r*cos(phi)*(r*(cos(phi)*y(1)-sin(phi)*x(1))+omega_2)+2*omega*x(2) ];

du = [dx; dy];
end


Beim Aufruf musst du einen Vektor mit 4 Anfangsbedingungen (für x und y sowie deren Ableitungen; auf die Reihenfolge achten!) übergeben, z.B.:
Code:
[t,u]=ode45(@Numerische_Loesung,[0 20],[0;10;0;10]);


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
 
Peter0075
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2020, 08:44     Titel:
  Antworten mit Zitat      
Besten Dank!!!

VG
Peter
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.