數值分析報告常微分方程的數值解法

2021-07-25 06:42:52 字數 2139 閱讀 5766

常微分方程的數值解法

一、 實驗目的:

目的與要求:通過實驗,熟悉常微分方程的數值解法的基本原理。掌握向前尤拉法、向後尤拉法、梯形法、改進尤拉法及三階、四階龍格-庫塔法等基本演算法。

二、 實驗內容:

在下列方法中:向前尤拉法、向後尤拉法、梯形法、改進尤拉法及三階、四階龍格-庫塔法

選擇不同的三種演算法求下面方程的數值解,並與準確解比較。

以上步長取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 了解尤拉方法和龍格庫塔方法的基本思想。實驗內容 用尤拉方法和龍格庫塔方法求下列微分方程初值問題的數值解,畫出解的圖形,對結果進行分析比較 解...