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

上传人:b****5 文档编号:3236105 上传时间:2022-11-20 格式:DOCX 页数:18 大小:17.92KB
下载 相关 举报
数值计算C语言常用小程序.docx_第1页
第1页 / 共18页
数值计算C语言常用小程序.docx_第2页
第2页 / 共18页
数值计算C语言常用小程序.docx_第3页
第3页 / 共18页
数值计算C语言常用小程序.docx_第4页
第4页 / 共18页
数值计算C语言常用小程序.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

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

《数值计算C语言常用小程序.docx》由会员分享,可在线阅读,更多相关《数值计算C语言常用小程序.docx(18页珍藏版)》请在冰豆网上搜索。

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

数值计算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]);

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

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1