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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

经典四阶龙格库塔法

發布時間:2023/12/31 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 经典四阶龙格库塔法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關注微信公眾號“二進制小站”~~獲取更多分析~~(文末二維碼~~)

龍格-庫塔(Runge-Kutta)方法是一種在工程上應用廣泛的高精度單步算法,經常被稱為“RK4”或者就是“龍格庫塔法”。

?

令初值問題表述如下。

對于該問題的RK4由如下方程給出:

其中:

RK4法是四階方法,也就是說每步的誤差是h5階,而總積累誤差為h4階。

RK4計算程序如下:

?

//visualsan@yahoo.cn #include <iostream> using namespace std;#include <vector> #include <math.h> using namespace std; class RK { public:class DiffFunc{public:double operator()(double x,double y){// y'=cos(x)return cos(x);// y'=x*y-1// return x*y-1;}} m_df;RK(double xend,double x0,double y0,double h=1e-3){m_max_x = xend;m_x0 = x0;m_y0 = y0;m_h = h;m_half_h=h/2.0;}void Solve(){double yn=m_y0,xstart=m_x0;while( xstart<m_max_x){double y=yn+K(xstart,yn)*m_h;//y(n+1)=y(n)+h*y'm_x.push_back(xstart);m_y.push_back(yn);cout<<xstart<<""<<yn<<endl;yn=y;xstart+=m_h;} }//求解后的點std::vector<double> m_x,m_y;//步長hdouble m_h;//初始點x0,y0double m_x0,m_y0;//x范圍double m_max_x;private:double m_half_h;double m_ptx,m_pty;double K1(double x,double y){double v=m_df(x,y);m_ptx=x;m_pty=y;return v;}double K2(double _k1){double v=m_df(m_ptx+m_half_h,m_pty+m_half_h*_k1);return v;}double K3(double _k2){double v=m_df(m_ptx+m_half_h,m_pty+m_half_h*_k2);return v;}double K4(double _k3){double v=m_df(m_ptx+m_h,m_pty+m_h*_k3);return v;}double K(double x,double y){double _k1=K1(x,y),_k2=K2(_k1),_k3=K3(_k2),_k4=K4(_k3);return (_k1+2.0*_k2+2.0*_k3+_k4)/6.0;}};main() {RK s1(1,0,0);s1.Solve(); }

?

計算實例:

y'=cos(x)?? y(0)=0,?? ->?? solution? y=sin(x)

?

y'=x*cos(x)?? y(0)=0

?

y'=1.0/sqrt(x*x+y*y),y(0)=0.1

文章來源:

http://www.cnblogs.com/JustHaveFun-SAN/archive/2012/02/09/2330655.html

http://blog.csdn.net/augusdi/article/details/9968095

?

?

總結

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

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