牛顿插值法原理及应用汇总

玛丽莲梦兔
633次浏览
2021年02月11日 05:43
最佳经验
本文由作者推荐

-

2021年2月11日发(作者:什么什么什么人)


牛顿插值法






插值法


是利用函数


f


(x)


在某区间中若干点的函数值,作出适当的特定函数,

在这些点上取已知值,在区间的其他点上用这特定


函数


的值 作为函数


f


(x)


的近


似值。


如果这特定函数是


多项式


就称它为插值多项式。


当插值节点增减时全部

< p>
插值基函数均要随之变化,


这在实际计算中很不方便。

为了克服这一缺点,


提出



牛顿< /p>


插值。



牛顿插值通过求各阶差商,递推 得到的一个公式:


f(x)=f[x0]+f[x0,x1](x-x0)+f[x0, x1,x2](x-x0)(x-x1)+...f[x0,...xn](x-x0


) ...(x-xn-1)+Rn(x)




插值函数




插值函数的概念及相关性质


[1]




定义:


设连续函数


y-f(x)


在区间


[a,b]


上有定义,已知在


n+1


个互异的点


x0,x1,…xn


上取值分别为


y0,y1,…yn (设


a≤ x1≤x2……≤xn≤b)。若在函


数类中存在以简单函数


P (x)


,使得


P(xi)=yi,


则 称


P(x)



f(x)


的插值函数


.



x1,x2,…xn 为插值节点,称


[a,b]


为插值区间。




定理:


n


次代数插值问题的解存在且唯一








牛顿插值法


C


程序




程序框图


#include


void main()


