Matlab之四阶龙格—库塔法方法:解常微分初值问题
生活随笔
收集整理的這篇文章主要介紹了
Matlab之四阶龙格—库塔法方法:解常微分初值问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
1. 題目
2. 算法原理
3. 代碼
4. 結果
4.1 運行結果
4.2 結果分析
【若覺文章質量良好且有用,請別忘了點贊收藏加關注,這將是我繼續分享的動力,萬分感謝!】
直接通過解題的方式進行學習,代入感更強
1. 題目
用經典四階龍格庫塔方法對初值問題,步長分別取求解,觀察穩定區間的作用。
2. 算法原理
某些常微分方程有解析解,但大多數都沒有,因此需要進行數值解計算。
龍格—庫塔法是利用f(x,y)在某些特殊點上的函數值的線性組合,來估算高階單步法的平均斜率。
經典的龍格—庫塔法是四階的,也就是在中用四個點處的斜率來估計其平局斜率,構成四階龍格—庫塔公式
其準確解y(x)在一系列點xi處y(xi)的近似值yi的方法,yi稱為數值解。經典的四階龍格庫塔法方程如下:
其中:
其中的各個參數具體如下:
其整合之后為:
其中h為步長。
3. 代碼
clear; clc;for step = [0.1, 0.2]x_0 = 0;y_0 = 1;num = floor(1/step);n = 1;X_output = [0];Y_output = [1];disp("y'= -20 * y")while n <= numx_1 = x_0 + step;K_1 = step * fun(x_0,y_0);K_2 = step * fun(x_0 + step/2, y_0 + K_1/2);K_3 = step * fun(x_0 + step/2, y_0 + K_2/2);K_4 = step * fun(x_0 + step, y_0 + K_3);y_1 = y_0 + (K_1 + 2 * K_2 + 2 * K_3 + K_4) / 6 ;X_output = [X_output x_1];Y_output = [Y_output y_1];x_0 = x_1;y_0 = y_1;n = n + 1;endfigure()plot(X_output,Y_output)xlabel('x')ylabel('y')title(['Runge-Kutta4階,步長為:', num2str(step)])X_outputY_outputclear X_output Y_output end[x,y] = ode45('fun', [0:1], 1); figure() plot(x,y) xlabel('x') ylabel('y') title('自帶函數求解結果')function dy = fun(x, y) dy = - 20*y; end4. 結果
4.1 運行結果
Step = 0.1 時X_output = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000Y_output = 1.0000 0.3333 0.1111 0.0370 0.0123 0.0041 0.0014 0.0005 0.0002 0.0001 0.0000Step = 0.2時 X_output = 0 0.2000 0.4000 0.6000 0.8000 1.0000Y_output = 1 5 25 125 625 3125?
?
4.2 結果分析
用經典四階龍格庫塔方法求解,其求解結果與設置得步長有很大的相關性,步長設置合適時,其求解情況與真實值基本一致,趨于穩定。但步長加大時,其求解值與真實值相差太大。
???????【若覺文章質量良好且有用,請別忘了點贊收藏加關注,這將是我繼續分享的動力,萬分感謝!】
總結
以上是生活随笔為你收集整理的Matlab之四阶龙格—库塔法方法:解常微分初值问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux系统 ghost,Linux下
- 下一篇: 专业音频术语中英文对照