常见插值法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常见插值法
【摘 要】插值方法在数值分析中起着非常重要的作用。在此介绍一些常见的插值方法及 其应用范例。
【关键字】数值分析;插值方法;应用;
1. 插值法定义
插值法又称“内插法”,是利用函数f (x)在某区间中
插入若干点的函数值,作出适当的特定函数,在这些
表(1) 插值点
点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。
2.常见的插值法及其构造
Lagrange 插值法
(a).公式推导:
表(1)的Lagrange 插值的插值多项式
∑==n
i i i x l x f x 0
n )()()(L ,(j=0,1,2....n)。
其中插值基函数是
∏
≠=--=n
j
i i j i j x x x x x l 0
n )
()()(,(i,j=0,1 2...n) 。
其插值余项为
其中),b a (∈
ξ,∏≠=+--=n
j
i i j
i
j x x x x x 0
1n )()
()(ω
(b).matlab 实现方法:
Matlab 没有直接求解的相关函数,现编译如下: function yi = Lagarange_chazhi(x,y,xi)
% 求拉格朗日插值,并返回一个输入为xi 时的函数值 % x 为插值点向量,至少有三项 % y 为插值点值的向量,项数与x 相同 m = length(x); %求插值个数 m1 = length(y); if m<=2
error('项数不足!'); end if m~=m1
error('y 的项数应与x 相同'); end %对参数的判断 lag_hanshu = 0; syms X ;
for (l = 1:m) %构造插值基函数 la = y(l); for a = (1:l-1)
la = la*(X-x(a))/(x(l)-x(a)); end
for a = (l+1:m)
la = la*(X-x(a))/(x(l)-x(a)); end
format long
lag_hanshu = lag_hanshu+la;
%求解出插值函数 end
yi = subs( lag_hanshu,'X',xi);
%返回插值函数输入为xi 时的值 End
(c).方法缺陷:当插值点个数7n ≥时,将产生
龙格现象:
经典例子,对)
251(1
)(2x x f +=
进行拉格朗日插
0x 1x 2x ....... 1-n x n x 0y 1y 2y ....... 1-n y n y
),
(!)1()
()()()(1)1(x n f x L x f x R n n n n +++=-=ωξ
x a =b
x n =1x 2x 1
-n x 值图(1)中从左到右,从上到下,n 分别为
图(1) Lagarange 插值法的龙格现象
4,5...11,可以看出,当7n
≥后,它的\插值函数在
两个端点处发生剧烈的波动,造成较大的误差。所以拉格朗日插值法一般不适用于高次插值。
分段线性插值法
(a).插值原理:
为避免高次产生的龙格现象,采用分段插值,相邻两节点间的函数为一次线性函数, 图形为线段,在[a,b]间为折线,如图(2)。
图(2) 分段线性插值
(b).matlab 实现方法:
Matlab 中没有现成的函数,现编译如下: f unction Fenduan_liner(x,y) %对x,y 进行分段线性插值 %用虚线画出插值后的函数
m = length(x); %求插值个数 m1 = length(y); if m~=m1
error('y 的项数应与x 相同');
end %对参数的判断 hold on ; for ii = 1:m-1
plot([x(ii) x(ii+1)],[y(ii) y(ii+1)]); %画出线段 end
plot(x,y,'o'); %画出插值点 end
(c).方法缺陷:在节点处曲线不平滑。
保形插值(Hermite 插值) (a).插值原理:
针对分段插值法不光滑的问题,Hermite 插值引入插
值点的
导数。
表(2) Hermite 插值法 由于若
],[)(1b a C x f ∈且已知)(x f 函数表及导
数表,则存在唯一不超过12+n 次多项式)(12x H n +满足插值条件
⎩
⎨⎧==++'1212)()(i y x H y x H i n i
i n
),....,1,0(n i =
则,通过求解方程,可得出插值函数
其插值余项为 ),(b a ∈ξ且与x 有关。
(b).matlab 实现方法:
Matlab 中没有现成的函数,现编译如下: function yi = Hermite(x,y,der_y,xi)
%对x,y 进行Hermite 插值,其各节点的导数为der_y %返回值为带入矩阵xi 后的函数值 if length(x) == length(y)
if length(y) == length(der_y)
n
n
n y y y x f y y y x f x x x x ''''
1
1
010)
()
()()!
22()(2
1)22(x n f n n +++=
ωξ)(12x R n +