#include<stdio.h>
#include<math.h>
int
a,b,c,d
//a、b、c、d为系数
void
main()
{
int
k=0
//计数变量
float
X0,X1,f,f1
int
a,b,c,d
printf("提示:函数f(x)=a*x^3+b*x^2+c*x+d\n")
printf("请输入系数:a,b,c,d的值:\n")
scanf("%d%d%d%d",&a,&b,&c,&d)
printf("请输入初始近似值X0:\n")
scanf("%f",&X1)
printf("---------------\n")
printf("敛散情况:\n")
printf("k:\tXk:\n")
printf("k=%d\tX%d=%f\n",k,k,X1)
do
{
k++
X0=X1
f=((a*X0+b)*X0+c)*X0+d
f1=(3*a*X0+2*b)*X0+c
X1=X0-f/f1
printf("k=%d\tX%d=%f\n",k,k,X1)
}
while(fabs(X1-X0)
>=0.00001)
printf("--------------------------\n")
printf("迭代的次数为:%d\n",k)
}
参考一下用C语言实现的牛顿法:#include "stdio.h" #include "math.h" float f(float x)float df(float x)void main()
{
float f(float x),df(float x)
float x0,x1,e,d int n,k=1
printf(" input precision:")
scanf("%f",&e) printf(" input x0:") scanf("%f",&x0) printf(" input maxtimes n")
scanf("%d",&n) x1=x0-f(x0)/df(x0) d=fabs(x1-x0)
printf("-----------------------------------------------\n")
printf("K Xk\n") printf("%5d%15.6f\n",k,x1)
while(d>e&&k<n)
{ x0=x1 x1=x0-f(x0)/df(x0) d=fabs(x1-x0)
k++
printf("%5d%15.6f\n",k,x1)
}
if(k>=n&&d>e) printf("faild\n")
} float f(float x)
{ //float x float y
y=x*x*x+2*x*x+10*x-20
return y
} float df(float x) { //float x
float y y=3*x*x+4*x+10
return y
}
牛顿插值法:#include<stdio.h>
#include<alloc.h>
float Language(float *x,float *y,float xx,int n)
{
int i,j
float *a,yy=0.0
a=(float *)malloc(n*sizeof(float))
for(i=0i<=n-1i++)
{
a[i]=y[i]
for(j=0j<=n-1j++)
if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j])
yy+=a[i]
}
free(a)
return yy
}
void main()
{
float x[4]={0.56160,0.5628,0.56401,0.56521}
float y[4]={0.82741,0.82659,0.82577,0.82495}
float xx=0.5635,yy
float Language(float *,float *,float,int)
yy=Language(x,y,xx,4)
printf("x=%f,y=%f\n",xx,yy)
getchar()
}
2.牛顿插值法#include<stdio.h>
#include<math.h>
#define N 4
void Difference(float *x,float *y,int n)
{
float *f
int k,i
f=(float *)malloc(n*sizeof(float))
for(k=1k<=nk++)
{
f[0]=y[k]
for(i=0i<ki++)
f[i+1]=(f[i]-y[i])/(x[k]-x[i])
y[k]=f[k]
}
return
}
main()
{
int i
float varx=0.895,b
float x[N+1]={0.4,0.55,0.65,0.8,0.9}
float y[N+1]={0.41075,0.57815,0.69675,0.88811,1.02652}
Difference(x,(float *)y,N)
b=y[N]
for(i=N-1i>=0i--)b=b*(varx-x[i])+y[i]
printf("Nn(%f)=%f",varx,b)
getchar()
}
留下个邮箱,我发给你:牛顿插值法的程序设计与应用