1.尤拉方法
尤拉公式:
演算法(尤拉方法)
(1)給定整數n;
(2);
(3)(4)對k=2,3,…n+1做:
(5)返回
基於尤拉方法的matlab程式如下:
function [x,y]=odeeuler(f,y0,a,b,h)
n=(b-a)/h;
x=a:h:b;
y(1)=y0;
for i=1:n
y(i+1)=y(i)+h*feval(f,x(i),y(i));
end2.改進的尤拉公式:
演算法(改進尤拉方法):
(1) 給定整數n;
(2) ;
(3)(4) 對k=2,3,…n+1做:
(5) 返回
基於改進尤拉方法的matlab程式如下:
function [x,y]=odeieuler(f,a,b,y0,h)
n=(b-a)/h;
x=a:h:b;
y(1)=y0;
for i=1:n
k1=h*feval(f,x(i),y(i));
k2=h*feval(f,x(i+1),y(i)+k1);
y(i+1)=y(i)+0.5*(k1+k2);
end3.一類應用廣泛的高精度的顯式單步法-----龍格-庫塔(runge-kutta)方法,簡稱r-k方法
標準四階四段龍格-庫塔公式
演算法(標準四階四段龍格-庫塔方法)
(1)給定整數n;
(2);
(3)(4)對k=2,3,…n+1做:
(5)返回
基於標準四階四段龍格-庫塔方法matlab程式如下:
function [x,y]=oderk4(f,a,b,h,y0)
n=(b-a)/h;
x=a:h:b;
y(1)=y0;
for i=1:n;
k1=h*feval(f,x(i),y(i));
k2=h*feval(f,x(i)+h/2,y(i)+k1/2);
k3=h*feval(f,x(i)+h/2,y(i)+k2/2);
k4=h*feval(f,x(i)+h,y(i)+k3);
y(i+1)=y(i)+1/6*(k1+2*k2+2*k3+k4);
end其中:f為常微分方程的右端項,a,求解區間的左右端點,h為自變數的步長,y0微分方程的初值,x,y分別為計算完成時的自變數取值和對應點上的函式值。
4.標準四階四段龍格-庫塔方法應用例項
function z= f(x,y)
z=y-2x/y;
function [x,y]=oderk4(f,a,b,h,y0)
n=(b-a)/h;
x=a:h:b;
y(1)=y0;
for i=1:n;
k1=h*feval(f,x(i),y(i));
k2=h*feval(f,x(i)+h/2,y(i)+k1/2);
k3=h*feval(f,x(i)+h/2,y(i)+k2/2);
k4=h*feval(f,x(i)+h,y(i)+k3);
y(i+1)=y(i)+1/6*(k1+2*k2+2*k3+k4);
end執行結果:
>>[x,y]=oderk4(『f』,0,1,0.1,1)
x = columns 1 through 9
0 0.1000 0.2000 0.
3000 0.4000 0.5000 0.
6000 0.7000 0.8000
columns 10 through 11
0.9000 1.0000
y = columns 1 through 9
1.0000 1.0954 1.
1832 1.2649 1.3416 1.
4142 1.4832 1.5492 1.
6125
columns 10 through 11
1.6733 1.7321
計算方法實驗八求解常微分方程的初值問題
實驗八求解常微分方程的初值問題 1 尤拉方法 1 實驗程式 實現尤拉方法matlab函式檔案agui euler.m在matlab命令視窗輸入及實驗結果及操作介面 2 改進的尤拉方法 1 實驗程式 實現改進的尤拉方法的matlab函式檔案agui euler1.m在matlab命令視窗輸入及實驗結果...
一階微分方程的初等解法 常微分方程
第二章一階微分方程的初等解法 2 1 已知試求函式的一般表示式。解對方程,兩邊關於求導得,即 分離變數,可求得 代入原方程可得,從而的一般表示式為。評注 本題中常數的確定不能直接通過所給積分方程得到,而是需將通解代回原方程來確定。2 2 求具有性質的函式,已知存在。解由導數的定義可得 顯然可得,故 ...
實驗八常微分方程初值問題數值解法報告
一 基本題 科學計算中經常遇到微分方程 組 初值問題,需要利用euler法,改進euler法,rung kutta方法求其數值解,諸如以下問題 1 分別取h 0.1,0.2,0.4時數值解。初值問題的精確解。2 用r 3的adams顯式和預 校式求解 取步長h 0.1,用四階標準r k方法求值。3 ...