数值计算C语言常用小程序.doc

上传人:啊飒飒 文档编号:10957864 上传时间:2021-06-14 格式:DOC 页数:19 大小:85KB
返回 下载 相关 举报
数值计算C语言常用小程序.doc_第1页
第1页 / 共19页
数值计算C语言常用小程序.doc_第2页
第2页 / 共19页
数值计算C语言常用小程序.doc_第3页
第3页 / 共19页
数值计算C语言常用小程序.doc_第4页
第4页 / 共19页
数值计算C语言常用小程序.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《数值计算C语言常用小程序.doc》由会员分享,可在线阅读,更多相关《数值计算C语言常用小程序.doc(19页珍藏版)》请在三一文库上搜索。

1、1、 秦九韶算法 2、二分法 3、拉格朗日插值 4、埃特金算法 5、复化梯形法6、复化辛甫生算法 7、二阶龙格库塔方法 8、四阶龙格库塔方法9、改进的欧拉方法10、迭代法11、埃特金加速方法:12、牛顿迭代法13、追赶法14、雅克比迭代15、蛋白质设计:17高斯消去法:1、 秦九韶算法P11.3 利用秦九韶算法求多项式 ,在x=3时的值。程序:#include#includevoid main()float a100,v,x;int n,i,k;scanf(%d%f,&n,&x);for(i=0;i=n;i+)scanf(%f,&ai);v=an;k=1;dov=x*v+an-k;k=k+1;

2、while(k=n);printf(v=%f,v);运行结果:2、二分法P11.1用二分法求方程法x*x*x-x-1=0在1,2内的近似根,要求误差不超过#include#includefloat fun(float);void main()float a,b,c,x,y,y1;scanf(%f%f%f,&a,&b,&c);y1=fun(a);dox=(a+b)/2;y=fun(x);if(y*y10)a=x;elseb=x;while(b-a)=c);printf(%f,%fn,x,y);float fun(float m)float n;n=m*m*m-m-1;return(n);运行结果

3、:3、拉格朗日插值程序:#includemain()float a,b,t,x100,y100;int n,i,j,k;scanf(%f%d,&a,&n);for(i=0;i=n;i+)scanf(%f%f,&xi,&yi);k=0;b=0;for(k=0;k=n;k+)t=1;for(j=0;j=n;j+)if(j!=k)t=t*(a-xj)/(xk-xj);b=b+t*yk;printf(%fn,b);4、埃特金算法程序:#include#includemain()float a,b,c,x100,y100;int i,j,n,k;scanf(%d%f,&n,&a);for(i=0;i=n

4、;i+)scanf(%f%f,&xi,&yi);for(k=1;k=n;k+)for(i=k;i=n;i+)yi=yk-1+(yi-yk-1)*(a-xk-1)/(xi-xk-1);printf(%fn,yn);5、复化梯形法P95.9 设 ,用复化梯形法求积分 的近似值程序:#include#includedouble fun(double);void main()double a,b,h,s,x,y;int n,k;scanf(%lf%lf%d,&a,&b,&n);h=(b-a)/n;s=0;x=a;y=fun(x);for(k=1;k=n;k+)s=s+fun(x);x=x+h;s=s+

5、fun(x);s=(h/2)*s;printf(s=%lfn,s);double fun(double m)double n;n=exp(-m)*sin(4*m)+1;return(n);运行结果:6、复化辛甫生算法P95.9 设 ,用复化辛甫生法求积分 的近似值程序:#include#includedouble fun(double);void main()double a,b,h,s,x,y;int n,k;scanf(%lf%lf%d,&a,&b,&n);h=(b-a)/n;s=0;x=a;y=fun(x);for(k=1;k=n;k+)s=s+fun(x);x=x+h/2;s=s+4*

6、fun(x);x=x+h/2;s=s+fun(x);s=(h/6)*s;printf(s=%lfn,s);double fun(double m)double n;n=exp(-m)*sin(4*m)+1;return(n);运行结果:7、二阶龙格库塔方法求解初值问题:取h=0.2程序:#include#includefloat fun(float,float);void main()float h,x0,y0,x1,y1,k1,k2;int n,N;scanf(%f%f%f%d,&x0,&y0,&h,&N);n=1;for(n=1;n=N;n+)x1=x0+h;k1=fun(x0,y0);k

7、2=fun(x0+h/2,y0+h/2*k1);y1=y0+h*k2;printf(%f,%fn,x1,y1);x0=x1;y0=y1;float fun(float a,float b)float m;m=b-2*a/b;return(m);运行结果:8、四阶龙格库塔方法求解初值问题:取h=0.2程序:#include#includefloat fun(float,float);void main()float h,x0,y0,x1,y1,k1,k2,k3,k4;int n,N;scanf(%f%f%f%d,&x0,&y0,&h,&N);n=1;for(n=1;n=N;n+)x1=x0+h;

8、k1=fun(x0,y0);k2=fun(x0+h/2,y0+h/2*k1);k3=fun(x0+h/2,y0+h/2*k2);k4=fun(x1,y0+h*k3);y1=y0+h/6*(k1+2*k2+2*k3+k4);printf(%f,%f,x1,y1);x0=x1;y0=y1;float fun(float a,float b)float m;m=b-2*a/b;return(m);运行结果:9、改进的欧拉方法求解初值问题:程序:#include#includefloat fun(float,float);void main()float x0,y0,h,x1,y1,yp,yc;int

