计算实习报告怎么写?( 十 )


printf("C(%d)=%f\\\\n",n,c);
n*=2;} } #include #include float Cotes(float(*f)(float),float a,float b,int n) {int k;float c,c1=0,c2,c3,c4;float h=(b-a)/n;c2=(*f)(a+h/4);c3=(*f)(a+h/2);c4=(*f)(a+3*h/4);for(k=1;kc1+=(*f)(a+k*h);
c2+=(*f)(a+k*h+h/4);
c3+=(*f)(a+k*h+h/2);
c4+=(*f)(a+k*h+3*h/4);}c=h/90*(7*((*f)(a)+(*f)(b))+14*c1+32*c2+12*c3+32*c4);return c; } float f(float x) {//return 1/sqrt(1+x*x*x);
if (x==0)return 1;
else return sin(x)/x;} void main() {int i,n=4;float c;for(i=0;ic=Cotes(f,0,5,n);
printf("C(%d)=%f\\\\n",n,c);
n*=2;} }
(2)实验结果及分析
四、总结
学习了复化辛卜生公式,自适应梯形公式,龙贝格算法,运用求解定积分并控制精度的方法 。
习题七:
7常微分方程数值解法
一、实验目的
(1)熟悉求解常微分方程初值问题的有关方法和理论,主要是改进欧拉公式,四阶龙格-库塔法和阿当姆斯方法;
(2)编制上述方法计算机程序,包括求解微分方程组的计算程序; (3)针对实习题编制程序,并上机计算其所需要的结果;
(4)体会各种解法的功能,优缺点及适用场合,会选取适当的求解方法 。
二、实验内容
1、分别用改进欧拉法与四阶龙格-库塔公式(取h?0.1)求解下列微分方程初值问题
2、用四阶龙格-库塔公式(取h?0.1)解下列微分方程组初值问题
三、实验步骤、程序设计、实验结果及分析
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);