牛顿插值多项式的计算步骤

牛顿插值多项式的计算步骤,第1张

牛顿插值多项式的计算步骤如下:

牛顿插值多项式:(x0,f(x0)),(x1,f(x1)),(x2,f(x2)),……,(xn,f(xn))。牛顿插值法相对于拉格朗日插值法具有承袭性的优势,即在增加额外的插值点时,可以利用之前的运算结果以降低运算量。

插值法利用函数f(x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f(x)的近似值。

如果这特定函数是多项式,就称它为插值多项式。利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值。

1.差商(均差)及其性质 :

2.牛顿基本插值公式:图1.

图2.

3. 差分及其性质。图1:

图2:

4. 牛顿向前向后插值公式。

5. 牛顿插值多项式小结。

优点:计算简单

缺点:和拉格朗日插值方法相同,插值曲线在节点处有尖点,不光滑,节点处不可导。

程序代码如下。

希望能帮助到你!

牛顿插值法

#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]

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存