根据题目微分方程:{y}'=-2y-4x

根据初值y(0)=2,将x的区间为[0,5]

根据隐式欧拉公式:y_{n+1}=y_{n}+hf\left ( x_{n+1},y_{n+1} \right )

但是我们并不知道y_{n+1}此时的值

所以每次迭代前都需要先计算此时的y_{n+1}=y_{n}+hf\left ( x_{n},y_{n} \right ),以便算出f\left ( x_{n+1},y_{n+1} \right )

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

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