2016-10-03 3 views
5

Ich habe ein System, das MATLAB lösen ODE auf invariante Mannigfaltigkeit

dn/dt=f(n,v) 
dh/dt=g(h,v) 

ich diese Gleichung in v auf dem Verteiler F(v,n,h)=0, eine nichtlineare Funktion lösen wollen wie

aussieht. Ich habe versucht, etwas wie v=fzero(@(x) F(x,n,h),0) zu verwenden, um den Wert von v auf dem Verteiler bei jedem Zeitschritt zu lösen. Aber das ist unglaublich langsam und Ode15s (mein System ist ein Entspannungs-Oszillator) erfüllt nicht die Integrationstoleranz. Wie finde ich eine Lösung für die ODE auf der durch F(v,n,h)=0 definierten Mannigfaltigkeit?

+1

Sie sollten einen DAE-Löser verwenden, da Ihr System differential-algebraisch ist. – LutzL

Antwort

2

Ich finde @ LutzLs Kommentar sehr hilfreich. Es ist möglich, einen DAE-Solver mit ode15s einzurichten. Beispiel: Das "Lösen Robertson Problem als Semi-Explicit differentiell-algebraische Gleichungen (DAE)" in https://www.mathworks.com/help/matlab/ref/ode15s.html

In meinem Fall würde ich Setup eine Matrix:

M=[zeros(1,3);0,1,0;0,0,1]; 
options = odeset('Mass',M,'RelTol',1e-5,'AbsTol',1e-6,'MaxStep',0.01); 
y0=[v0,n0,h0]; 
[T,Y]=ode15s(@slow,[0 50],y0,options); 

Und slow ist eine Funktion definiert als :

function dy = slow(t,y) 
    v=y(1); n=y(2); h=y(3); 
    dy=zeros(3,1); 
    dy(1)=F(v,n,h); 
    dy(2)=f(n,v); 
    dy(3)=g(h,v); 
end 
0

Einer der möglichen Wege, um dieses Problem zu lösen, ist die F(v,n,h)=0 Gleichung zu unterscheiden:

Nun können wir das ODE-System erhalten

oder

, die in der üblichen Weise gelöst werden können.

+0

Ich habe diesen Weg versucht. Der Term dF/dv wird jedoch in der Nähe einer Faltungsstruktur im System sehr nahe bei 0. Daher ist die Lösungsgenauigkeit nicht sehr gut. – Badoe

Verwandte Themen