for(k=1;k<=n-1;k++) { c1+=(*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); }
void main() { int i,n=4; float c; for(i=0;i<=4;i++) { c=Cotes(f,0,1,n); printf(\ n*=2; } }
#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;k<=n-1;k++) { c1+=(*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;i<=4;i++) { // c=Cotes(f,0,1,n); c=Cotes(f,0,5,n); printf(\ 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(\ for(i=1;i<=n;i++) { yp=y+h*(*f)(x,y); x=x0+i*h; yc=y+h*(*f)(x,yp); y=(yp+yc)/2; printf(\ } }
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(\
for(i=1;i<=N;i++) { K1=(*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(\ } }
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)
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库西电计算方法上机实习题(5)在线全文阅读。
相关推荐: