Matlab线性插值

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

Matlab线性插值

已知离散点上的数据集,即已知在点集X上对应的函数值Y,构造一个解析函数(其图形为一曲线)通过这些点,并能够求出这些点之间的值,这一过程称为一维插值。

MATLAB命令:yi=interp1(X, Y, xi, method)

该命令用指定的算法找出一个一元函数,然后以给出xi处的值。xi可以是一个

标量,也可以是一个向量,是向量时,必须单调,method可以下列方法之一:

'nearest':最近邻点插值,直接完成计算;

'spline':三次样条函数插值;

'linear':线性插值(缺省方式),直接完成计算;

'cubic':三次函数插值;

对于[min{xi},max{xi}]外的值,MATLAB使用外推的方法计算数值。

下面是第一个例子:

表一室内温度随时间的变化

用三次样条插值、三次插值、线性插值、最近邻点插值分别求出表一中室内6:30—17:30之间每隔2h各点的近似温度,并对四种插值方法下的结果进行比较。

t=6:2:18;

T=[18.0 20.0 22.0 25.0 30.0 28.0 24.0];

tt=6.5:2:17.5;%使用不同的方法进行一维插值

yi_spline=interp1(t,T,tt,'spline') %三次样条插值

yi_cubic=interp1(t,T,tt,'cubic') %三次多项式插值

yi_linear=interp1(t,T,tt) %线性插值

yi_nearest=interp1(t,T,tt,'nearest') %最近邻点插值

%绘制图像进行对比

plot(t,T,'ko');

grid on;hold on;

plot(tt,yi_spline,'b',tt,yi_cubic,'g',tt,yi_linear,'r-',tt,yi_nearest ,'k');

legend('原始数据','三次样条插值','三次插值','线性插值','最近邻点插值',2);

xlabel('时间/t');ylabel('室内温度(T)/摄氏度');

title('四种插值方法的比较 ')

结果:

yi_spline =

18.5020 20.4986 22.5193 26.3775 30.2051 26.8178

yi_cubic =

18.5000 20.4812 22.6305 26.3086 29.8125 27.2344

yi_linear =

18.5000 20.5000 22.7500 26.2500 29.5000 27.0000

yi_nearest =

18 20 22 25 30 28

图片:

下面是第二个例子:

t=1900:10:1990;

p=[75.995,91.972,105.711,123.203,131.669,150.697,179.323,203.212,226.505,249.6 33];

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是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n 表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果第一个数字是2就是表示2行图。p是指你现在要把曲线画到figure中哪个图上,最后一个如果是1表示是从左到右第一个位置。

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,最慢的是Splic.但是精度和曲线的平滑度恰好相反,Nearest甚至不连续~~

系统默认的是Linear

相关文档
最新文档