1.1 第二章 函 数 插 值 — Matlab 插值函数

2.2 Matlab 插值函数 Matlab 中的插值函数 interp1 % 分段插值(线性, Hermite ,样条) spline % 三次样条插值 更多插值方法见 Curve Fitting Toolbox csape % 可以指定边界条件的三次样条插值 ppval 、 fnval % 计算插值函数在给定点的值

3.3 interp1 yh=interp1(x,y,xh) x 为包含插值节点的 n 维向量 y 为函数在插值节点的值,也是 n 维向量 xh 为需要插值点,可以是一个点,也可以是向量 采用 分段线性插值 方法 一维函数插值

4.4 interp1 可指定插值方法: nearest , linear , spline , pchip 缺省为分段 线性插值,即 linear pchip 为分段三次 Hermite 插值 spline 为样条插值,等价于 spline 一维函数 插值: 指定插值方法 yh=interp1(x,y,xh,method)

5.5 interp1 举例 例 : 函数 f ( x ) = sin( x ) 在 [0,  ] 上的插值 xi=0:pi/5:pi; % 将插值区间分成若干等距小区间 y i =sin(xi); % 插值节点 处的函数值 x h =0:pi/30:pi; % 需要插值的点 y h = interp1 (xi,yi,xh ); % 根据插值函数求出的近似值 plot(xi,yi,.b , xh,yh,s- ) ; y h = interp1 (xi,yi,xh , nearst ); % 用邻近的值近似 y h = interp1 (xi,yi,xh , pchip ); % 三次 Hermite y h = interp1 (xi,yi,xh , spline ); % 三次样条 ex2f1.m

6.6 spline yh=spline(x,y,xh) 三次样条插值 x 为包含插值节点的 n 维向量 y 为函数在插值节点的值,也是 n 维向量 xh 为需要插值的点,可以是一个点,也可以是向量 采用 三次样条插值 方法

7.7 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)

8.8 spline 边界条件 若 x 与 y 的长度相等,则边界条件为 : ( not-a-knot ) 若 y 比 x 多 2 个分量,则采用 第一类边界条件 : 即要求插值函数在第二点和倒数第二个点处三阶连续可导

9.9 spline 举例 例 : 函数 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 4.1 3.0 x i =[ 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-); ex2f2.m

10.10 csape pp = csape(x,y,conds) 边界条件由 conds 给出 : complete :第一类边界条件(缺省边界条件) not-a-knot :非扭结 periodic :周期(第三类)边界条件 ‘ second ’ :第二类边界条件 variational :自然边界条件 可以指定边界条件的三次样条插值 csape 属于 Curve Fitting Toolbox 工具箱 f 0 ’ = y (1), f n ’ = y ( n +2) f 0 ’’ = y (1), f n ’’ = y ( n +2)

11.11 csape 举例 x i =[ 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= fn val (pp,xh ); % 通过插值求得的近似 值 plot(xh,yh, o- );