9、 n,N;scanf(%f%f%f%d,&x0,&y0,&h,&N);for(n=1;n=N;n+)x1=x0+h;yp=y0+h*fun(x0,y0);yc=y0+h*fun(x1,yp);y1=(yp+yc)/2;printf(%f,%f,x1,y1);x0=x1;y0=y1;float fun(float a,float b)float m;m=b-2*a/b;return(m);运行结果:10、迭代法P131 例2 用迭代法求方程 在 附近的一个根 ,要求精度为程序:#include#includefloat fun(float);void main()float x0,x1,c;in

10、t k,N;scanf(%f%f%d,&x0,&c,&N);for(k=1;k=N;k+)x1=fun(x0); printf(%fn,x1); if(fabs(x1-x0)c) break; x0=x1;if(k-1=N)printf(Failure!n);float fun(float m)float n;n=exp(-m);return(n);运行结果:11、埃特金加速方法:程序:#include#includefloat fun(float);void main()float x0,x1,x2,c;int k,N;scanf(%f%f%d,&x0,&c,&N);for(k=1;k=N;

11、k+)x1=fun(x0); x2=fun(x1); x2=x2-(x2-x1)*(x2-x1)/(x2-2*x1+x0); if(fabs(x2-x0)c) printf(%fn,x2); break; x0=x2;if(k-1=N)printf(Failure!n);float fun(float m)float n;n=exp(-m);return(n);运行结果:12、牛顿迭代法:例5、用牛顿法解方程牛顿公式为: ,取x=0.5程序:#include#includefloat fun(float);float ff(float);void main()float x0,x1,c;int

12、 k,N;scanf(%f%f%d,&x0,&c,&N);for(k=1;k=N;k+)if(ff(x0)!=0)x1=x0-fun(x0)/ff(x0);printf(%fn,x1); if(fabs(x1-x0)c) break; x0=x1; else printf(*);if(k=N)printf(Failure!n);float fun(float m)float n;n=m-exp(-m);return(n);float ff(float m)float n;n=1+m;return(n);运行结果:13、追赶法:P198.3.用追赶法求解下列方程组:程序:#include#inc

13、ludevoid main()float a100,b100,c100,d100,t;int i,n;scanf(%d,&n);for(i=2;i=n;i+)scanf(%f,&ai);for(i=1;i=n;i+)scanf(%f,&bi);for(i=1;i=n-1;i+)scanf(%f,&ci);for(i=1;i=n;i+)scanf(%f,&di);c1=c1/b1;d1=d1/b1;for(i=2;i=1;i-)di=di-ci*di+1;printf(%fn,di);运行结果:14、雅克比迭代程序:#include#include#define N 50#define M 4v

14、oid main()double xM,yM,aMM,bM,dM,c,t;double ff(double ,int);int k,i,j,n;n=M-1;scanf(%lf,&c);for(i=0;i=n;i+)scanf(%lf,&xi);scanf(%lf,&bi);for(i=0;i=n;i+)for(j=0;j=n;j+)scanf(%lf,&a0i*M+j);for(k=1;k=N;k+)for(i=1;i=n;i+)for(j=1,t=0;j=n;j+)if(j=i)continue;elset=t+aij*xj;yi=(bi-t)/aii;for(i=1;i=n;i+)di=f

15、abs(xi-yi);t=ff(d,n+1);if(tc) break;elsefor(i=1;i=n;i+)xi=yi;if(k=N)printf(Failure!n);if(kN)printf(k=%dn,k);for(i=1;i=n;i+)printf(yi=%fn,yi);double ff(double a,int n)double p; int t; p=a1;for(t=2;tn;t+)if(pat)p=at;return(p);运行结果:15、蛋白质设计:程序:#include #include #include void main()printf(横坐标 纵坐标 竖坐标n);

16、FILE *fp;char c100,x30007,y30007,z30007;float a3000,b3000,d3000,r3000;int i,k=0,j,n=0,m,p;float X3000,Y3000,Z3000,s1=0,s2=0,s3=0,av_x,av_y,av_z;fp=fopen(1a1c.pdb,r);for(i=0;i=10000;i+)fgets(c,81,fp);if(c0=A&c1=T&c2=O&c3=M)for(j=0;j6;j+)xkj=c32+j;printf(%c,xkj);printf( );for(j=0;j6;j+)ykj=c40+j;print

17、f(%c,ykj);printf( );for(j=0;j6;j+)zkj=c48+j;printf(%c,zkj);printf( );Xk=atof(xk);s1+=Xk;Yk=atof(yk);s2+=Yk;Zk=atof(zk);s3+=Zk;printf(n);k+;if(c77=C) n+;av_x=s1/k;av_y=s2/k;av_z=s3/k;printf(共有:%dn,k+1);printf(av_x=%f,av_y=%f,av_z=%fn,av_x,av_y,av_z);printf(C原子个数为:%dn,n);printf(平移原点后的坐标:n);for(m=0;mk;

18、m+)am=Xm-av_x;printf(%f ,am); bm=Ym-av_y;printf(%f ,bm);dm=Zm-av_z;printf(%f ,dm);rm=sqrt(am*am+bm*bm+dm*dm);printf(%f ,rm);printf(n);17高斯消去法:#include stdio.h#includemath.hmain()double a33=1,1,1,0,4,-1,2,-2,1,b3=6,5,1,x10=0;int i,j,k,n=3;for(k=0;kn-1;k+) for(i=k+1;in;i+) for(j=k+1;jn;j+) aij=aij-akj*aik/akk; bi=bi-bk*aik/akk; xn-1=bn-1/an-1n-1;for(i=2;i=n;i+) k=n-i; for(j=k+1;jn;j+) xk+=akj*xj; xk=(bk-xk)/akk;for(k=0;kn;k+)printf(x%d=%f,k,xk); 19

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1