第二章 函 数 插 值 — Matlab插值函数
Matlab插值函数 Matlab 中的插值函数 interp1 % 分段插值(线性,Hermite,样条) spline % 三次样条插值 csape % 可以指定边界条件的三次样条插值 ppval、fnval % 计算插值函数在给定点的值 更多插值方法见 Curve Fitting Toolbox
interp1 一维函数插值 yh=interp1(x,y,xh) x 为包含插值节点的 n 维向量 y 为函数在插值节点的值,也是 n 维向量 xh 为需要插值点,可以是一个点,也可以是向量 采用分段线性插值方法
interp1 一维函数插值:指定插值方法 yh=interp1(x,y,xh,method) 可指定插值方法: 'nearest','linear','spline','pchip' 缺省为分段线性插值,即 'linear' 'pchip' 为分段三次 Hermite 插值 'spline' 为样条插值,等价于 spline
interp1 举例 例:函数 f(x) = sin(x) 在 [0, ] 上的插值 ex2f1.m xi=0:pi/5:pi; % 将插值区间分成若干等距小区间 yi=sin(xi); % 插值节点处的函数值 xh=0:pi/30:pi; % 需要插值的点 yh=interp1(xi,yi,xh); % 根据插值函数求出的近似值 plot(xi,yi,'.b', xh,yh,'s-'); yh=interp1(xi,yi,xh,'nearst'); % 用邻近的值近似 yh=interp1(xi,yi,xh,'pchip'); % 三次 Hermite yh=interp1(xi,yi,xh,'spline'); % 三次样条
spline 三次样条插值 yh=spline(x,y,xh) x 为包含插值节点的 n 维向量 y 为函数在插值节点的值,也是 n 维向量 采用三次样条插值方法
spline 三次样条插值(返回插值函数的分段表达式) pp=spline(x,y) 返回一个结构类型的数据 pp.breaks 插值节点 pp.coefs 插值分段多项式系数 pp.pieces 多项式个数 pp.order 分段多项式系数个数,即次数+1 pp.dim 插值维数 计算插值函数在给定点的值,可以使用 ppval 或 fnval yh=ppval(pp,xh) yh=fnval(pp,xh)
spline 边界条件 若 x 与 y 的长度相等,则边界条件为: (not-a-knot) 即要求插值函数在第二点和倒数第二个点处三阶连续可导 若 y 比 x 多 2 个分量,则采用第一类边界条件:
spline 举例 ex2f2.m 例 :函数 f (x) 定义在[27.7, 30] 上,插值节点及函数值如下 ,求三次样条插值 S(x) ,边界条件 S’(27.7)=3.0, S’(30)=-4.0 x 27.7 28 29 30 f(x) 4.1 4.3 3.0 xi=[27.7, 28, 29, 30]; % 插值节点 yi=[4.1, 4.3, 4.1, 3.0]; % 节点处的函数值 df0=3.0; dfn=-4.0; % 边界条件 pp=spline(xi,[df0, yi, dfn]); xh=27.7:0.1:30; % 需要插值的点 yh=ppval(pp,xh); % 通过插值求得的近似值 plot(xh,yh,'o-');
csape 可以指定边界条件的三次样条插值 pp = csape(x,y,conds) f0’=y(1), fn’=y(n+2) 'complete' :第一类边界条件(缺省边界条件) 'not-a-knot' :非扭结 'periodic' :周期(第三类)边界条件 ‘second’ :第二类边界条件 'variational' :自然边界条件 f0’=y(1), fn’=y(n+2) f0’’=y(1), fn’’=y(n+2) csape 属于 Curve Fitting Toolbox 工具箱
csape 举例 xi=[27.7, 28, 29, 30]; % 插值节点 yi=[4.1, 4.3, 4.1, 3.0]; % 节点处的函数值 df0=3.0; dfn=-4.0; % 边界条件 pp=csape(xi,[df0, yi, dfn]); xh=27.7:0.1:30; % 需要插值的点 yh=fnval(pp,xh); % 通过插值求得的近似值 plot(xh,yh,'o-');