2016-10-03 5 views
5

У меня есть система, которая выглядит какMATLAB решения ОДУ на инвариантного многообразия

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

Я хочу, чтобы решить это уравнение на многообразии F(v,n,h)=0, нелинейной функции в v. Я попытался использовать что-то вроде v=fzero(@(x) F(x,n,h),0) для решения для значения v на коллекторе на каждом шаге. Но это невероятно медленно, и ode15s (моя система - релаксационный генератор) не отвечает интеграционной толерантности. Как найти решение для ODE на коллекторе, определяемое F(v,n,h)=0?

+1

Вы должны использовать решатель DAE, так как ваша система дифференциально-алгебраическая. – LutzL

ответ

2

Я нахожу комментарий @ LutzL очень полезным. Можно настроить решатель DAE с помощью ode15s. Пример: «Решить Robertson проблемы, как полуявная дифференциально-алгебраических уравнений (Даес)» раздел в https://www.mathworks.com/help/matlab/ref/ode15s.html

В моем случае, я бы настроить матрицу:

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); 

И slow функция определяется как :

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

Одним из возможных путей решения этой проблемы заключается в дифференцировании в F(v,n,h)=0 уравнение:

Теперь мы можем получить систему ОДУ

или

который может быть решен обычным способом.

+0

Я пробовал этот путь. Однако член dF/dv становится очень близким к 0 вблизи структуры складок в системе. Следовательно, точность решения не очень хороша. – Badoe

 Смежные вопросы

  • Нет связанных вопросов^_^