第六章 计算方法简介

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

94 第六章 计算方法简介

§1 数值逼近

1.1

插值

许多实际问题都要用函数)(x f y =来表示某种内在规律的数量关系,其中相当一部分函数虽然可能在某个区间上具有很好的性质(连续、光滑等),但没有函数的表达式信息,我们只能通过实验或者观测得到函数在一些点i x 上的函数值

)(i i x f y =),2,1,0(n i =,这是一张函数表.有些函数虽然有解析式,但由于计算

复杂,使用不方便,我们通常也造一个函数表,例如三角函数表、平方根表等.

为了研究函数的性质,往往还需要求出不在函数表上的函数值,因此我们希望根据给定的函数表构造一个既能反映函数)(x f y =的性质、又便于计算的简单函数

)(x P ,用)(x P 来近似)(x f .这就是插值所要研究的问题.

)(x P 称为)(x f 的插值函数.常用的插值函数是代数多项式或分段代数多项式.

1.1 Lagrange 插值 1.1.1 方法介绍

Lagrange 插值方法即,给定n 个插值节点以及对应的函数值信息,

)(i i x f y =),2,1,0(n i =,利用n 次Lagrange 插值多项式公式,则对插值区间内

任意x 的函数值y 可通过下式近似求得:

)()(1

1

∑≠==--=n

k

j j j

k j n k k x x x x y x y .

其中

∏≠=--n

k

j j j

k

j

x x

x x 1称为插值基函数.可见,在Lagrange 插值中,对应1+n 个节点的

插值基函数一共有1+n 个,每个基函数是一个n 次多项式. 1.1.2 MATLAB 实现 Lagrange.m

% y=lagrange(x0,y0,x),表示对x0,y0的节点信息使用Lagrange插值所得的多项式在x点的取值.

function y=lagrange(x0,y0,x)

n=length(x0);m=length(x);

for i=1:m

z=x(i);

s=0.0;

for k=1:n

p=1.0;

for j=1:n

if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j));

end

end

s=p*y0(k)+s;

end

y(i)=s;

end

>> x=[0.4:0.1:0.8];

>> clear

>> x=[0.4:0.1:0.8];

>> y=[-0.9 -0.6 -0.5 -0.35 -0.22];

>> lagrange(x,y,0.54)

ans =

-0.5572

1.2分段低次插值

1.2.1 方法介绍

95

96 利用给出的节点信息使用多项式插值,一般认为插值多项式的次数越高,对原

函数的近似越好,但事实并非如此.19世纪Runge给出了一个反例,说明了插值多项式次数高并不意味着近似程度好.

为了避免误差大的缺点,通常采用分段低次插值的做法.所谓分段低次插值,就是先把插值区间分成若干段,在每一段上进行低次多项式插值.

1.2.2 MATLAB实现

MATLAB自身提供了用于插值的内部函数interp1.该命令的使用方法为y=interp1(x,y,xi,’method’),其中(x,y)是已知的一组节点信息,xi表示插值函数在xi点取值,method表示所使用的插值方法,可选的方法有:

● nearest 线性最近项插值;

● linear 线性插值;

● spline 三次样条插值;

● cubic 三次插值.

例:正弦函数的插值.

>> x=[0:0.1:10];

>> y=sin(x);

>> xi=0:.25:10;

>> yi=interp1(x,y,xi);

>> plot(x,y,'o',xi,yi)

97

1.3 Hermite 插值 1.3.1 方法介绍

不少实际问题中不但要求在节点上函数值相等,还要求导数值也相等,甚至要求高阶导数值也相等,满足这一要求的插值多项式是Hermite 插值多项式.以下只给出函数值与一阶导数值个数相等且已知的情形.

已知n 个插值节点n x x x ,,,21 及其对应的函数值n y y y ,,,21 和一阶导数值

'

'2'1,,,n

y y y .则计算插值区域内任意x 的函数值y 的Hermite 插值公式为 ∑=+--=n

i i i i i i i y y y a x x h x y 1

'])2)([()(,

其中

≠=≠=-=--=n

j

i i j

i i n

i

j j j

i j i x x a x x x x h 12

1

1

,)(

.

1.3.2 MATLAB 实现 hermite.m

% 使用方法 y=hermite(x0,y0,y1,x),其中x0表示已知节点,

% y0表示已知节点上的函数值信息,y1表示已知节点上的函数导数值信息, % x 表示插值多项式在x 上取值. function y=hermite(x0,y0,y1,x) n=length(x0),m=length(x); for k=1:m yy=0.0; for i=1:n h=1.0; a=0.0; for j=1:n if j~=i

相关文档
最新文档