課程設計報告
班級姓名學號
成績 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 了解尤拉方法和龍格庫塔方法的基本思想。實驗內容 用尤拉方法和龍格庫塔方法求下列微分方程初值問題的數值解,畫出解的圖形,對結果進行分析比較 解...