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

dsolve vs ode-solver

 

DragonLady

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2012, 15:10     Titel: dsolve vs ode-solver
  Antworten mit Zitat      
Hallo,
ich habe da mal eine Frage. Ich habe eine DGL dy=0.5*\frac{1}{y} mit y(0)=0. Wenn ich diese mit dsolve löse, bekomme ich auch eine Lösung: y=\sqrt{\frac{4*x}{5}}.
Wenn ich diese nun mit ode45 lösen möchte, steht zuerst die gegebene 0 drin, dann NaN und dann inf. Wie kann es denn nun sein, dass Matlab das Problem einerseits mit dsolve lösen kann und andererseits doch wieder nicht?


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.09.2012, 17:03     Titel: Re: dsolve vs ode-solver
  Antworten mit Zitat      
Hallo DragonLady,

Zitat:
Wenn ich diese nun mit ode45 lösen möchte, steht zuerst die gegebene 0 drin, dann NaN und dann inf.

Dann hast Du offensichtlich einen Bug im Code. Solange wir den Code nicht sehen, haben wir keine Chance zu erraten, wo der Fehler liegt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DragonLady

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2012, 19:13     Titel:
  Antworten mit Zitat      
Hallo zurück.

Mein Code lautet wie folgt:

Code:
function dy=yprime(t,y)
dy=0.5*1/y;
end
 


Und der Aufruf erfolgt dann mit:
Code:
[t,y]=ode45(@yprime,[0 10],[0]);
 
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.09.2012, 21:38     Titel:
  Antworten mit Zitat      
Hallo DragonLady,

Nun, was erwartest Du denn als Lösung für t=0 und den Startwert y=0? Welchen Wert wird dann "dy = 0.5 / y" annehmen? Wenn man das dann integriert, was könnte dabei heraus kommen?

SQRT(4*x/5) ist eine merkwürdige Lösung, oder? Was erhälst Du denn, wenn Du dies ableitest?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Ansätze sind schlicht komplett unterschiedlich.

dsolve löst symbolisch. Vereinfacht gesagt werden Techniken angewandt, die man im Studium gelernt hat, um Differentialgleichungen zu lösen: oft zunächst allgemeine Lösung, dann Anfangsbedingungen einsetzen.

odexy löst numerisch. Die Ableitung wird an mehreren Stellen ausgewertet und daraus die Funktion an verschiedenen Punkten angenähert. Da die Ableitung bei y = 0 unendlich ist, zieht sich das in den weiteren Rechnungen in Form von inf oder nan durch.

Wenn eine Lösung mit odexy gesucht wird, sollte sie zumindest mal eindeutig sein. Das ist sie in dem Fall aber nicht, da mit deiner Lösung auch das Negative davon eine Lösung ist.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2012, 11:16     Titel:
  Antworten mit Zitat      
Hallo erstmal ihr beide und danke für die schnellen Antworten.

@Jan
Ich sollte vielleicht nochmals drüberlesen, bevor ich was schreibe. Nach Probe sieht man ja, dass die Lösung sqrt(x) sein muss. Da habe ich vielleicht schon vorher was Andreres bei mir eingegeben.

@Harald
Irgendwie hatte ich mir schon gedacht, dass das was mit dem 1/y und y(0)=0 zu tun haben könnte.
Gibt es aber eine Möglichkeit so ein Problem trotzdem über einen ode-solver zu lösen?
 
Harald
Forum-Meister

Forum-Meister


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

es gibt eine Möglichkeit, die allerdings sehr mit Vorsicht zu genießen ist: Statt 0 einen Startwert angeben, der sehr nahe bei 0 ist.

Code:
[t,y]=ode45(@yprime,[0 10],1e-200);


Man sieht hier auch schön das Problem der zwei Lösungen, da für
Code:
[t,y]=ode45(yprime,[0 10],-1e-200);

das Negative der ersten Lösung herauskommt.

Ich möchte aber nochmal betonen, dass man mit einem solchen Vorgehen sehr vorsichtig sein muss. Das kann zu minimalsten Abweichungen führen, aber in manchen Fällen sicher auch zu komplett anderen Lösungen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2012, 09:23     Titel:
  Antworten mit Zitat      
Hallo Harald,

leider ist das ja oft so, dass sich die Fehler dann noch verschlimmern können, wenn man einige Bedingungen ändert.
Dankeschön, dass du dir die Zeit genommen hast, um über mein Problem nachzudenken.
 
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.