PAGE
PAGE 7
1、 秦九韶算法 2、二分法 3、拉格朗日插值 4、埃特金算法 5、复化梯形法
6、复化辛甫生算法 7、二阶龙格库塔方法 8、四阶龙格库塔方法 9、改进的欧拉方法 10、迭代法 11、埃特金加速方法:12、牛顿迭代法 13、追赶法 14、雅克比迭代 15、蛋白质设计:17高斯消去法:
?
1、 秦九韶算法
P11.3 利用秦九韶算法求多项式 ,在x=3时的值。
程序:
#include
#include
void main()
{float a[100],v,x;
int n,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
float fun(float);
void main()
{float a,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);
}
float fun(float m)
{float n;
n=m*m*m-m-1;
return(n);
}
?
运行结果:
?
?
3、拉格朗日插值
程序:
#include
main()
{float a,b,t,x[100],y[100];
int n,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()
{float a,b,c,x[100],y[100];
int i,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
double 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+fun(x);
}
s=(h/2)*s;
printf("s=%lf\n",s);
}
double fun(double m)
{double n;
n=exp(-m)*sin(4*m)+1;
return(n);
}
运行结果:
?
?
6、复化辛甫生算法
P95.9 设 ,用复化辛甫生法求积分 的近似值
程序:
#include
#include
double 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*fun(x);
x=x+h/2;
s=s+fun(x);}
s=(h/6)*s;
printf("s=%lf\n",s);
}
double fun(double m)
{double n;
n=exp