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

Fehler bei Lösung von DGL mit ode15s

 

Raderu
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 12.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2016, 23:59     Titel: Fehler bei Lösung von DGL mit ode15s
  Antworten mit Zitat      
Hey,
ich bräuchte Hilfe bei der Verwendung de solvers ode15s.
Ich muss folgende Gleichung lösen:


function dpdp = fun(t,pq,K1,K2,PT,KT,ST)

Y = pq(1);
a1 = ST-Y;
b1 = KT;
c1 = K1;

if c1 < b1
    b_1 = b1/a1;
    eps_1 = c1/b1;
    if b_1 < 1
        x_1 = 1-eps_1*(b_1/(b_1-1));
    else
        x_1 = b_1*(1-eps_1*(b_1/(1-b_1)));
    end
    x1 = x_1*a1;
else
    c_1 = c1/a1;
    eps_1 = b1/c1;
    x_1 = (eps_1*c_1)/(1+c_1);
    x1 = x_1*a1;
end

a2 = Y;
b2 = PT;
c2 = K2;

if c2 < b2
    b_2 = b2/a2;
    eps_2 = c2/b2;
    if b_2 < 1
        x_2 = 1-eps_1*(b_2/(b_2-1));
    else
        x_2 = b_2*(1-eps_2*(b_2/(1-b_2)));
    end
    x2 = x_2*a2;
else
    c_2 = c2/a2;
    eps_2 = b2/c2;
    x_2 = (eps_2*c_2)/(1+c_2);
    x2 = x_2*a2;
end

dpdp = zeros(1,1);
dpdp(1) = x1-x2;
end
 


Sobald ich aber den solver darauf anwende
Code:

sol=ode15s(@fun,[0 50],[0],10,15,25,30,100);
 

erscheint folgender Fehler:
Code:

Warning: Failure at t=0.000000e+00.  Unable to meet integration tolerances without
reducing the step size below the smallest value allowed (7.905050e-323) at time t.
> In ode15s at 669
 

Ich verstehe allerdings nicht wieso das schon bei t=0 passiert?
Vermutlich kann bei t=0 die Jacobi-Matrix nicht invertiert werden, kann ich das irgendwie umgehen indem ich die stepsize ändere? Oder liegt das an der Funktion in Zusammenhang mit den Startwerten?
Der solver scheint ja nicht über den ersten Wert hinauszukommen, mit:
Code:

sol(1).y
 

zeigt sich, dass der einzig errechnete Wert 0 ist...
Danke für eure Hilfe!
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: 13.09.2016, 08:28     Titel:
  Antworten mit Zitat      
Hallo,

deine Funktion liefert im ersten Schritt NaN:
Code:
fun(0, 0, 10,15,25,30,100)


Dies liegt daran, dass
a2 = Y = pq(1)
und dass in Zeile 29 durch a2 geteilt wird.

Vielleicht schafft eine weitere Fallunterscheidung da Abhilfe?
Alternativ könnte man einen Startwert sehr nahe bei 0, z.B. 1e-20 verwenden.

Als Aufrufsyntax würde ich zudem
Code:
sol=ode15s(@(t, pq) fun(t, pq, 10,15,25,30,100), [0 50],[1e-20]);
verwenden. In R2016a liefert dein Aufruf eine Fehlermeldung. Diese Aufrufform ist auch seit etlichen Jahren nicht mehr dokumentiert.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 12.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2016, 22:14     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

deine Funktion liefert im ersten Schritt NaN:
Code:
fun(0, 0, 10,15,25,30,100)


Dies liegt daran, dass
a2 = Y = pq(1)
und dass in Zeile 29 durch a2 geteilt wird.

Vielleicht schafft eine weitere Fallunterscheidung da Abhilfe?
Alternativ könnte man einen Startwert sehr nahe bei 0, z.B. 1e-20 verwenden.


Danke dafür, so hat sich das Problem gelöst Smile
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.