根据题目微分方程:
根据初值,将
的区间为[0,5]
根据隐式欧拉公式:
但是我们并不知道此时的值
所以每次迭代前都需要先计算此时的,以便算出
matlab代码如下:
a=0;
b=5;
y0=2;
h=0.01;
s=(b-a)/h;
X=zeros(1,s+1);
Y=zeros(1,s+1);
X=a:h:b;
Y(1)=y0;
q=@lin;
for k=1:s
k1=q(X(k),Y(k));%yn+1=yn+hq(xn,yn)
k2=q(X(k+1),Y(k)+h*k1);%yn+1=yn+hq(xn+1,yn+1)
Y(k+1)=Y(k)+h*k2;
end
x=X';
y=Y';
f1=exp(-2*x)-2*x+1;
figure(1);
subplot(1,2,1);
plot(x,y);
hold on;
plot(x,f1);
subplot(1,2,2);
plot(x,f1-y);
function f=lin(c,d)
f=-2*d-4*c;
end