一维插值:
已知离散点上的数据集,即已知在点集X上对应的函数值Y,构造一个解析函数(其图形为一曲线)通过这些点,并能够求出这些点之间的值,这一过程称为一维插值。
MATLAB命令:yi=interp1(X, Y, xi, method)
一些个人经验说明:
①关于拟合参数的,X必须是向量,行向量或列向量均可,不可以是复数
②Y是向量或矩阵.但必须满足行数与length(X)相同即size(Y,1)==length (X)
③针对以上说明的例子
function tu
x=[5 1 2 20 14 21]'
y=rand(6,2)%按列计算的
xi=linspace(0,21,100);
yi=interp1(x,y,xi,'cubic')
plot(x,y,'o',xi,yi)
size(x)
size(y,1)
length(x)
结果
size(x)
6 1
size(y,1)
6
length(x)
6
该命令用指定的算法找出一个一元函数,然后以给出处的值。
xi可以是一个标量,也可以是一个向量,是向量时,必须单调,method可以下列方法之一:‘nearest’:最近邻点插值,直接完成计算;
‘spline’:三次样条函数插值;
‘linear’:线性插值(缺省方式),直接完成计算;
‘cubic’:三次函数插值;
对于[min{xi},max{xi}]外的值,MATLAB使用外推的方法计算数值。
%-- 09-4-1 下午8:38 --%
%已知数据
t=1900:10:1990;
p=[75.995,91.972,105.711,123.203,131.669,150.697,179.323,203.212,226.505,249.633];
x=1900:0.01:1990;
%使用不同的方法进行一维插值
yi_linear=interp1(t,p,x); %线性插值
yi_spline=interp1(t,p,x,'spline');%三次样条插值
yi_cubic=interp1(t,p,x,'cubic');%三次多项式插值
yi_v5cubic=interp1(t,p,x,'v5cubic');%matlab5中使用的三次多项式插值%绘制图像对比
subplot(2,1,1);
plot(t,p,'ko');
hold on;
plot(x,yi_linear,'g','LineWidth',1.5);grid on;
plot(x,yi_spline,'y','LineWidth',1.5);
title('Linear VS Spline ')
subplot(2,1,2);
plot(t,p,'ko');
hold on
plot(x,yi_cubic,'g','LineWidth',1.5);grid on;
plot(x,yi_v5cubic,'y','LineWidth',1);
title('Cubic VS V5cubic ');
%创建新图形窗口
figure
yi_nearest=interp1(t,p,x,'nearest');%最邻近插值法
plot(t,p,'ko');
hold on
plot(x,yi_nearest,'g','LineWidth',1.5);grid on;
title('Nearest Method');
%以下是根据拟合估计
msg=' year Cubic Linear Nearest Spline';
for i=0:8
n=10*i;
year=1905+n;
pop(i+1,1)=year;
pop(i+1,2)=yi_cubic((year-1900)/0.01+1);
pop(i+1,3)=yi_linear((year-1900)/0.01+1);
pop(i+1,4)=yi_nearest((year-1900)/0.01+1);
pop(i+1,5)=yi_spline((year-1900)/0.01+1);
end
P=round(pop);
disp(msg)
disp(P)
结果如图:
由此可见,各种插值的优劣,在速度上,Nearest最快,然后是Linear再到Cubic,最慢的是Spline.但是精度和曲线的平滑度恰好相反,Nearest甚至不连续~~
系统默认的是Linear
当然也可以用图形界面更易理解
附录:Matlab 样条工具箱(Spline ToolBox)【信息来源教师博客】
Matlab样条工具箱中的函数提供了样条的建立,操作,绘制等功能;
一. 样条函数的建立
第一步是建立一个样条函数,曲线或者曲面。
这里的样条函数,根据前缀,分为4类:cs* 三次样条
pp* 分段多项式样条,系数为t^n的系数
sp* B样条,系数为基函数B_n^i(t)的系数
rp* 有理B样条
二. 样条操作
样条操作包括:函数操作:求值,算术运算,求导求积分等等节点操作:主要是节点重数的调节,设定,修改等等
附:样条工具箱函数
1. 三次样条函数
csapi 插值生成三次样条函数
csape 生成给定约束条件下的三次样条函数
csaps 平滑生成三次样条函数
cscvn 生成一条内插参数的三次样条曲线
getcurve 动态生成三次样条曲线
2. 分段多项式样条函数
ppmak 生成分段多项式样条函数
ppual 计算在给定点处的分段多项式样条函数值
3. B样条函数
spmak 生成B样条函数
spcrv 生成均匀划分的B样条函数
spapi 插值生成B样条函数
spap2 用最小二乘法拟合生成B样条函数
spaps 对生成的B样条曲线进行光滑处理
spcol 生成B样条函数的配置矩阵
4. 有理样条函数
rpmak 生成有理样条函数
rsmak 生成有理样条函数
5. 样条操作函数
fnval 计算在给定点处的样条函数值
fmbrk 返回样条函数的某一部分(如断点或系数等)
fncmb 对样条函数进行算术运算
fn2fm 把一种形式的样条函数转化成另一种形式的样条函数fnder 求样条函数的微分(即求导数)
fndir 求样条函数的方向导数
fnint 求样条函数的积分
fnjmp 在间断点处求函数值
fnplt 画样条曲线图
fnrfn 在样条曲线中插入断点。
fntlr 生成tarylor系数或taylor多项式
6. 样条曲线端点和节点处理函数
augknt 在已知节点数组中添加一个或多个节点
aveknt 求出节点数组元素的平均值
brk2knt 增加节点数组中节点的重次
knt2brk 从节点数组中求得节点及其重次
knt2mlt 从节点数组中求得节点及其重次
sorted 求出节点数组的元素在另一节点数组中属于第几个分量aptknt 求出用于生成样条曲线的节点数组
newknt 对分段多项式样条函数进行重分布
optknt 求出用于内插的最优节点数组
chbpnt 求出用于生成样条曲线的合适节点数组。