数值计算C语言常用小程序.docx
- 文档编号:5236215
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:18
- 大小:17.06KB
数值计算C语言常用小程序.docx
《数值计算C语言常用小程序.docx》由会员分享,可在线阅读,更多相关《数值计算C语言常用小程序.docx(18页珍藏版)》请在冰豆网上搜索。
数值计算C语言常用小程序
1、秦九韶算法2、二分法3、拉格朗日插值4、埃特金算法5、复化梯形法
6、复化辛甫生算法7、二阶龙格库塔方法8、四阶龙格库塔方法 9、改进的欧拉方法 10、迭代法 11、埃特金加速方法:
12、牛顿迭代法 13、追赶法 14、雅克比迭代 15、蛋白质设计:
17高斯消去法:
1、秦九韶算法
P11.3利用秦九韶算法求多项式,在x=3时的值。
程序:
#include
#include
voidmain()
{floata[100],v,x;
intn,i,k;
scanf("%d%f",&n,&x);
for(i=0;i<=n;i++)
scanf("%f",&a[i]);
v=a[n];
k=1;
do
{v=x*v+a[n-k];
k=k+1;
}
while(k<=n);
printf("v=%f",v);}
运行结果:
2、二分法
P11.1用二分法求方程法x*x*x-x-1=0在[1,2]内的近似根,要求误差不超过
#include
#include
floatfun(float);
voidmain()
{floata,b,c,x,y,y1;
scanf("%f%f%f",&a,&b,&c);
y1=fun(a);
do
{x=(a+b)/2;
y=fun(x);
{if(y*y1>0)
a=x;
else
b=x;}}
while((b-a)>=c);
printf("%f,%f\n",x,y);
}
floatfun(floatm)
{floatn;
n=m*m*m-m-1;
return(n);
}
运行结果:
3、拉格朗日插值
程序:
#include
main()
{floata,b,t,x[100],y[100];
intn,i,j,k;
scanf("%f%d",&a,&n);
for(i=0;i<=n;i++)
scanf("%f%f",&x[i],&y[i]);
k=0;
b=0;
for(k=0;k<=n;k++)
{t=1;
for(j=0;j<=n;j++)
{if(j!
=k)
t=t*(a-x[j])/(x[k]-x[j]);}
b=b+t*y[k];
}
printf("%f\n",b);
}
4、埃特金算法
程序:
#include
#include
main()
{floata,b,c,x[100],y[100];
inti,j,n,k;
scanf("%d%f",&n,&a);
for(i=0;i<=n;i++)
scanf("%f%f",&x[i],&y[i]);
for(k=1;k<=n;k++)
{for(i=k;i<=n;i++)
y[i]=y[k-1]+(y[i]-y[k-1])*(a-x[k-1])/(x[i]-x[k-1]);}
printf("%f\n",y[n]);
}
5、复化梯形法
P95.9设,用复化梯形法求积分的近似值
程序:
#include
#include
doublefun(double);
voidmain()
{
doublea,b,h,s,x,y;
intn,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+fun(x);
}
s=(h/2)*s;
printf("s=%lf\n",s);
}
doublefun(doublem)
{doublen;
n=exp(-m)*sin(4*m)+1;
return(n);
}
运行结果:
6、复化辛甫生算法
P95.9设,用复化辛甫生法求积分的近似值
程序:
#include
#include
doublefun(double);
voidmain()
{
doublea,b,h,s,x,y;
intn,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*fun(x);
x=x+h/2;
s=s+fun(x);}
s=(h/6)*s;
printf("s=%lf\n",s);
}
doublefun(doublem)
{doublen;
n=exp(-m)*sin(4*m)+1;
return(n);
}
运行结果:
7、二阶龙格库塔方法
求解初值问题:
取h=0.2
程序:
#include
#include
floatfun(float,float);
voidmain()
{floath,x0,y0,x1,y1,k1,k2;
intn,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);
k2=fun(x0+h/2,y0+h/2*k1);
y1=y0+h*k2;
printf("%f,%f\n",x1,y1);
x0=x1;y0=y1;}
}
floatfun(floata,floatb)
{floatm;
m=b-2*a/b;
return(m);
}
运行结果:
8、四阶龙格库塔方法
求解初值问题:
取h=0.2
程序:
#include
#include
floatfun(float,float);
voidmain()
{floath,x0,y0,x1,y1,k1,k2,k3,k4;
intn,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);
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;}
}
floatfun(floata,floatb)
{floatm;
m=b-2*a/b;
return(m);
}
运行结果:
9、改进的欧拉方法
求解初值问题:
程序:
#include
#include
floatfun(float,float);
voidmain()
{floatx0,y0,h,x1,y1,yp,yc;
intn,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;}
}
floatfun(floata,floatb)
{floatm;
m=b-2*a/b;
return(m);
}
运行结果:
10、迭代法
P131例2用迭代法求方程在附近的一个根,要求精度为
程序:
#include
#include
floatfun(float);
voidmain()
{floatx0,x1,c;
intk,N;
scanf("%f%f%d",&x0,&c,&N);
for(k=1;k<=N;k++)
{x1=fun(x0);
printf("%f\n",x1);
if(fabs(x1-x0) x0=x1; } if(k-1==N) printf("Failure! \n"); } floatfun(floatm) {floatn; n=exp(-m); return(n); } 运行结果: 11、埃特金加速方法: 程序: #include #include floatfun(float); voidmain() {floatx0,x1,x2,c; intk,N; scanf("%f%f%d",&x0,&c,&N); for(k=1;k<=N;k++) {x1=fun(x0); x2=fun(x1); x2=x2-(x2-x1)*(x2-x1)/(x2-2*x1+x0); if(fabs(x2-x0) {printf("%f\n",x2); break;} x0=x2; } if(k-1==N) printf("Failure! \n"); } floatfun(floatm) {floatn; n=exp(-m); return(n); } 运行结果: 12、牛顿迭代法: 例5、用牛顿法解方程 牛顿公式为: ,取x=0.5 程序: #include #include floatfun(float); floatff(float); voidmain() {floatx0,x1,c; intk,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("%f\n",x1); if(fabs(x1-x0) x0=x1;} else printf("****"); } if(k==N) printf("Failure! \n"); } floatfun(floatm) {floatn; n=m-exp(-m); return(n); } floatff(floatm) {floatn; n=1+m; return(n); } 运行结果: 13、追赶法: P198.3.用追赶法求解下列方程组: 程序: #include #include voidmain() {floata[100],b[100],c[100],d[100],t; inti,n; scanf("%d",&n); for(i=2;i<=n;i++) scanf("%f",&a[i]); for(i=1;i<=n;i++) scanf("%f",&b[i]); for(i=1;i<=n-1;i++) scanf("%f",&c[i]); for(i=1;i<=n;i++) scanf("%f",&d[i]); c[1]=c[1]/b[1]; d[1]=d[1]/b[1]; for(i=2;i {t=b[i]-c[i-1]*a[i]; c[i]=c[i]/t; d[i]=(d[i]-d[i-1]*a[i])/t;} d[n]=(d[n]-d[n-1]*a[n])/(b[n]-c[n-1]*a[n]); printf("%f\n",d[n]); for(i=n-1;i>=1;i--) {d[i]=d[i]-c[i]*d[i+1]; printf("%f\n",d[i]);} } 运行结果: 14、雅克比迭代 程序: #include #include #defineN50 #defineM4 voidmain() {doublex[M],y[M],a[M][M],b[M],d[M],c,t; doubleff(double[],int); intk,i,j,n; n=M-1; scanf("%lf",&c); for(i=0;i<=n;i++) {scanf("%lf",&x[i]); scanf("%lf",&b[i]);} for(i=0;i<=n;i++) for(j=0;j<=n;j++) scanf("%lf",&a[0][i*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; else t=t+a[i][j]*x[j];} y[i]=(b[i]-t)/a[i][i]; } for(i=1;i<=n;i++) d[i]=fabs(x[i]-y[i]); t=ff(d,n+1); if(t else for(i=1;i<=n;i++) x[i]=y[i]; } if(k==N) printf("Failure! \n");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算 语言 常用 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)