日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

四阶龙格库塔法求解微分方程【MATLAB】

發(fā)布時間:2023/12/31 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 四阶龙格库塔法求解微分方程【MATLAB】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

四階龍格庫塔法求解微分方程

求解過程數(shù)學描述

四階龍格庫塔的求解過程可用如下數(shù)學公式描述:
k1=f(tn,yn)k_1=f\left( t_n,y_n \right)k1?=f(tn?,yn?)

k2=f(tn+h2,yn+h2k1)k_2=f\left( t_n+\frac{h}{2},y_n+\frac{h}{2}k_1 \right)k2?=f(tn?+2h?,yn?+2h?k1?)

k3=f(tn+h2,yn+h2k2)k_3=f\left( t_n+\frac{h}{2},y_n+\frac{h}{2}k_2 \right)k3?=f(tn?+2h?,yn?+2h?k2?)

k4=f(tn+h,yn+hk3)k_4=f\left( t_n+h,y_n+hk_3 \right)k4?=f(tn?+h,yn?+hk3?)

yn+1=yn+h6(k1+2k2+2k3+k4)y_{n+1}=y_n+\frac{h}{6}\left( k_1+2k_2+2k_3+k_4 \right)yn+1?=yn?+6h?(k1?+2k2?+2k3?+k4?)

例子

為驗證程序的有效性,選取一個已知解析解的微分方程驗證。

? y′=yy^{'}=yy=y ,零初值狀態(tài),即y(0)=1y(0)=1y(0)=1y=exy=e^xy=ex

code

編寫的MATLAB程序如下:

% function RK4() clc;clear; Ts = 0.01; h = Ts; time = 1.5; N = time/Ts; t = linspace(Ts,time,N);y = zeros(1,N+1); for m=2:Nk1 = exp(m*Ts);k2 = exp(m*Ts+h/2*k1);k3 = exp(m*Ts+h/2*k2);k4 = exp(m*Ts+h*k3);y(1,m+1) = y(1,m) +(k1+2*k2+2*k3+k4)*h/6; end figure plot(t,exp(t)) hold on y = y(1,2:N+1); y = y+1; plot(t,y) legend('解析解','數(shù)值解');

結果分析

根據(jù)預期,算法應當逐漸收斂至穩(wěn)態(tài),但是實際的求解過程無法反應此過程。當求解區(qū)間變大時,出現(xiàn)算法出現(xiàn)輕微的發(fā)散現(xiàn)象,說明算法設計存在缺陷,原因尚未分析出來,后續(xù)理清思路后再補充。

參考文獻

https://www.jianshu.com/p/e4aa9a688959

https://wenku.baidu.com/view/d69e8f1f77c66137ee06eff9aef8941ea76e4b2c.html


2022-10-26-四階龍格庫塔法計算程序修正

由于后續(xù)的工作需要使用數(shù)值計算方法,重寫了四階龍格庫塔法,通過控制求解步長,可以有效的控制誤差,上次遺留的發(fā)散問題仍未得到解決。

再次閱讀之前寫的程序,發(fā)現(xiàn)公布的算法是在反向驗證龍格庫塔算法的有效性,在解析解未知的前提下,算法無法進行正向求解。最新改進的算法已實現(xiàn)了正向求解。

%eqution %y'=y y(0)=1clc;clear;% set the solution range and solution step h = 0.01; time = 5; N = time/h; t = linspace(h,time,N); y = zeros(1,N); y(1,1) = 1;% RK4 for m=1:N-1k1 = h*y(1,m);k2 = h*(y(1,m)+k1/2);k3 = h*(y(1,m)+k2/2);k4 = h*(y(1,m)+k3);y(1,m+1) = y(1,m) +(k1+2*k2+2*k3+k4)/6; end% data visualization figure subplot(2,1,1); plot(t,exp(t)) hold on plot(t,y) legend('解析解','數(shù)值解'); title('h=0.01') subplot(2,1,2); error = exp(t)-y; plot(t,error) legend('誤差');



通過對比上方的兩張圖片,可以發(fā)現(xiàn),在求解步長設置為0.01時,求解誤差已經非常小。

總結

以上是生活随笔為你收集整理的四阶龙格库塔法求解微分方程【MATLAB】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。