三、实验步骤、程序设计、实验结果及分析
1、分别用改进欧拉法与四阶龙格-库塔公式(取h?0.1)求解下列微分方程初值问题 a.改进欧拉法 (1)程序设计 #include void ModEuler(float(*f)(float,float),float x0,float y0,float xn,int n) {int i;float yp,yc,x=x0,y=y0,h=(xn-x0)/n;printf("x[0]=%f\\\\ty[0]=%f\\\\n",x,y);for(i=1;iyp=y+h*(*f)(x,y);
x=x0+i*h;
yc=y+h*(*f)(x,yp);
y=(yp+yc)/2;
printf("x[%d]=%f\\\\ty[%d]=%f\\\\n",i,x,i,y);} } float f(float x,float y) {//return x*x+y*y;
//题(1)
//return 1/(1+y*y);
//题(2)
return y-2*x/y;
//题(3) } void main() {float xn=1.0,x0=0,y0=1;
ModEuler(f,x0,y0,xn,10); }
(2)实验结果及分析 (1)
(2)
(3)
b.四阶龙格-库塔公式 (1)程序设计 #include void Runge_Kutta(float(*f)(float x,float y),float a,float b,float y0,int N) {float x=a,y=y0,K1,K2,K3,K4;float h=(b-a)/N;int i;printf("x[0]=%f\\\\ty[0]=%f\\\\n",x,y);for(i=1;iK1=(*f)(x,y);
K2=(*f)(x+h/2,y+h*K1/2);
K3=(*f)(x+h/2,y+h*K2/2);
K4=(*f)(x+h,y+h*K3);
y=y+h*(K1+2*K2+2*K3+K4)/6;
x=a+i*h;
printf("x[%d]=%f\\\\ty[%d]=%f\\\\n",i,x,i,y);} } float f(float x,float y) {//return x*x+y*y;
//题(1)
//return 1/(1+y*y);
//题(2)
return y-2*x/y;
//题(3) } void main() {float a=0,b=1.0,y0=1;Runge_Kutta(f,a,b,y0,10); } (2)实验结果 (1)
(2)
(3)
2、四阶龙格-库塔公式解微分方程组初值问题 (1)程序设计 #include void Runge_Kutta(float(*f)(float x,float y,float z),float (*g)(float x,float y,float z),float a,float b,float y0,float g0,int N) {float x=a,y=y0,z=g0,K1,K2,K3,K4,l1,l2,l3,l4;float h=(b-a)/N;int i;printf("x[0]=%f\\\\ty1[0]=%f\\\\ty2[0]=%f\\\\n",x,y,z);for(i=1;iK1=(*f)(x,y,z);l1=(*g)(x,y,z);
K2=(*f)(x+h/2,y+h*K1/2,z+h*l1/2);l2=(*g)(x+h/2,y+h*K1/2,z+h*l1/2);
K3=(*f)(x+h/2,y+h*K2/2,z+h*l2/2);l3=(*g)(x+h/2,y+h*K2/2,z+h*l2/2);
K4=(*f)(x+h,y+h*K3,z+h*l3);l4=(*g)(x+h,y+h*K3,z+h*l3);
y=y+h*(K1+2*K2+2*K3+K4)/6;
z=z+h*(l1+2*l2+2*l3+l4)/6;
x=a+i*h;
printf("x[%d]=%f\\\\ty[%d]=%f\\\\tz[%d]=%f\\\\n",i,x,i,y,i,z);} } float f(float x,float y,float z) {
return 120-2*y+2*z;
} float g(float x,float y,float z) {
return 2*y-5*z;
} void main() {float a=0,b=1.0,y0=0,g0=0;Runge_Kutta(f,g,a,b,y0,g0,10); }
(2)实验结果
四、总结
通过这次学习 , 我掌握了根据不同场合选择不同方法计算求解问题的方法 , 主要学习了改进欧拉法和四阶龙格-库塔法求解微分方程的求解问题方法 。
计算方法上机汇总:
通过对这门课的学习 , 我们学习了很多计算方程、曲线拟合、求解微分方程的方法 。而实习
课让我们将所学的原理应用到实践中去 , 上机编写程序的过程中我们不断的运用已学知识 , 掌握了求解各种实际问题的方法 , 并且体会了不同的方法的不同结果 , 从而在不同的场合 , 要用合适的计算方法来求解问题 。我们求解的问题包括误差分析 , 线性方程组的求解 , 微分方程的求解等问题 。在选择合适的计算方法的时候要考虑方法的收敛性 , 稳定性 , 以及哪种方法计算速度快 , 最终结果误差小 。这门课与计算机密切结合并且实用性极强 , 能够将所学的知识在实践中得到应用 , 加强了我对专业学习的信心 。
- 财务主管的辞职报告怎么写?
- 农村口腔社会实践报告写法怎么样?
- 中药专业社会实践报告怎么写?
- 文秘专业毕业实习报告怎么写?
- 当售货员的社会实践报告如何写?
- 思想理论政治课社会实践报告怎么写?
- 家庭体验社会实践报告格式怎么样?
- 因病的辞职报告如何写?
- 保洁员的辞职报告怎么写?
- 交通安全调查社会实践报告怎么写?