四阶龙格——库塔法.docx
2023-2023(1)专业课程实践论文题目:四阶龙格库塔法一、算法理论由定义可知,一种数值方法的精度与局部截断误差。(犷)有关,用一阶泰勒展开式近似函数得到欧拉方法,其局部截断误差为一阶泰勒余项。(尸),故是一阶方法,完全类似地假设用P阶泰勒展开式进行离散化,所得计算公式必为P阶方法,式中由此,我们能够想到,通过提高泰勒展开式的阶数,可以得到高精度的数值方法,从理论上讲,只要微分方程的解y(x)充分光滑,泰勒展开方法可以构造任意的有限阶的计算公式,但事实上,具体构造这种公式往往相当困难,因为符合函数/(X,y()的高阶导数常常是很烦琐的,因此,泰勒展开方法一般不直接使用,但是我们可以间接使用泰勒展开方法,求得高精度的计算方法。首先,我们对欧拉公式和改良欧拉公式的形式作进一步的分析。如果将欧拉公式和改良的欧拉公式改写成如下的形式:欧拉公式改良的欧拉公式”+1=券+力(g&+g(),K=f(a>y,储=/(%+力,y“+M)。这两组公式都是用函数f(x,y)在某些点上的值的线性组合来计算y(x,用)的近似值L+1,欧拉公式每前进一步,就计算一次f(x,y)的值。另一方面它是y(xzlG在乙处的一阶泰勒展开式,因而是一阶方法。改良的欧拉公式每前进一步,需要计算两次/(x,y)的值。另一方面它在(x",y.)处的泰勒展开式与y(x"G在当处的泰勒展开式的前三项完全相同,因而是二阶方法。这启发我们考虑用函数/(X,y)在假设干点上的函数值的线性组合来构造计算公式。构造时,要求计算公式在(Xzx)处的泰勒展开式,与微分方程的解y(x)在七,处的泰勒展开式的前面假设干项相同,从而使计算公式打到较高的精度。这样,既防止了计算函数/(x,y)的偏导数的困难,又提高了计算方法的精度,这就是龙格一一库塔方法的根本思想。二、算法框图程序代码:#includestdio.h,*#include"conio.h”floatfunc(floatXfOaty)return(2*x*y);floatrunge_kutta(floatx,floatxn,floaty,intn)floatx,y,yl,y2,h,xh;floatdl,d2,d3,d4;iti;x=x;y=y;h=(xn-x)n;for(i=l;i<=n;i+)xh=x÷h2;dl=func(x,y);d2=func(xh,y÷h*d1/2.0);d3=func(xh,y+h*d22.0);d4=func(xh,y+h*d3);y=y+h*(dI+2*d2+2*d3+d4)60;x=x+i*h;)return(y);)intmain()floatx,xn,y,e;intn;printf(,ninputn:n°);scanf(,%d,',n);printf(,inputx0,xn:n“);scanf(M%f%f*,&xO,&xn);printf(,linputyO:n“);SCanf(”F,&yO);e=runge_kutta(xO,xn,yO,n);printf(ty(%f)=%6.6,y0,e);四、算法实现四阶经典龙格一一库塔方法算法如下:(1)输入,A区间等分数",初值比。(2)输出y(x)在工的"个点处得近似值y。(3)置=-,k=0,X=a,y=y0。nC4)计算Ki=f(xty),Kf(x+y+Kl),KU+;KOKHX+匹),置尸,(%+2+2&+%)=乂*+/1=>,输出(x,y)(5)假设左<"-1,置A+lnA,转(4);否那么,停机。例1.利用四阶龙格一一库塔方程公式计算"=2双x7°,l的数值,取步长=0.1。J(O)=1解:运行结果例2.利用4阶龙格一一库塔方程公式计算fy=x-y÷Ue0,0,5取步长=。y(0)=解:运行结果