牛顿的插值法用C语言怎么编写怎么编啊?

牛顿的插值法用C语言怎么编写怎么编啊?,第1张

程序代码如带蠢下。

希望能帮助到你!

牛顿插值

#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

*

好2处数组下标溢出迟信

1、g数组只有N个元素,下标可访问区间为[0 , N-1],码纯轮下面这个代码相当于访问了g[N]了

for(j=Nj>ij--)

{

g[j]=(g[j]-g[j-1])/(x[j]-x[j-i-1])

}

2、g数组最大不裤弯能到达N,当i=N的时候,tmp*g[i]这里会访问溢出

for(i=1i<=Ni++)

{

tmp*=(u-x[i-1])

newton=newton+tmp*g[i]

}

{

double x[20],fx[20],f[20][20],xx,Nx,t //定义双精度的3个一维数组、一个二维数组、3个变量

int i,j,k,n //定义4个整型变桐旅宏量

printf(" 请输入插值点的个数n:")

scanf("%d",&n) //点的个数存入n

printf(" 请输入插值节点值和插值点函数值:\n")

for(i=0i<=n-1i++) //接收各个局册点的值

{

printf("x%d f(%d)分别为:",i,i)

scanf("%lf%lf",&x[i],&fx[i]) /镇孙/循环接收各个点的x、y的值并存入

}

for(i=0i<=n-1i++)

f[i][0]=fx[i] //把f[20][20]看成一个表,表的第一列按顺序存入因变量的各个值

for(j=1j<=n-1j++)

for(i=ji<=n-1i++)

f[i][j]=(f[i][j-1]-f[i-1][j-1])/(x[i]-x[i-j]) //公式,结合书上的图和上面一句话。。

for(k=0k<20k++)

{

printf("x=")

scanf("%lf",&xx) //用户输入的要求解的自变量值

if(xx==9999)

break //如果自变量值太大了 就跳出去

Nx=f[0][0]

for(i=1i<=n-1i++)

{ t=1.0

for(j=0j<=i-1j++) t=t*(xx-x[j]) //又是公式,就是(x-x0)*(x-x1)*...(x-xn)

Nx=Nx+t*f[i][i] //公式的尽头

}

printf("N(%f)=%f\n",xx,Nx) //输出用户输入的自变量对应的因变量的值()

}

}

break

大概这样


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12365156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存