函数文件1:
function b=F(x0,h,u,tau)
b(,)=x0()-u();
b(,)=x0()-u()+*h*1e8*cos(tau)*x0();
函数文件2:
function g=Jacobian(x0,h,tau)
g(,)=;
g(,)=;
g(,)=;
g(,)=+*h*1e8*cos(tau);
函数文件3:
function x=Euler(h,x0,u,tau)
% x0 表示迭代初值
% u 表示上一节点数值
tol=1e-;
x1=x0-Jacobian(x0,h,tau)\F(x0,h,u,tau);
while (norm(x1-x0,inf)>tol)
%数值解的2范数是否在误差范围内
x0=x1;
x1=x0-Jacobian(x0,h,tau)\F(x0,h,u,tau);
end
x=x1;%不动点
脚本文件:
clear
clc
N=[1e2 1e3 1e4 1e5];
for k=:length(N)
h=(pi/)/N(k);
t=:h:pi/;
y(:,)=[;];%原问题初值
u(:,)=y(:,);%子问题一的初值
for i=:N(k)
u(:,i+)=u(:,i)+h*[-u(,i)^*u(,i)-u(,i)^;u(,i)+1e8*sin(*t(i+))];
y(:,i+)=Euler(h,u(:,i),u(:,i+),t(i+));
u(:,i+)=y(:,i+);
end
for i=:N(k)+
Accurate(:,i)=[cos(t(i));sin(t(i))];
end
error=abs(Accurate-y);
E_max(k)=max(error(,:));
end
% plot(t,Accurate(,:),'-r*')
% hold on
% plot(t,y(,:),'bp')
% grid on