牛顿插值法原理及应用汇总
-
牛顿插值法
插值法
是利用函数
f
(x)
在某区间中若干点的函数值,作出适当的特定函数,
在这些点上取已知值,在区间的其他点上用这特定
函数
的值
作为函数
f
(x)
的近
似值。
如果这特定函数是
多项式
,
就称它为插值多项式。
当插值节点增减时全部
插值基函数均要随之变化,
这在实际计算中很不方便。
为了克服这一缺点,
提出
了
牛顿<
/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)
p>
在区间
[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
次代数插值问题的解存在且唯一
p>
。
①
牛顿插值法
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
<
br>推 通常只是由观察与测试
特别是在计算机软
复杂或者只能通过某种手段获取该函数在某些点处的函数值信息或 很容易用它计算任何点的函数值呢?牛顿插值法能作到这一点。 <
br> <
br>0 <
br>c <
br>0 <
br>y <
br> <
br> <
br> <
br>在 <
br> <
br>)( x
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
和
p>
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)
在某区间中若干
点的函数值,作出适
当的特定函数,
在这些点上取已知值,
p>
在区间的其他点上用这特定函
数的值作为函数
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-x
0)...(x-xn-1)+Rn(x)
关键词
:牛顿插值法
流程图
程序实现
一、
插值法的由来
<
/p>
在许多实际问题及科学研究中,
因素之间往往存在着函数关系,<
/p>
然而,
这种关系经常很难有明显的解析表达,
得到一些离散数值。有时,
即使给出
了解析表达式,却由于表达式过
于复杂,不仅使用不便,而且不易于进行计算与理论分析
。解决这类
问题的方法有两种:一种是插值法
,
另一种是拟合法。插值法是一种
古老的数学方法,它来自生产实践,早在一千多
年前,我国科学家在
⑤
研究历法上就应用了线性插值与二次插值,
但它的基本理论却是在微
积分产生之后才逐渐完善的,
其应用也日益增多,
件中,许多库函数,如等的计算实际上归结于它的逼近函数的计算
。
逼近函数一般为只含有算术运算的简单函数,
如多项式、
p>
有理分式
(即
多项式的商)
。在工程实际问题当中,我们也经常会碰到诸如此类的
函数值计算问题。
被计算的函数有时不容易直接计算,
如表达式过于
者导数值信息等。
因此,我们希望能用一个“简单函数”逼近被计算
函数,
然后用
该简单函数的函数值近似替代被计算函数的函数值。
这
种方法就
叫插值逼近或者插值法。
逐次线性插值法优点是能够最有效地
计算任何给定点的函数值,
而不需要写出各步用到的插值多项式的表达式。
但如果解决某个问题
时需要插值多项式的表达式,
那
么,
它的这个优点就成了它的缺点了。
能不能根据插值条件构造
一个插值多项式,
它既有具体的表达式,
又
二、牛顿插值法的概念
牛
顿插值多项式的表达式
设
N
p>
c
c
(
x
x
)
c
(
x
x
)(
x
x
)
c
(<
/p>
x
x
)(
p>
x
x
)
(
x
x
n
1
0
2
0
1
n
0
1
n
1
)
p>
问题是如何根据插值条件
N
p>
x
y
,i=0,1,2
n
n
i
i
来计算待定系数
0
,
c
1
,
c
2
c
n
p>
?
⑥
由
知,
由
N
p>
(
x
)
y
n
0
0
f
(
x
)
c
y
0
n
1
0
f
(
p>
x
0
)
1
。
N
(
x
)
f
(
x
1
)
知
因而
其中
<
/p>
f
x
0
,
x
1
由
知
因而
p>
c
0
c
1
(
x
1
x
0
)
y
1
y
1
p>
0
(
x
1
)
f
(
x
0
)
f
c
1
p>
y
x
x
f
x
0
,
x
1
1
0
x
1
x
0
,
称为函数
f(x)
x
0
,
x
1
点的一阶商。
N
n
(
p>
x
2
)
y
2
f
(
x
2
)
c
0
c
1
(
x
1
p>
x
0
)
c
2
(
x
2
x
0
x
2
1
)
y
2
⑦
y
p>
y
f
[
x
,
x
](
x
x
)
c
(
x
x
)(
x
x
)
y
y
p>
y
y
f
[
x
,
x
](
x
x
)
(
x
x
)(
x
x
)
y
p>
y
f
[
x
,
x
](
x
x
)
f
[
x
,
x
](
x
x
)
(
x
x
p>
)(
x
x
)
y
y
f
[
,
]
x
x
x
x
(
x
x
)
f<
/p>
[
x
,
x
]
f
[
x
,
x
]
f
[
x
,
x
,
x
]
(
x
<
/p>
x
)
2
0
0
1
2
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
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
[
x
i
1
,
x
i
],
f
[
x
i
,
x
i
1
]
,
那么就可以计算二
f
[
x
i
1
,
x
i
,
x
i
<
/p>
1
]
f
[
x
i
,
x
i
1
]
f
[
x
i
1
,
x
i
]
阶差
商
p>
x
i
1
_
x
i
1
类似于上述过程不断地推导下去,可得
c
3
p>
c
4
f
[
x
1
,
x
2
,
x
3
< br>]
f
[
x
0
,
x
1
,
x
2
]
p>
(
x
3
x
0
)
f
[
x
0
< br>,
x
1
,
x
2
,
x
3
],
f
[<
/p>
x
0
,
x
1
,
x
2
,
x
3
,
x
4
],
< br>f
[
x
1
,
x
2
,
x
3
,
x
4
p>
]
f
[
x
0
,
x
1
,
x
2
< br>,
x
3
]
(
x
4
x
0
)
p>
c
4
其中,
f
[
x
1
,
x
2
< br>
x
n
]
f
[
x
0
,
x
1
,
p>
x
2
x
n
1
]
(
x
< br>n
x
0
)
f
[
x
0
,
x
1
p>
,
x
2
x
n
],
f
[
x
0
,
x
1
,
x
2
,
x
3
],
f
[
x
0
,
p>
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
,
p>
c
,
c
c
0
1
2
n
的计算可通过以下简易地构造函数的差商来完成。
x
p>
0
f
(
x
0
)
c
0
1
x
f
p>
(
x
1
)
f
[
x
0
,
x
1
< br>]
c
1
x
2
p>
f
(
x
2
)
f
[
x
1
,
x
< br>2
]
f
[
x
0
,
x
1
,
x
p>
2
]
c
2
x
3
f
p>
(
x
3
)
f
[
x
2
,
x
3
< br>]
f
[
x
1
,
x
,
x
3
]
2
p>
f
[
x
0
,
x
1
,
x
2
< br>,
x
3
]
c
3
x
.
.
.
4
f
(<
/p>
x
4
)
f
[
x
3
,
x
4
]
f
[
x
2
,
x
3
,
x
4
]
<
/p>
f
[
x
1
,
x
,
x
3
,
x
4
]
2
f
[
x
0
,
x
1
,
x<
/p>
2
,
x
3
,
x
4
]
c
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
按上述方式构造插值多项式的
方法叫做牛顿插值法。
根据插值多项式
的惟一性知,其截断误差
与拉格朗日插值法相同,
即:
R
p>
n
1
(
n
1
)!
f
(
n
1
)
(
)
π
n
1
(
x
)
<
/p>
但也可以表示成差商形式。这是因为以
x
0
,
x
1
,<
/p>
x
2
x
n
为节点的多项
式
N
n
p>
1
(
x
)
N
n
(
x
)
f
< br>[
x
0
,
x
1
x
n
1
p>
]
n
1
(
x
)
从而
f
(
x
p>
n
1
)
N
n
1
(
x
n
< br>
1
)
N
n
(
x
n
1
)
p>
f
[
x
0
,
x
1
x
n
< br>
1
]
n
1
(
x
n
1
)
p>
⑨