練習數值解


練習一:向前歐拉法解方程

y(t)y(0)=2y(t)+t=1

算法解釋:對於一般的常微分方程
y(t)y(t0)=f(t,y)=y0

yi+1yiΔt=f(ti,yi)yi+1=yi+f(ti,yi)Δt

clear;
%方程的係數
a=1.;
b=-2.;
c=1.;
%開始結束時間
tinit=0.;
tmax=5.;
%時間步數
maxt=3000;
dt=(tmax-tinit)/maxt;
%初始條件
y(1)=1.;
t(1)=tinit;
%時間循環(loop)
for j=1:maxt;
y(j+1)=y(j)+dt*(b*y(j)+c*t(j))/a;
t(j+1)=tinit+j*dt;
end;
%繪圖
plot(t,y)
title('歐拉向前差分')
xlabel('t')
ylabel('y(t)')


練習二:中點法(精度比向前向後歐拉高一階)

yi+1=yi1+2f(ti,yi)Δt

有點疑惑的是:初值需要給在i=0,1 兩處;可否用向後歐拉法yi+1=yi+f(ti+1,yi+1)Δt 求出另外一個?比如y0=y1f(t1,y1)Δt ,但是這樣的話就會有一個問題,向後歐拉法精度低一階。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章