1、数值计算课程设计 1 1 经典四阶龙格库塔法解一阶微分方程组 1.1 算法说明: 4 阶龙格-库塔方法(RK4)可模拟 N=4 的泰勒方法的精度。这种算法可以描述为,自 初始点 00 (,)ty开始,利用 1234 1 (22) 6 kk hffff yy 生成的近似序列,其中 1 21 32 43 (,) (,) 22 (,) 22 (,) kk kk kk kk ffty hh fftyf hh fftyf ffth yhf 1.2 用龙格库塔法求解求解微分方程 yxy yxx 23 2 满足初值条件: 40 60 y x 1.3 算法流程图: 图 1-1 四阶龙格库塔法解一阶微分方程组
2、经典四阶龙格库塔法解一阶微分方程组 2 1.4 程序调试: 组建调试,确保程序可运行时输入初值,区间,步长。 1.5 程序运行运行界面及运行结果: 图 1-2 四阶龙格库塔法解一阶微分方程组 1.6 源程序代码: #include #include using namespace std; #define N 10 float ff(float t,float xx,float yy) xx=xx+2*yy; return xx; float gg(float t,float xx,float yy) yy=3*xx+2*yy; return yy; void rks4(float xxN,f
3、loat yyN,float ttN,double a,double b) float h,p1,p2,p3,p4,q1,q2,q3,q4; xx0=6; yy0=4; int i,p; h=(b-a)/N; for(p=0;pN; A=(double*)calloc(N*(N+1),sizeof(double); coutAi; system(“cls“); coutPi; coutdeltaepsilonmax1; iter=newdim(P,delta,epsilon,max1, coutn; coutXi; coutYi; coutab; y1=feval(a); y2=feval(b
4、); while(b-adelta|k0) a=c; y1=y3; else b=c; y2=y3; k+; c=(a+b)/2; y3=feval(c); cout“the solution is:“cendl; return 0; double feval(double x) double f; f=x*x-2*x+1; return(f); 泰勒多项式逼近 26 8.泰勒多项式逼近 8.1 算法说明: 设 1 , N fCa b ,而 0 ,xa b是固定值。如果 ,xa b,则有( )( )( ) NN fxPxEx,其 中() N Px为用来近似 f(x)的多项式: () 0 0 0
5、 () ()()() ! k N k N k fx fxPxxx k ,误差项形如 (1) 1 0 ( ) ()() (1)! N N N fc Exxx N ,c 为 x 和 0 x之间的某个值 c=c(x)。 8.2 运行程序,无需任何输入,程序直接输出 cos(x)的值,并将泰勒多项式逼近方法和系 统自带函数计算的 cos(x)值进行比较。 8.3 程序调试: 编译组建并运行程序。 8.4 程序运行运行界面及运行结果: 图 8-1 泰勒多项式逼近 8.5 源程序代码: #include #include #define PI 3.14156 float cosx(float x); fl
6、oat fun_cos(float x, int m); int main() float x = PI/2; printf(“cos(%f)=%ft 使用系统函数 cos 计算n“,x,cos(x);/使用系统函数 cos 计算 printf(“cos(%f)=%ft 使用泰勒公式计算n“,x,cosx(x);/使用泰勒公式计算 return 0; float fun_cos(float x, int m) float ret_val; int i; if (m%2 = 0) 数值计算课程设计 27 ret_val = 1.0; else ret_val = -1.0; for (i=1;i 2*Pi | x 0.00005 | temp_ret-0.00005); ret