龙格库塔法基本C程序
生活随笔
收集整理的這篇文章主要介紹了
龙格库塔法基本C程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數值分析中,龍格-庫塔法(Runge-Kutta methods)是用于非線性常微分方程的解的重要的一類隱式或顯式迭代法。
龍格-庫塔(Runge-Kutta)方法是一種在工程上應用廣泛的高精度單步算法,其中包括著名的歐拉法,用于數值求解微分方程。由于此算法精度高,采取措施對誤差進行抑制,所以其實現原理也較復雜。
? ? 我還不了解什么是高精度單步算法,只知道是用來求微分方程數值解的;
對于Matlab的Simulink的解法器有如下描述;
? ??解法器
? ? 針對變步長和定步長分別有不同的解法器。
? ? 變步長模式解法器有:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb和discrete。
? ? 1)ode45:缺省值,四/五階龍格-庫塔法,適用于大多數連續或離散系統,但不適用于剛性(stiff)系統。它是單步解法器,也就是,在計算y(tn)時,它僅需要最近處理時刻的結果y(tn-1)。一般來說,面對一個仿真問題最好是首先試試ode45;
? ? 2)ode23:二/三階龍格-庫塔法,它在誤差限要求不高和求解的問題不太難的情況下,可能會比ode45更有效。也是一個單步解法器;
? ? 。。。。。。
? ? 我還不太了解什么是解法器;
下面來看一下龍格庫塔基本C程序;VC6.0版本;
輸出如下;我還不理解此程序;
?
代碼;
void CLgktView::OnDraw(CDC* pDC) {CLgktDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data heredouble a,b,x0,y0,k1,k2,k3,k4,h;int n,i;a=0;b=5;x0=0;y0=2;n=20;CString str1, str2;int row=0;for(h=(b-a)/n,i=0;i!=n;i++){k1=f(x0,y0);k2=f(x0+h/2,y0+k1*h/2);k3=f(x0+h/2,y0+k2*h/2);k4=f(x0+h,y0+h*k3);str1.Format("%lf %lf %lf %lf %lf %lf",x0,y0,k1,k2,k3,k4);pDC->TextOut(50,20+row*25,str1);y0+=h*(k1+2*k2+2*k3+k4)/6;x0+=h;row=row+1;}str2.Format("xn=%lf yn=%lf", x0, y0);pDC->TextOut(500,20,str2); }?
?
總結
以上是生活随笔為你收集整理的龙格库塔法基本C程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bochs调试Linux内核 - 定位内
- 下一篇: 超图桌面版GIS配准基本操作