- 2
- 0
- 约7.17千字
- 约 15页
- 2017-10-06 发布于重庆
- 举报
第六章 计算方法简介
第六章 计算方法简介
§1 数值逼近
插值
许多实际问题都要用函数来表示某种内在规律的数量关系,其中相当一部分函数虽然可能在某个区间上具有很好的性质(连续、光滑等),但没有函数的表达式信息,我们只能通过实验或者观测得到函数在一些点上的函数值,这是一张函数表.有些函数虽然有解析式,但由于计算复杂,使用不方便,我们通常也造一个函数表,例如三角函数表、平方根表等.
为了研究函数的性质,往往还需要求出不在函数表上的函数值,因此我们希望根据给定的函数表构造一个既能反映函数的性质、又便于计算的简单函数,用来近似.这就是插值所要研究的问题.
称为的插值函数.常用的插值函数是代数多项式或分段代数多项式.
Lagrange插值
1.1.1 方法介绍
Lagrange插值方法即,给定个插值节点以及对应的函数值信息,,利用次Lagrange插值多项式公式,则对插值区间内任意的函数值可通过下式近似求得:
.
其中称为插值基函数.可见,在Lagrange插值中,对应个节点的插值基函数一共有个,每个基函数是一个次多项式.
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 方法介绍
利用给出的节点信息使用多项式插值,一般认为插值多项式的次数越高,对原函数的近似越好,但事实并非如此.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)
Hermite插值
1.3.1 方法介绍
不少实际问题中不但要求在节点上函数值相等,还要求导数值也相等,甚至要求高阶导数值也相等,满足这一要求的插值多项式是Hermite插值多项式.以下只给出函数值与一阶导数值个数相等且已知的情形.
已知个插值节点及其对应的函数值和一阶导数值.则计算插值区域内任意的函数值的Hermite插值公式为
,
其中
.
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
h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2;
a=1/(x0(i)-x0(j))+a;
end
end
yy=yy+h*((
原创力文档

文档评论(0)