|
|
Fehler bei Lösung von DGL mit ode15s |
|
Raderu |

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 12.09.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.09.2016, 23:59
Titel: Fehler bei Lösung von DGL mit ode15s
|
 |
|
 |
|
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
erscheint folgender Fehler:
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:
zeigt sich, dass der einzig errechnete Wert 0 ist...
Danke für eure Hilfe!
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 13.09.2016, 08:28
Titel:
|
 |
Hallo,
deine Funktion liefert im ersten Schritt NaN:
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
verwenden. In R2016a liefert dein Aufruf eine Fehlermeldung. Diese Aufrufform ist auch seit etlichen Jahren nicht mehr dokumentiert.
Grüße,
Harald
|
|
|
Raderu |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 12.09.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.09.2016, 22:14
Titel:
|
 |
Harald hat Folgendes geschrieben: |
Hallo,
deine Funktion liefert im ersten Schritt NaN:
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
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|