多项式插值
来源:互联网 发布:中国失业率数据2016 编辑:程序博客网 时间:2024/05/16 05:00
多项式插值
1、多项式插值的定义
给定
n+1 个点{(xi,yi)}ni=0 (称为 插值点),所谓 多项式插值 就是找到一个多项式(称为 插值多项式)
y=P(x)=akxk+ak−1xk−1+⋯+a1x+a0
使得它满足条件
yi=P(xi),其中i=0,1,…,n
也就是说,多项式y=P(x) 的图像要经过给定的n+1 个点。
在实际应用中,这些插值点可能来自某次实验测量所得的数据,也可能来自某个复杂函数
2、插值多项式的存在唯一性和误差
满足以上条件的多项式总是存在的。特别地,我们可以证明:
定理一:给定
n+1 个点{(xi,yi)}ni=0 ,若xi 两两不同,则存在 唯一 一个次数不超过n 的多项式y=P(x) ,使得yi=P(xi) (i=0,1,…,n )成立。
证明:利用范德蒙德矩阵和代数学基本定理即得。
注意:在本文中我们均假定
当
定理二:给定
n+1 个点{(xi,yi)}ni=0 ,其中yi=f(xi) ,进一步假设函数f(x) 具有n+1 阶连续导数,则插值多项式P(x) 的误差R(x) 为
R(x)=f(x)−P(x)=f(n+1)(ξ)(n+1)!(x−x0)(x−x1)⋯(x−xn)
其中min{xi}≤ξ≤max{xi} 。
3、插值多项式的计算
给定
3.1 直接法
根据定理一,假设插值多项式为
由插值条件
通过求解这个线性方程组,即得到插值多项式。
优点:直接,性质一目了然。
缺点:待求解的线性方程组的系数矩阵为 范德蒙德 (Vandermonde)矩阵,它是一个病态矩阵,这使得在实际求解方程组时将产生很大的误差。
3.2 拉格朗日多项式插值
拉格朗日(Lagrange)多项式插值的原理是:先构造一组 拉格朗日基函数
然后将这些基函数做线性组合,得到拉格朗日插值多项式
容易验证,多项式
拉格朗日基函数
由基函数的性质,当
j∈{0,1,…,n}∖{i} 时Li(xj)=0 ,即xj 为Li(x) 的零点,可以假设
Li(x)=K⋅∏j≠i(x−xj)
其中,K 为待定系数。再由Li(xi)=1 ,得到
Li(xi)=K⋅∏j≠i(xi−xj)=1
从而得到
K=1∏j≠i(xi−xj)
因此,基函数
Li(x)=∏j≠i(x−xj)∏j≠i(xi−xj)
令ω(x)=(x−x0)(x−x1)⋯(x−xn) ,则Li(x) 还可以表示为
Li(x)=ωn+1(x)(x−xi)ω′n+1(xi)
下面的定理说明
定理三:令
Pn(x) 为全体次数不超过n 的多项式构成的集合,则{Li(x)}ni=0 是线性空间Pn(x) 的一组基。
Matlab代码
function [y,Lb] = LagrangeInterpolation(X,Y,x)% 拉格朗日多项式插值函数% 注意:插值点的个数为n,差值多项式的次数为n-1%% 输入参数% X,Y: 插值点坐标% x: 求值点%% 输出参数% y: 拉格朗日插值多项式在x点的值% Lb: 拉格朗日基函数在x点的值if length(X) ~= length(Y) error('X和Y的长度不相等');endn = length(X); %获取插值点的个数%初始化y = 0;Lb = ones(1,n);for i = 1:n for j = 1:n %计算拉格朗日基函数在x点的值 if j ~= i Lb(i) = Lb(i) * (x-X(j))/(X(i)-X(j)); end end y = y + Lb(i)*Y(i); %计算拉格朗日插值多项式的值endend
3.3 均差与牛顿多项式插值
牛顿多项式插值是基于均差的计算。首先定义均差如下。
函数
f(x) 关于点xi,xi+1 的 一阶均差(或差商)为
f[xi,xi+1]=f(xi+1)−f(xi)xi+1−xi
一阶均差f[xi,xi+1] 反映了函数y=f(x) 在区间[xi,xi+1] 的平均变化率。用递归的方式,我们定义 二阶均差 为
f[xi,xi+1,xi+2]=f[xi+1,xi+2]−f[xi,xi+1]xi+2−xi
同理,k 阶均差 为
f[xi,xi+1,…,xi+k]=f[xi+1,xi+2,…,xi+k]−f[xi,xi+1,…,xi+k−1]xi+k−xi
特别地,0 阶均差 定义为f[xi]=f(xi) 。
根据均差的定义,构造均差表如下。
如果将
把以上各式由下而上逐步代入,得到
其中,
称为牛顿插值多项式。
为插值余项。
由 定理一 和 定理二 得到均差和导数的关系如下
f[x,x0,x1,…,xn]=f(n+1)(ξ)(n+1)!
其中min{xi}≤ξ≤max{xi} 。
Matlab代码
function [y,Nt]=NewtonInterpolation(X,Y,x)% 牛顿多项式插值函数% 注意:插值点的个数为n,差值多项式的次数为n-1%% 输入参数% X,Y: 插值点坐标% x: 求值点%% 输出参数% y:牛顿差值多项式在x点的值% Nt:均差表if length(X) ~= length(Y) error('X和Y的长度不相等');endn = length(X); Nt = zeros(n); %初始化均差表,按列存放各阶均差Nt(1,1) = Y(1); %0阶均差for i = 2:n %按行计算均差表 Nt(i,1) = Y(i); %0阶均差 for j = 2:i Nt(i,j) = (Nt(i,j-1)-Nt(i-1,j-1))/(X(i)-X(i-j+1)); endend%计算牛顿插值多项式在x点上的值w = 1;y = Nt(1,1) * w;for i = 2 : n w = w * (x - X(i-1)); y = y + Nt(i,i) * w;endend
3.4 拉格朗日多项式插值和牛顿多项式插值的比较
拉格朗日多项式插值的计算量大于牛顿多项式插值的计算量。特别地,当新增一个插值点时,拉格朗日插值需要重新计算全部的基函数,而牛顿插值只需计算均差表中新的一行的值即可。
- 多项式插值
- 插值多项式
- 插值多项式例子
- Lagrange插值多项式
- 牛顿基本插值多项式
- 拉格朗日Lagrange插值多项式
- 插值方法-拉格朗日多项式
- 插值多项式的性质
- Lagrange多项式插值计算
- 牛顿插值多项式算法
- 数值方法:多项式插值
- Chebyshev多项式, Legendre多项式,与Chebyshev多项式零点插值
- 拉格朗日多项式插值近似计算
- Neville 算法解多项式插值
- 多项式插值唯一性证明
- 数值计算——多项式插值
- 多项式插值中的一些定理证明
- MATLAB在多项式插值及曲线拟合方面的应用
- spark之12:集群模式概述
- 自测-2 素数对猜想 (20分)
- 机器翻译
- sublime3+quick3.5 完整使用教程
- php学习基础篇之mysql DDL DML 2
- 多项式插值
- spark之13:提交应用的方法(spark-submit)
- mWebView.goBack 和getOriginalUrl
- 启动程序时动画效果
- SPARK STREAMING之2:编程指南
- Java__子类中调用父类重写的方法。
- 升级xcode7 和 iOS9 后遇到的问题以及解决方案
- 选择日期、时间
- #SPARK STREAMING之1:编程指南(翻译v1.4.1)