c语言牛顿迭代法

Python015

c语言牛顿迭代法,第1张

把两个子函数都写主函数里头吧!你这样写a、b、c、d都没有传参,害我找了半天。

#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()

}

留下个邮箱,我发给你:牛顿插值法的程序设计与应用