一维插值

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

一维插值:

已知离散点上的数据集,即已知在点集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样条函数

相关文档
最新文档