微分方程數值解實驗

2022-10-14 06:42:02 字數 3924 閱讀 6345

課程設計報告

班級姓名學號

成績 2023年 6月 21 日

目錄一、摘要 1

二、常微分方程數值解 2

2.1 4階runge-kutta法和adams4階外插法的基本思路 2

2.2 演算法流程圖 2

2.3 用matlab編寫源程式 2

2.4 常微分方程數值解法應用舉例 4

三、 常係數擴散方程的經典差分格式 6

3.1 有限差分法的基本思路 6

3.2 演算法流程圖 7

3.3 用matlab編寫源程式 7

3.4 有限差分法應用舉例 8

四、 橢圓型方程的五點差分格式 10

4.1 五點差分法的基本思路 10

4.2 演算法流程圖 11

4.3 用matlab編寫源程式 11

4.4 五點差分法應用舉例 12

五、 自我總結 16

六、參考文獻 16

自然界與工程技術中的很多現象,可以歸結為微分方程定解問題。其中,常微分方程求解是微分方程的重要基礎內容。但是,對於許多的微分方程,往往很難得到甚至不存在精確的解析表示式,這時候,數值解提供了乙個很好的解決思路。

,針對於此,本文對常微分方程數值解法進行了簡單研究,主要討論了一些常用的數值解法,如尤拉法、改進的尤拉法、runge—kutta方法、adams法以及橢圓型方程、拋物型方程的有限差分方法等,通過具體的算例,結合matlab求解畫圖,初步給出了一般常微分方程數值解法的求解過程。同時,通過對各種方法的誤差分析,讓大家對各種方法的特點和適用範圍有乙個直觀的感受。

關鍵詞:微分方程數值解、matlab

常微分方程數值解法(numerical methods forordinary differential equations)計算數學的乙個分支.是解常微分方程各類定解問題的數值方法.現有的解析方法只能用於求解一些特殊型別的定解問題,實用上許多很有價值的常微分方程的解不能用初等函式來表示,常常需要求其數值解.

所謂數值解,是指在求解區間內一系列離散點處給出真解的近似值.這就促成了數值方法的產生與發展.

常微分方程初值問題的數值解法是求方程(1)的解在點列上的近似值,這裡是到的步長,一般略去下標記為。

1) 經典的方法是乙個四階的方法,它的計算公式是:

2)方法的優點是:單步法、精度高,計算過程便於改變步長,缺點是計算量較大,每前進一步需要計算四次函式值。在用龍格庫塔方法時,要注意的選擇要合適,太大,會使計算量加大,太小,較大,可能會使誤差增大。

因此選擇合適的很重要。我們要在考慮精度的基礎上,選擇合適的。

2.2.1、四階龍格-庫塔(r-k)方法流程圖:

2.2.2、adams4階外插法流程圖:

2.2.3、例項求解流程:

matlab程式源**:

定義檔案

function dy = rk4 (x,y)

dy=zeros(3,1);

dy(1)=10*(-y(1)+y(2));

dy(2)=28*y(1)-y(2)-y(1)*y(3);

dy(3)=y(1)*y(2)-8*y(3)/3;

end定義檔案

function [x,y,z]=adams4(x1,y1,z1,x2,y2,z2,x3,y3,z3,h)

%adams外插法

kfy=0;ksy=0;kty=0;

kfz=0;ksz=0;ktz=0;

kfx=10*(y3-x3); %eval_r(abx);

kfy=x3*(28-z3)-y3;%eval_r(aby);

kfz=x3*y3-8/3*z3; %eval_r(abz);

ksx=10*(y2-x2);

ksy=x2*(28-z2)-y2;;

ksz=x2*y2-8/3*z2;

ktx=10*(y1-x1 );

kty=x1*(28-z1)-y1;

ktz=x1*y1-8/3*z1;

x=x3+h/12*(23*kfx-16*ksx+5*ktx);

y=y3+h/12*(23*kfy-16*ksy+5*kty);

z=z3+h/12*(23*kfz-16*ksz+5*ktz);

end定義檔案

[t,y]=ode45(rk4,[0,30],[12,2,9])

suptitle('runge-kutta4階法') %總標題

subplot(2,2,1);

plot(t,y(:,1));grid on;

legend('x關於t 的變化關係圖',1);

xlabel('t','fontsize',14);

ylabel('x','fontsize',14);

subplot(2,2,2);

plot(t,y(:,2));grid on;

legend('y關於t 的變化關係圖',1);

xlabel('t','fontsize',14);

ylabel('y','fontsize',14);

subplot(2,2,3)

plot(t,y(:,3));grid on;

legend('z關於t 的變化關係圖',1);

xlabel('t','fontsize',14);

ylabel('z','fontsize',14);

subplot(2,2,4)

plot3(y(:,1),y(:,2),y(:,3));grid on;

legend('x,y,z的空間關係圖',1);

xlabel('x','fontsize',14);

ylabel('y','fontsize',14);

zlabel('y','fontsize',14);

view(40,60); %鎖定同樣的檢視,便於比較

定義檔案

a=1:1:3000;b=1:1:3000;c=1:1:3000;

t=1:1:3000;

x1=5; y1=5; z1=10;

x2=7.83; y2=14.30; z2=12.34;

x3=15.32; y3=22.87; z3=28.07;

for i=1:1:3000

[x,y,z]=adams4(x1,y1,z1,x2,y2,z2,x3,y3,z3,0.01);

a(i)=x;b(i)=y;c(i)=z;

x1=x2;y1=y2;z1=z2;

x2=x3;y2=y3;z2=z3;

x3=x;y3=y;z3=z;

fprintf('x=%f''y=%f''z=%f\n',x,y,z);%顯示迭代值

endsuptitle('adams4階外插法') %總標題

subplot(2,2,1);

plot(t,a);grid on;

legend('x關於t 的變化關係圖',1);

xlabel('t','fontsize',14);

ylabel('x','fontsize',14);

subplot(2,2,2);

plot(t,b);grid on;

legend('y關於t 的變化關係圖',1);

xlabel('t','fontsize',14);

ylabel('y','fontsize',14);

subplot(2,2,3);

plot(t,c);grid on;

legend('z關於t 的變化關係圖',1);

xlabel('t','fontsize',14);

ylabel('z','fontsize',14);

subplot(2,2,4)

plot3(a,b,c);grid on;

legend('x,y,z的空間關係圖',1);

xlabel('x','fontsize',14);

常微分方程數值解實驗報告

學院 數學與資訊科學 專業 資訊與計算科學 姓名 鄭思義 學號 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 了解尤拉方法和龍格庫塔方法的基本思想。實驗內容 用尤拉方法和龍格庫塔方法求下列微分方程初值問題的數值解,畫出解的圖形,對結果進行分析比較 解...