常微分方程的數值解法
一、 實驗目的:
目的與要求:通過實驗,熟悉常微分方程的數值解法的基本原理。掌握向前尤拉法、向後尤拉法、梯形法、改進尤拉法及三階、四階龍格-庫塔法等基本演算法。
二、 實驗內容:
在下列方法中:向前尤拉法、向後尤拉法、梯形法、改進尤拉法及三階、四階龍格-庫塔法
選擇不同的三種演算法求下面方程的數值解,並與準確解比較。
以上步長取0.1.
三、 實驗要求:
1.程式設計實現。2.可以自擬實驗題,要求同上。
四、 實驗程式及結果:
1. 求原函式
dsolve[,y[x],x]
求得:2. 向前尤拉法
x[0]=0;y[0]=0;h=0.1;
f[x_]:=;
x[n_]:=n*h;
f[u_,v_]:=u2+u-v;
k1[n_]:=f[x[n-1],y[n-1]];
y[n_]:=y[n-1]+h*k1[n];
table[,]//n;
print["\nn,x[n],y[n],f[x[n]],f[x[n]]-y[n]\n"," ",matrixform[table[,]//n]]
data1=table[,]//n;
data2=table[,]//n;
a0=plot[f[x],,plotstyle ];
a1=graphics;
a2=listlineplot[data2,plotstyle ];
a3=graphics;
show[a0,a1,a2,a3,plotrange all]
3. 改進尤拉法
f[x_,y_]:=x2+x-y;
f[x_]:=;
xy:=};
h=0.1;
do[xn=xy[[n]][[1]];yn=xy[[n]][[2]];
k1=f[xn,yn];k2=f[xn+h,yn+h*k1];
d=(k1+k2)*h/2 ;
print[n," ","x",n,"=",xn+h," ","y",n,"=",yn+d," ","f(x",n,")=",f[xn+h]," ","f(x",n,")-y(x",n,")=",f[xn+h]-(yn+d)];
xy=append[xy,],];
a1=graphics;
a2=listlineplot[xy,plotstyle dashed];
a3=plot[f[x],,plotstyle ];
show[a3,a2,a1]
4. 四階龍格-庫塔法
f[x_,y_]:=x2+x-y;
f[x_]:=;;
y0=1;a=0;b=1;n=10;
h=(b-a)/n;
xx=table[a+(i-1)h,]//n;
y=table[0,];
y[[1]]=y0//n;
for[i=2,i n+1,i++,
a1=h f[xx[[i-1]],y[[i-1]]];
a2=h f[xx[[i-1]]+h/2,y[[i-1]]+a1/2];
a3=h f[xx[[i-1]]+h/2,y[[i-1]]+a2/2];
a4=h f[xx[[i-1]]+h,y[[i-1]]+a3];
y[[i]]=y[[i-1]]+1/6 (a1+2a2+2a3+a4);
print[i-1," ","x",i-1,"=",xx[[i]]," ","y",i-1,"=",y[[i]]," ","f(x",i-1,")=",f[xx[[i]]]," ","f(x",n,")-y(x",n,")=",f[xx[[i]]]-y[[i]]];]
data=table[,];
a1=graphics;
a2=listlineplot[data];
a3=plot[f[x],,plotstyle ];
show[a3,a2,a1]
5、實驗總結:
本次實驗是為了熟悉常微分方程的數值解法的基本原理。掌握向前尤拉法、向後尤拉法、梯形法、改進尤拉法及三階、四階龍格-庫塔法等基本演算法。
對同乙個方程求數值解,我採用了向前尤拉法、改進尤拉法和四階龍格-庫塔法,了解了不同演算法的程式設計難度和運算效率。本次實驗中又犯了粗心的錯誤,少打了乙個「]」,使程式不能正確執行,花了不少時間查錯。
常微分方程數值解實驗報告
學院 數學與資訊科學 專業 資訊與計算科學 姓名 鄭思義 學號 201216524 課程 常微分方程數值解 實驗一 常微分方程的數值解法 1 分別用euler法 改進的euler法 預報校正格式 和s k法求解初值問題。h 0.1 並與真解作比較。1.1實驗 尤拉法 function x,y nae...
常微分方程數值解實驗報告
2012年10月17日 實驗目的 1 通過用matlab程式設計運用euler方法及其改進方法求解常微分方程初值問題,更進一步掌握常微分方程及其數值解法課程的理論內容,加深對數值解法的理解。2 熟悉matlab程式設計環境。實驗內容 1.實驗題目 運用euler方法及其改進方法求解常微分方程初值問題...
MATLAB實驗報告 常微分方程數值解
專業序號姓名日期 實驗3 常微分方程數值解 實驗目的 1 掌握用matlab求微分方程初值問題數值解的方法 2 通過例項學習微分方程模型解決簡化的實際問題 3 了解尤拉方法和龍格庫塔方法的基本思想。實驗內容 用尤拉方法和龍格庫塔方法求下列微分方程初值問題的數值解,畫出解的圖形,對結果進行分析比較 解...