常见插值法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 +

相关文档
最新文档