我必须解决刚性非线性微分方程。我在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