用于刚性和非线性微分方程的ODE求解器

时间:2016-07-15 08:41:24

标签: matlab ode

我必须解决刚性非线性微分方程。我在MATLAB求解器中尝试了ode45,ode15s和ode23s,但没有一个有效。在程序中的ode-solvers行完成一些步骤后,程序陷入忙碌状态。任何帮助将不胜感激。

这是代码中的一个例子。

我想用牛顿法解决边界值问题。

这是main.m

for i=1:10 %convergence criteria
[FF,JJ,F2,J2]=newton(s,tm,m);

% newtons method with F and J
 delta_s=-F2'*inv(J2')';
 delta_s=reshape(delta_s,11,2);
 s(:,1:2) = s(:,1:2) + delta_s; % in straight newton t=1
 %%%%%   

if norm(delta_s)<tol
    break
end

end

当我调试代码时,它与ode15s一致。 s变量是每个区间的解决方案。

function [FF,JJ,F2,J2] = newton(s,tm,m)
lambda = 1e9;
F = zeros(2*m, 1);
J2=zeros(2*m,size(s,1));
G0=eye(2,2);
for l=1:m-1

    y0=[s(l,1:2)';G0(:)];

     f=@(t,y)odes(t,y);
     opts=odeset('RelTol',1e-6,'Stats','on'); 
     sols=ode15s(f,[tm(l),tm(l+1)],y0,opts); 

end

0 个答案:

没有答案