带重节点的牛顿插值法
2.2.2,2.2.3牛顿插值法
f0 f [ x0 , x1 ,, xk ]( x x j ) f [ x , x0 , x1 ,, xn ]( x x j )
k 1 j 0 j 0
华长生制作 12
n
k 1
n
N n ( x) f [ x , x0 , x1 ,, xn ]( x x j )
f k f k 1 f k
k 0,1,, n 1
为f ( x)在 xk 处的一阶向前差分
f k f k f k 1
k 1,2 ,, n
为f ( x)在 xk 处的一阶向后差分
2 fk fk 1 fk 为f ( x)在 xk 处的二阶向前差分
华长生制作
j 0
n
Nn ( x) Rn ( x)
f ( n1) ( ) n1 ( x) f [ x, x0 , x1 ,, xn ]n 1 ( x) 因此 Rn (x) (n 1)!
一般
Rk (x) f [ x0 , x1 ,, xk 1 ]k 1 ( x)
(3) 当f(k ) ( x)在包含节点 0 , x1 ,, xk的区间存在时 x ,
在x0 , x1 ,, xk 之间必存在一点 , 使得
f [ x0 , x1 ,, xk ]
华长生制作
f
(k )
( ) k!
用余项的 相同证明
7
差商的计算方法(表格法):
xk f ( xk ) 一阶差商 x0 f ( x0 )
kn
f ( n 1) ( ) 另外 f [ x , x0 , x1 ,, xn ] ( n 1)!
f ( k ) ( ) f [ x0 , x1 ,, xk ] k!
2.3均差与牛顿插值公式
为了得到等距节点的插值公式,先介绍差分的概念.
设函数 y f ( x) 在等距节点 xk x0 kh (k 0,1,, n) 上
的值 f k f ( xk ) 为已知,这里 h 为常数,称为步长.
13
定义
记号 f k f k 1 f k ,
n j
(2)函数值可用差分表示,如 轾 n 骣 n j n n 犏 琪 f n+k = E f k = ( I +D ) fk = 邋 D fk = 琪 犏 j j =0 桫 臌
骣 n j 琪 D fk . 琪 j j =0 桫
n
15
f k 1 f k f k (3) 差商与差分关系,如: f [ xk , x k 1] , xk 1 xk h f [ xk 1, x k 2 ] f [ xk , x k 1] 2 f k f [ xk , x k 1, x k 2 ] , 2 xk 2 xk 2h
称为 f ( x) 在 x k处以 h 为步长的一阶(向前)差分. 利用一阶差分可定义二阶差分为
2 f k f k 1 f k f k 2 2 f k 1 f k .
一般地可定义 m 阶差分为
m f k m1 f k 1 m1 f k .
14
引进不变算子I:Ifk f k , 移位算子E : Ef k f k 1.
1 1 1 1 4 1 1 1 3 N 3 ( ) 1 2 2 ( 1) ( 1) ( 2) 2 2 2 2 2 3 2 2 2
4 x( x 1)( x 2) 3
12
2.3.3 差分与等距节点插值
牛顿(newton)插值法
牛顿(newton)插值法牛顿插值法是一种数值分析中的插值方法,它用于找到一个多项式函数,该函数会经过给定的一系列数据点。
该方法最初由英国数学家艾萨克·牛顿(Isaac Newton)发明并称为插值多项式,它也被称作差分插值法。
插值是数学和工程学中的一项重要任务,它是用于在给定数据点之间构建连续函数的一种数值方法。
插值方法通常涉及过渡从观察结果派生出抽象结果的过程,从而使得预测可能的结果取得更加准确。
下面介绍牛顿插值法的基本原理。
插值基础插值基础是插值方法中的一个重要概念。
在这里,我们将对牛顿插值法中用到的插值基础进行简要介绍。
一个插值基础是指一个已知数据点的集合,通常是一个 x 坐标和对应的 y 坐标。
每个插值基础一般定义为一个数据点的函数,该函数包含了给定点的所有信息并将这些信息用于构建连续函数。
在牛顿插值法中,我们使用差分来定义插值基础。
差分是指两个相邻数据点之间 y 坐标的差值。
具体来说,若给定以下节点:x0, y0x1, y1x2, y2...xn, yn我们则通过以下的 "+" 符号所示的不断进行差分的方式来构建一个插值基础:y0y1-y0…yn-yn-1 yn-yn-1 yn-yn-2 ... yn-y0上述图表所展示的差分的值即为定义插值基础的差商(divided difference)。
牛顿插值公式基于上述插值基础和差商,我们现在可以使用牛顿插值公式来实现插值。
具体来说,牛顿插值公式可以表示为:f(x) = y0 + d1*f[x0,x1] + d2*f[x0,x1,x2] + ... + dn*f[x0,x1,...,xn]其中 f(x) 是插值函数,x0, x1, ..., xn 是给定的节点,y0, y1, ..., yn 是对应的 y 值,f[x0,x1] 是差商 f(x0,...,x1) 的值,d1, d2, ..., dn 也是差商。
请注意,插值函数的次数最高为 n - 1,这意味着插值函数与插值基础的次数相同。
牛顿插值法介绍
牛顿插值法介绍本文将介绍牛顿插值法的基本原理、计算过程、优缺点以及在实际问题中的应用。
首先,我们将简要介绍插值法的基本概念和牛顿插值法的由来,然后详细讨论牛顿插值法的计算步骤和算法,接着分析其优缺点以及适用范围,最后通过几个实际问题的例子展示牛顿插值法的应用场景。
一、插值法基本概念在数学和计算机领域,插值是指根据已知的离散数据点构造满足这些数据点的曲线或函数的过程。
假设我们有一组数据点{(x1, y1), (x2, y2), ..., (xn, yn)},我们想要通过这些数据点构建一个函数f(x),使得f(xi) = yi,其中i = 1, 2, ..., n。
这样的函数就是经过插值的函数,它代表了这些数据点的趋势和变化规律。
插值法通常用于寻找这样的函数,它能够通过已知的数据点来估计函数在其他位置的值。
常见的插值方法包括拉格朗日插值法、牛顿插值法和埃尔米特插值法等。
在这些方法中,牛顿插值法是最为广泛使用的一种,因为它的计算效率高、精度较高,并且易于编程实现。
二、牛顿插值法的由来牛顿插值法由艾萨克·牛顿在17世纪提出,他是一位英国著名的数学家、物理学家和天文学家,在微积分、物理学和光学等领域都做出了重大贡献。
牛顿发展了牛顿插值法的理论基础和计算方法,并将其应用于数据分析和天体运动等问题中。
牛顿插值法基于牛顿插值多项式的概念,该多项式利用差商(divided differences)来表示,并具有易于计算和分析的优势。
牛顿插值多项式能够在已知的数据点上进行插值,并且还可以通过添加新的数据点来动态地更新插值结果。
因此,牛顿插值法成为了一种非常有用的数值计算工具,被广泛应用于工程、科学和金融等领域。
三、牛顿插值法的计算步骤1. 确定数据点首先,我们需要确定一组离散的数据点{(x1, y1), (x2, y2), ..., (xn, yn)},这些数据点是我们已知的数据,我们要通过它们来构建插值函数。
牛顿插值法的原理和推导过程
牛顿插值法的原理和推导过程一、引言在科学计算和数值分析中,插值法是一种重要的数学工具,它可以通过已知的离散数据点来估计未知点的值。
在众多插值法中,牛顿插值法以其形式简洁、计算方便而广受欢迎。
本文将对牛顿插值法的原理和推导过程进行详细阐述。
二、牛顿插值法的基本原理牛顿插值法是一种多项式插值方法,它的基本思想是通过构造一个n次多项式Pn(x),使得该多项式在给定的n+1个插值节点上与被插值函数f(x)具有相同的函数值。
这样,在插值节点之间,我们可以用Pn(x)来近似代替f(x)。
三、牛顿插值法的推导过程差商与差分为了构造插值多项式,首先需要引入差商的概念。
设f[xi,xj]表示函数f(x)在点xi 和xj上的一阶差商,其计算公式为:f[xi,xj] = (f(xj) - f(xi)) / (xj - xi)类似地,可以定义二阶、三阶乃至n阶差商。
n阶差商f[x0,x1,...,xn]表示函数f(x)在点x0,x1,...,xn上的差商,可以通过低一阶的差商递归计算得到。
差分是差商的另一种表现形式,它与差商之间有一一对应的关系。
在实际计算中,差分往往比差商更方便。
牛顿插值多项式的构造有了差商的概念,我们就可以构造牛顿插值多项式了。
设n次牛顿插值多项式为:Pn(x) = f(x0) + fx0,x1 + fx0,x1,x2(x-x1) + ... + fx0,x1,...,xn(x-x1)...(x-xn-1)其中,f[x0,x1,...,xk]表示k阶差商。
可以看出,Pn(x)是一个形式简洁的多项式,其各项系数即为各阶差商。
为了证明Pn(x)满足插值条件,即Pn(xi) = f(xi) (i=0,1,...,n),我们可以将xi代入Pn(x)中,逐项验证。
由于差商的性质,当x取xi时,高于i阶的差商项都将为0,因此Pn(xi) = f(xi)。
牛顿插值法的计算步骤(1)根据给定的插值节点,计算各阶差商;(2)根据牛顿插值多项式的公式,构造插值多项式Pn(x);(3)将需要插值的点代入Pn(x),得到插值结果。
数值分析4.2 牛顿插值法
Rn ( x ) f [ x, x0 ,, xn ]( x x0 )( x x1 ) ( x xn )
Rn(x)称为牛顿型插值余项。
可见, Nn(x)为次数不超过n 的多项式,且易知
Rn(xi)= 0 即 Nn(xi)= yi , (i=0,1, …,n)
满足插值条件, 故其为插值问题的解, Nn(x)称为牛顿 插值多项式。
f ( x ) f ( x0 ) f [ x0 , x1 ]( x x0 ) f [ x , x0 , x1 ]( x x0 )( x x1 ) f ( x0 ) f [ x0 , x1 ]( x x0 ) f [ x0 , x1 , x2 ]( x x0 )( x x1 ) f [ x , x0 , x1 , x2 ]( x x0 )( x x1 )( x x2 )
差分有如下基本性质
性质1 各阶差分均可用函数值表示. 即
f i f n i c f n i 1 (1) c f i (1) c f n i j
n 1 n n n n n n j
n
f i f i c f i 1 (1) c f i n (1) c f i j
Rn ( x ) f [ x , x0 , , xn ]( x x0 )( x x1 ) ( x xn ) f [ x , x0 , , xn ] n1 ( x )
k 1 n
f ( x ) N n ( x ) Rn ( x )
N n ( x ) f ( x0 ) f [ x0 , x1 ]( x x0 ) f [ x0 , x1 , x2 ]( x x0 )( x x1 ) f [ x0 , , xn ]( x x0 ) ( x xn1 )
2.牛顿插值法
x x2 x1 x 2
计算方法四③
x )( x x )......( x x ) T ………… 用for循环语句(对k) ( x x )( x x )......( x x )
0 1 2 1 n
if k~=j
3/58
L
j=0,1,2,…,n 外层循环 L=0
n
( x)
上节课内容回顾
1)构造 n 次插值基函数 lj (x) : (j=0,1, ..., n)
1/58
拉格朗日(Lagrange)插值多项式 Ln(x)的构造:
l
j
( x)
( x x 0 )( x x 1 )...( x x j 1 )( x x j 1 )...( x x n ) ( x j x 0 )( x j x 1 )...( x j x j 1 )( x j x j 1 )...( x j x n )
f [ x1 , x 3 ] f [ x 0 , x1 ]
x2 x0
f [ x1 , x 2 , x 3 ]
f [ x 0 , x 1 , , x n ]
f [ x 2 , x 3 ] f [ x1 , x 2 ] x 3 x1
xn x0
x3 x0
……
f [ x 1 , , x n ] f [ x 0 , , x n - 1 ]
j 1 n j j 1 j
)...( x
n
)
j=0,1,2,…,n 内层循环
j=1 x x0 T=1 T T
(x
1
T=T*(x-xk)/(xj-xk) k=0,1,2,...,j-1, j+1,...,n
牛顿插值
§4 Newton’s Interpolation
注:
由唯一性可知 Nn(x) ≡ Ln(x), 只是算法不同,表达 , 只是算法不同, 形式不同,故其余项也相同, 形式不同,故其余项也相同,即
f ( n +1) (ξ x ) ωn +1 ( x ) f [ x, x0 , ... , xn ]ωn +1 ( x ) = ( n + 1) !
+ f [ x , x0 , ... , xn ]( x − x0 )...( x − xn−1 )( x − xn )
Nn(x)—n次多 次 项式,满足: 项式,满足: Nn(xi)= f(xi)
ai = f [ x0, …, xi ]
Nn(x) ≡ Ln(x),??? ,
Rn(x)—插值余项, 插值余项, 插值余项 满足R , 满足 n(xi)=0, i=0,…,n
差分计算可通过构造差分表得到
xk f ( xk ) =fk ∆fk x0 f0 x1 f1 x2 f2 x3 f3 x4 f4
增加
1
t
t(t-1)/2! t(t-1)(t-2)/3!
∆2 fk
2
∆3 fk ∆4 fk
3 4
∆f0 ∆f1 ∆f2 ∆f3 ∆f4
∆2 f0 ∆3 f0 ∆4 f0 ∆5 f0 ∆ f1 ∆ f1 ∆ f1 ∆ f2 ∆ f2
f ( k ) (ξ ) f [ x 0 , ... , x k ] = , ξ ∈ ( x min , x max ) k!
实际计算过程为
f (x0) f (x1) f (x2) … f (xn−1) − f (xn) f [x0, x1] f [x1, x2] …… …… f [xn−1, xn] − f [xn, xn+1]
牛顿插值公式
(n j)C n jn(n1) j(!nj1).
n
(EI)nfk (1)j(n j)EnjIjfk
证明:用算子二项式定理:
j0 n
EI
(IE 1)nfk (1)j(n j)Inj(E 1)jfk j0
得
n
fk
n
(EI)nfk (1)j(n j)EnjIjfk
n
(1)j(nj )fnkj
j0
j0
f [x f 0 2 ,( ! x x 0 0 ) , x]f 3 ( ! x f0 [) x ( x 0, x x x ]0 ) x f 0 [x 0,f x ( n 0 n ) ( ]! x 0 ) ( x x 0 ) n 2 o (x ( x 0 ) n 2 )
又 f[x 0 ,x 0 ,x 0 ] x l x i0f m [x 0 ,x x ] x f0 [x 0 ,x 0 ]
即得牛顿向前插值公式(牛顿前插公式或表初公式): 系数
f (x) f (x0 th) Pn(x0 th) Rn(x)
其
中Pn(
x)
Pn(x0
th)
f
( xx00))tff((xx00))
t(t 1) 2!
22ff((xx00))
t(t
1)(t n!
n
1)nn
ff((xx00))
n k0
I — 不变算子(恒等算子); Ifk fk
E — 位移算子
Ek ffk 1,E m fkfk m
(4)设A与B为两算子,
若 Afk Bfk,则称算子A与B为相等。记为AB;
若 A B B A I,则称A为B的逆算子。记为BA1(AB1);
如
(a) E I, ( fkfk 1fkE k fIkf (E I)fk)
Newton插值
Newton插值(要求:对于给定节点,可以计算插值多项式)一、N ewton的数学理论假设有n+1个不同的节点及函数在节点上的值(x0,y0),…,(xn,yn),克服拉格朗日插值多项式的缺点的有效方法之一是把插值多项式构造成如下形式:Pn(x0)=a0+a1(x-x0)+a2(x-x0)(x-x1)+…+an(x-x0)(x-x1)…(x-xn) (1)其中:系数ai (i=0,1,…,n)为待定系数,可由插值条件Pn(xi)=yi (i=0,1,…,n)确定。
根据均差定义,把x看成[a,b]上的一点,可得f(x)=f(x0)+f[x,x0](x-x0)f[x,x0]=f[x0,x1]+f[x,x0,x1](x-x1)…f[x,x0,…,x(n-1)]=f[x0,x1,…,xn]+f[x,x0,x1,…,xn](x-xn)综合以上式子,把后一式代入前一式,可得f(x)=f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+…+f[x0,x1,…,xn](x-x0)…(x-x(n-1))+f[x,x0,…,xn]A(x)=Nn(x)+Rn(x)其中Nn(x)=f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+…+f[x0,x1,…,xn](x-x0)…(x-x(n-1)) (2)Rn(x)=f(x)-Nn(x)=f[x,x0,…,xn]A(x) (3)A(x)=(x-xn)(x-x1)…(x-xn)由式(1)确定的多项式Nn(x)显然满足插值条件,且次数不超过n。
式(1)的多项式中,令系数为ak=f[x0,…,xk](k=0,1,2,…,n)则将式(1)变成式(2),称Nn为牛顿均差插值多项式。
牛顿均差插值多项式在计算量上拉格朗日多项式节省很多,且便于应用于程序设计中。
式(3)为牛顿插值的余项。
二、N ewton插值算法和流程图构造计算经过点(xk,yk)=f(xk,f(xk)) (k=0,1,…,n)的次数小于等于n的牛顿插值多项式:Nn=f(x0)+f[x0,x1](x-x0)+…+f[x0,x1,x2](x-x0)(x-x1)+…+f[x0,x1,…,xn]…(x-x(n-1)) 三、N ewton插值的Matlab实现function f=Newton(x,y,x0)%求已知数据点的牛顿插值多项式%已知数据点的x坐标向量:x%已知数据点的y坐标向量:y%插值的x坐标:x0%求得的牛顿插值多项式或在x0处的插值:fsyms t;if(length(x)= =length(y))n=length(x);c(1:n)=0.0;elsedisp(`x和y的维数不相等!`);return;ednf=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));endc(i)=y1(i+1);l=1*(t-x(i));f=f+c(i)*l;simplify(f);y=y1;if(i==n-1)if(nargin==3)f=subs(f,`t`,x0);elsef=collect(f); %将插值多项式展开f=vpa(f,6);endendend四、N ewton插值的算例实现【例题】用程序求过已知数据点(1,-3),(2,0),(3,15),(4,48),(5,105),(6,192)的牛顿插值多项式。
5-2牛顿插值
1 1 m m f xk , xk 1 , xk m f f k m k m m m!h m!h (m 1,2,) (5 33)
由(5-33)可的如下公式:
f [ x0 , ... , x k ] k f 0
k f n f [ xn , xn 1 , ... , xn k ] k ! hk
一阶差分
二阶差分
三阶差分 1
0.09001 0.08521 0.07958 t -0.00480 -0.00563 -0.00083
t (t 1)(t 2) 3!
t
1 t (t 1) 2
t (t 1)(t 2) 3!
1 t (t 1) 2
Newton向前插值公式为
1 N 3 ( x0 th) 0.38942 0.09001t 0.00480 t (t 1) 2 1 0.00083 t (t 1)(t 2) 6 x x0 0.57891 0.4 将 t 1.7891 代入上式得 0.1 h
若
差分值可由函数值算出:
n f k ( 1) f n k j j j0
n n j
f k (1)n j
n j 0
n
n f k j n j
其中
n n( n 1)...( n j 1) j! j
可用差分表示差商:
an ( x x0 )...( x xn1 ) 的形式,希望每加一个节点时,
只附加一项上去即可.
牛顿插值多项式 N n ( x) a0 a1 ( x x0 ) a2 ( x x0 )( x x1 ) ...
an ( x x0 )...( x xn 1 )
牛顿插值公式
k f ( x1 ) k!hk
k f ( x0 ) k!hk
k f ( x1 ) k f ( x0 )
k!hk
(k 1)h
(k 1)h
k ( f ( x1 ) f ( x0 )) (k 1)!hk1
k 1 f ( x0 ) (k 1)! hk 1
.
n
Rn( x) f [x, x0 , x1, , xn ]( x xi ) --- 牛顿插值余项 i0
乘除法次数大约为: 1 n2 3 n 较L-插值法减少了3-4倍. 22
5 重节点差商
定义5 (重节点差商)
则定义
记
f[
类似的有
x0
,
x0
]
x
lim
(1 0
)
x
0
f[
若 lim x0(1) x0
x0
,
x(1) 0
]
f ( x0(1) ) f ( x0
x0(1) x0
lim f ( x0(1) )
x0(1) x0
x0(1)
)
f (x x0
f
0
( x0 ) )
f
(
,
x
0
)
(1)f [x0, x1,
, xn, x, x]
lim
x(1) x
f [x0, x1,
m!
f
x0 , x1,
,
xm
m f ( x0 ) m!hm
5.2 牛顿向前插值,向后插值公式
1、公式
a
x0
x1
x2
xn1 xn b
2 newton插值的原理和算法
Newton插值的原理和算法
Newton插值法是一种数学方法,用于通过已知的离散数据点来构造多项式,该多项式可以用来估计未知数据点的值。
以下是Newton插值的原理和算法:
原理:
Newton插值基于差商的概念。
差商可以理解为两个相邻数据点之间的值与它们之间距离的比的极限。
对于给定的数据点集,可以通过构造差商表来找到插值多项式。
算法:
1.确定插值节点:选择一组已知数据点的x坐标,这些点将成为插值的节
点。
2.计算差商:根据差商的定义,计算每个数据点与其相邻数据点之间的差
商。
具体来说,对于第i个数据点,其差商Di(x)可以表示为:Di(x) =
[f(xi)/xi - f(xi-1)/(xi-1)] / (xi - xi-1),其中f(xi)和f(xi-1)分别是第i个和第i-1
个数据点的函数值,xi和xi-1分别是它们的x坐标。
3.构造差商表:将计算出的差商存储在一个表格中,以便后续使用。
4.构建插值多项式:根据差商表,使用Newton插值公式来构建插值多项
式。
具体来说,对于任意x坐标,其对应的函数值f(x)可以通过插值多项式来计算。
5.计算未知数据点的值:将需要估计的x坐标代入插值多项式中,即可得
到对应的函数值估计。
需要注意的是,Newton插值法在处理大量数据点时可能会遇到数值稳定性问题。
此外,当插值节点过多时,差商的计算量会变得非常大,因此在实际应用中需要谨慎选择插值节点数量。
牛顿插值法原理及应用
牛顿插值法插值法是利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。
如果这特定函数是多项式,就称它为插值多项式。
当插值节点增减时全部插值基函数均要随之变化,这在实际计算中很不方便。
为了克服这一缺点,提出了牛顿插值。
牛顿插值通过求各阶差商,递推得到的一个公式: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<stdio.h>void main(){float x[11],y[11][11],xx,temp,newton;int i,j,n;printf("Newton插值:\n请输入要运算的值:x=");scanf("%f",&xx);printf("请输入插值的次数(n<11):n=");scanf("%d",&n);printf("请输入%d组值:\n",n+1);for(i=0;i<n+1;i++){ printf("x%d=",i);scanf("%f",&x[i]);printf("y%d=",i);scanf("%f",&y[0][i]);}for(i=1;i<n+1;i++)for(j=i;j<n+1;j++){ if(i>1)y[i][j]=(y[i-1][j]-y[i-1][j-1])/(x[j]-x[j-i]);elsey[i][j]=(y[i-1][j]-y[i-1][j-1])/(x[j]-x[j-1]);printf("%f\n",y[i][i]);}temp=1;newton=y[0][0];for(i=1;i<n+1;i++){ temp=temp*(xx-x[i-1]);newton=newton+y[i][i]*temp;}printf("求得的结果为:N(%.4f)=%9f\n",xx,newton);牛顿插值法Matlab程序function f = Newton(x,y,x0)syms t;if(length(x) == length(y))n = length(x);c(1:n) = 0.0;elsedisp('x和y的维数不相等!');return;endf = 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));endc(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);elsef = collect(f); %将插值多项式展开f = vpa(f, 6);endend牛顿插值法摘要:值法利用函数 f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。
牛顿插值法
牛顿插值法(1)牛顿真是牛,拉格朗日插值法只能算是数学意义上的插值,从插值基函数的巧妙选取,已经构造性的证明了插值法的存在性和惟一性,但是从实现的角度看并不很好,而牛顿很好的解决了这个问题。
牛顿插值是基于下面这些的公式:f[x0,x1,...xk]=(f[x1,...xk]-f[x0,...xk-1])/(xk-x0)f[x]=f(x)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)前两个是均差的递推关系式,而后一个就是牛顿插值公式,其中N(x)=f(x)-Rn(x),即目标多项式,Rn(x)是n阶插值余项,我们就是用N(x)去近似f(x)。
可以构造这样一个均方差表:xk f(xk) 一阶均差二阶均差 ...x0 f(x0)x1 f(x1) f[x0,x1]x2 f(x2) f[x1,x2] f[x0,x1,x2]...如果有n个点插值,表会有(n*n)/2+n个表项,如果直接编程会有O(n*n)的空间复杂度,编程时做个简单的改进,不难发现在这个表中只有部分数据有用,对角线(斜行)它们是目标值,用来表示多项式的,左边的两纵行(实际上只需要x一行)以及最底下的一行,表示当前插值的状态。
经过改进后只需要O(n)的空间复杂度。
两个过程:1,新增加一个点时的更新。
只须更新最底下一行数据,其递推关系由均差公式给出,最后算出高一队的均差值,需时O(n)2,插入点完成后如何计算多项式在另外给定点的值N(x)。
由牛顿插值公式,最终的表达式为:N(x)=f[x0]+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+...f[x0,...xn](x-x0)...(x-xn-1)如果直接将它展开,再算实在麻烦,实际上大可不必这样做,还记得多项式求值的秦九韶算法吗?将多项式‘叠’起来,从内层括号往外一层层拨开,n次多项多的计算,只需要做n次乘法,同样的思想,将上式改写成:N(x)=f[x0]+(x-x0){f[x0,x1]+(x-x1){f[x0,x1,x2]+(x-x2){...{f[x0,...xn-1]+(x-xn-1)f[x0, (x)n]}...}就可以同样简单的计算了,时间复杂度O(n)综合起来的性能:对于n个点的插值,产生多项式的时间复杂度是O(n*n),最终进行一个点的计算的时间复杂度是O(n)。
牛顿插值法
x2-x1
依次递推可得到a3, …, an. 为写出系数 ak的一般表达式,
➢差商(均差)定义
2.3.2 均差及其性质
1、差商(均差)的定义
称
f [x0 , xk ] =
f ( xk ) - f ( x0 ) xk - x0
为 f ( x关) 于点 x的0 ,一xk阶差商。
称
f [ x0 , x1, xk ] =
-
f ( x1)
-பைடு நூலகம்
f ( x0 )
( x1 - x0 )( xk - x1) ( x0 - x1)( xk - x1)
=
f (x0 )
+
f (x1)
+
f (xk )
(x0 - x1)( x0 - xk ) (x1 - x0 )( x1 - xk ) (xk - x0 )( xk - x1)
一般有
f [ x0 , x1,, xk ] =
注:差商与节点的排列次序无关——差商 的对称性
f[x0,x1,…,xn]= f[x1,x0,x2,…,xn]=… = f[x1, …, xn ,x0]
因此 f [ x0 , x1,, xk ] = f [ x1, xk-1, x0 , xk ] = f [ x1, x2 ,, xk-1, xk ] - f [ x1, x2 ,, xk-1, x0 ] xk - x0 = f [ x1, x2 ,, xk-1, xk ] - f [ x0 , x1, x2 ,, xk-1] xk - x0
=
f[x0,x2] - f[x0,x1]
x2 - x1
= f[x0,x1,x2] ;
P2(x)=f(x0) + f[x0,x1](x-x0) + f[x0,x1,x2](x-x0)(x-x1)
牛顿插值法ppt课件
f (m0 (m0
1)( )
1)!
(
x
x0
)(
m0
1)
19
Hermite插值多项式(续2)
已知函数 y f (x)在区间[a,b]上n个互异点 x0 , x1,L , xn 处的函数值 y0 , y1,L , yn , 以及导数值m0 , m1,L , mn ,求 H2n1(x) P2n1 使得满足插值条件
0 (x),1(x), 0 (x), 1(x)
使之满足
0 (x0 ) 1
00
( x1 (x0
) )
0 0
0 (x1) 0
0 (x0 ) 0 0 (x1) 1 0 (x0 ) 0 0 (x1) 0
0 (x0 ) 0
0 0
( x1 ) (x0 )
0 1
0 (x1) 0
0 (x0 ) 0
增加一个点后
Nn1(x) c0 c1(x x0 ) c2(x x0)(x x1) L cn (x x0)(x x1)L (x xn1) cn1(x x0 )(x x1)L (x xn1)(x xn )
5
Newton插值
关键是ci的求法! 可仿照泰勒公式里系数 的求法!
Nn (x) c0 c1(x x0 ) c2 (x x0 )(x x1) cn (x x0 )(x x1) (x xn1)
1.53427 2.18224 x 0.761677 x2 0.113706 x3
ln 1.5 = 0.409074
28
一般的Hermit插值
设在n+1个节点 a x0 x1 L xn b
给出函数值和导数值 y0 , y1,L , yn 及y0 , y1,L , yn
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
带重节点的牛顿插值法
牛顿插值法是一种在给定数据点的情况下通过插值函数来逼近真实函数的方法。
它属于插值法中的一种,是一种非常有用和广泛使用的数值计算方法。
牛顿插值法使用一个多项式函数来逼近真实函数,该函数使用给定的数据点来确定多项式系数。
带重节点的牛顿插值法是一种牛顿插值法的扩展形式,可以在数据点重复的情况下使用。
在牛顿插值法中,我们首先将给定的数据点按照节点值从小到大排序。
然后我们需要计算每一个节点上的差商,通过差商可以得到一个多项式函数。
差商的定义如下:
$f[x_0,x_1]=\frac {f(x_1)-f(x_0)}{x_1-x_0}$
以此类推,差商的递归计算可以用以下公式表示:
$f[x_i,x_{i+1},\dots,x_{i+j}]=\frac
{f[x_{i+1},x_{i+2},\dots,x_{i+j}]-f[x_i,x_{i+1},\dots,x_{i+j-1}]}{x_{i+j}-x_i} $
使用差商的定义和递归公式,我们可以得到一个多项式函数:
$P_n(x)=f[x_0]+f[x_0,x_1](x-x_0)+f[x_0,x_1,x_2](x-x_0)(x-x_1)+\dots+f[x_0,x_1, \dots,x_n](x-x_0)(x-x_1)\dots(x-x_{n-1})$
其中,$f[x_0,x_1,\dots,x_n]$表示一个$n$阶的差商。
但是,如果在给定的数据点中有重复的节点,那么上述算法将不再适用。
为了使用带重节点的牛顿插值法,我们需要使用多重差商(divided difference)来计算插值函数。
在插值点为$x_0,x_1,\dots,x_n$且有$m+1$个插值点重复的情况下,$m+1$重差商(divided difference)定义为:
对于$m+1$个插值点重复的情况,用多重差商计算插值函数的公式如下:
其中,$f(x_0,x_0,\dots,x_0,x_i)$是$i+1$重差商,
$\prod_{j=0}^{i-1}(x-x_j)$是拉格朗日基函数。
带重节点的牛顿插值法可以用于曲线拟合、数据拟合等问题中。
当给定的数据点中有重复的节点时,牛顿插值法无法适用,带重节点的牛顿插值法可以有效地应对这种情况。