{





float x[11],y[11][11],xx,temp,newton;





int i,j,n;





pr intf(


插值


:n


请输入要运算的值


:x=





scanf(





printf(


请输入插值的次数


(n<11):n=





scanf(





printf(


请输入


%d


组值


:n





for(i=0;i





{



printf(









scanf(









printf(









scanf(








}





for(i=1;i









for(j=i;j









{



if(i>1)

















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


x[j-i]);













else












< /p>


y[i][j]=(y[i-1][j]-y[i-1][j-1])/(x[j]-x[ j-1]);





















printf(






}





temp=1;newton=y[0][0];








for(i=1;i





{



temp=temp*(xx-x[i-1]);









newton=newton+y[i][i]*temp;





}





printf(


求得的结果为


:N(%.4f)=%9fn


牛顿插值法


Matlab


程序



function f = Newton(x,y,x0)


syms t;


if(length(x) == length(y))





n = length(x);


c(1:n) = 0.0;


else








disp('x



y


的维数不相等!


');





return;


end


f = y(1);


y1 = 0;


l


= 1;


for(i=1:n-1)







for(j=i+1:n)









y1(j) = (y(j)-y(i))/(x(j)-x(i));





end





c(i) = y1(i+1);










l = l*(t-x(i));







f = f + c(i)*l;





simplify(f);





y = y1;





if(i==n-1)









if(nargin == 3)













f = subs(f,'t',x0);









else













f


=


collect(f);









将插值多项式展开














f = vpa(f, 6);









end





end













%


牛顿插值法







:< /p>


值法利用函数


f (x)


在某区间中若干 点的函数值,作出适


当的特定函数,


在这些点上取已知值,


在区间的其他点上用这特定函


数的值作为函数


f (x)


的近似值。


如果这特定函数是多项式,

< p>
就称它为


插值多项式。


利用插值基函数很容易得到 拉格朗日插值多项式,


公式


结构紧凑,


在理论分析中甚为方便,


但当插值节点增减时全部插值基


函数均 要随之变化,整个公式也将发生变化,



这在实际计算中是很< /p>


不方便的,为了克服这一缺点,提出了牛顿插值。


















< br>推













f(x )=f[x0]+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+... f[x0,...xn](x-x


0)...(x-xn-1)+Rn(x)



关键词


:牛顿插值法



流程图



程序实现






一、



插值法的由来







< /p>


在许多实际问题及科学研究中,


因素之间往往存在着函数关系,< /p>


然而,


这种关系经常很难有明显的解析表达,

通常只是由观察与测试


得到一些离散数值。有时,


即使给出 了解析表达式,却由于表达式过


于复杂,不仅使用不便,而且不易于进行计算与理论分析 。解决这类


问题的方法有两种:一种是插值法


,


另一种是拟合法。插值法是一种


古老的数学方法,它来自生产实践,早在一千多 年前,我国科学家在




< p>
研究历法上就应用了线性插值与二次插值,


但它的基本理论却是在微


积分产生之后才逐渐完善的,


其应用也日益增多,

特别是在计算机软


件中,许多库函数,如等的计算实际上归结于它的逼近函数的计算 。


逼近函数一般为只含有算术运算的简单函数,


如多项式、


有理分式


(即


多项式的商)


。在工程实际问题当中,我们也经常会碰到诸如此类的


函数值计算问题。


被计算的函数有时不容易直接计算,


如表达式过于

复杂或者只能通过某种手段获取该函数在某些点处的函数值信息或


者导数值信息等。 因此,我们希望能用一个“简单函数”逼近被计算


函数,


然后用 该简单函数的函数值近似替代被计算函数的函数值。



种方法就 叫插值逼近或者插值法。



逐次线性插值法优点是能够最有效地 计算任何给定点的函数值,


而不需要写出各步用到的插值多项式的表达式。


但如果解决某个问题


时需要插值多项式的表达式,


那 么,


它的这个优点就成了它的缺点了。


能不能根据插值条件构造 一个插值多项式,


它既有具体的表达式,


很容易用它计算任何点的函数值呢?牛顿插值法能作到这一点。




二、牛顿插值法的概念




顿插值多项式的表达式





N



c



c


(


x



x


)



c


(


x

< br>


x


)(


x


x


)






c


(< /p>


x



x


)(


x



x


)





(


x



x


n

< br>0


1


0


2


0


1


n


0


1


n



1


)



问题是如何根据插值条件






















N



x




y


,i=0,1,2





n



n


i


i


来计算待定系数

< br>c


0


,


c


1


,


c


2





c


n






























知,



































N


(


x


)



y


n


0


0



f


(


x

< br>0


)



c



y


0


n


1


0



f


(


x


0


)


1





N


(


x


)


< br>y



f


(


x


1


)


















因而




















其中



< /p>


f



x


0


,


x


1


< p>



































因而











c


0



c


1


(


x


1



x


0


)

< br>


y


1




y


1



0


(


x


1


)



f


(


x


0


)


f

< br>







c


1



y


x



x



f


x


0


,


x


1

< br>


1


0


x


1



x



0



称为函数


f(x)

< br>在


x


0


,


x


1


点的一阶商。








N


n


(


x


2


)



y


2



f


(


x


2


)

< br>





c


0



c


1


(


x


1



x


0


)



c


2


(


x


2



x


0

< br>)(


x


2


x


1


)



y


2



























y



y



f


[


x


,


x


](

< p>
x



x


)


c



(


x


x


)(


x



x


)



y



y





y



y




f


[


x


,


x


](


x



x


)


(


x



x


)(


x



x


)



y



y




f


[


x


,


x


](


x



x


)



f


[

x


,


x


](


x



x


)



(


x



x


)(


x



x


)


y



y

< p>


f


[


,


]


x


x


x


x



(


x



x


)


f< /p>


[


x


,


x


]



f


[

< p>
x


,


x


]




f


[

x


,


x


,


x


]


(


x


< /p>


x


)



2


0


0


1


2

< p>
0


2


2


0


2


1


2


1

1


0


0


1


2


0


2


0


2< /p>


1


2


1


0


1


1


0


0

< p>
1


2


0


2


0


2


1


2

2


1


0


1


1


2


0


1


2< /p>


0


1


0


1


2


2


0


其中


f


[


x


0


,


x


1


,

< br>x


2


]


称为函数


f


(x)



x


0


,


x


1

< br>,


x


2


点的二阶差商。实际上, 它


是一阶差商的差商。一般地,如果已知一阶差商


f

< p>
[


x


i



1


,


x


i

],


f


[


x


i


,


x


i



1


]




那么就可以计算二




f


[


x


i


1


,


x


i


,


x


i


< /p>


1


]



f


[


x


i


,

< p>
x


i



1


]



f


[

x


i



1


,


x


i


]


阶差 商














x


i



1


_


x


i



1



类似于上述过程不断地推导下去,可得




























c


3



c


4


f


[


x


1


,


x


2


,


x


3

< br>]



f


[


x


0


,


x


1


,


x


2


]


(


x


3



x


0


)



f


[


x


0

< br>,


x


1


,


x


2


,


x


3


],



f


[< /p>


x


0


,


x


1


,


x


2

< p>
,


x


3


,


x


4


],


< br>f


[


x


1


,


x


2


,


x


3


,


x


4


]



f


[


x


0


,


x


1


,


x


2

< br>,


x


3


]


(


x


4



x


0


)






c


4



其中,



f


[


x


1


,


x


2



< br>


x


n


]



f


[


x


0


,


x


1


,


x


2





x


n



1


]


(


x

< br>n



x


0


)



f


[


x


0


,


x


1


,


x


2





x


n


],



f


[


x


0


,


x

1


,


x


2


,


x


3


],


f


[


x


0


,


x


1


,


x


2


,


x


3


,


x


4


],


f


[


x


0

,


x


1


,


x


2


,


x


3< /p>


,


x


4


,


x


5


],


分别称为函 数


f (x)


在相应点处的三阶差商,四阶差商和


n


阶差商。实际上,





c


,


c


,


c





c


0


1


2


n




的计算可通过以下简易地构造函数的差商来完成。





x



0


f


(


x


0


)



c


0



1


x



f


(


x


1


)



f


[


x


0


,


x


1

< br>]



c


1








x



2


f


(


x


2


)



f


[


x


1


,


x

< br>2


]




f


[


x


0


,


x


1


,


x


2


]



c


2




x



3


f


(


x


3


)



f


[


x


2


,


x


3

< br>]



f


[


x


1


,


x


,


x


3


]


2




f


[


x


0


,


x


1


,


x


2

< br>,


x


3


]



c


3



x



.


.


.


4


f


(< /p>


x


4


)



f


[


x


3

< p>
,


x


4


]



f


[


x

2


,


x


3


,


x


4


]


< /p>


f


[


x


1


,


x


,


x

< p>
3


,


x


4


]


2



f


[


x


0


,


x


1


,


x< /p>


2


,


x


3


,


x


4


]

< p>


c


4


.


.


.


.


.


.


.


.


.


.


.


.


.


.


.


按上述方式构造插值多项式的 方法叫做牛顿插值法。


根据插值多项式


的惟一性知,其截断误差 与拉格朗日插值法相同,



即:










R


n



1


(


n



1


)!

< p>
f


(


n



1


)


(


)


π


n



1


(


x


)


< /p>


但也可以表示成差商形式。这是因为以


x


0


,


x


1


,< /p>


x


2





x


n


为节点的多项 式











N


n



1


(


x


)



N


n


(


x


)



f

< br>[


x


0


,


x


1





x


n



1


]



n



1


(


x


)



从而





f


(


x


n



1


)



N


n



1


(


x


n

< br>


1


)



N


n


(


x


n



1


)



f


[


x


0


,


x


1





x


n

< br>


1


]



n



1


(


x


n



1


)





-


-


-


-


-


-


-


-