MATLAB自带插值函数

一、interp1

1、函数简介

   MATLAB中的插值函数为interp1,其调用格式为:yi= interp1(x,y,xi,'method'),

   其中x,y为初始插值点,xi为给定的插值点,yi为在被插值点xi处的插值结果。

  'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 
  'nearest'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'pchip'立方插值.缺省时表示线性插值
   注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。

2、用法示例

% 绘制散点图
clc
clear
close
tem=[2 2 0 2 2 2 2 3 5 7 9 10 11 12 12 11 10 9 7 7 6 6 5 5];
time=1:24;
plot(time,tem,'o')
hold on

% 第一种用法
xq=1:0.1:24;
vq=interp1(time,tem,xq);
plot(xq,vq) %绘制插值曲线
close
%第二种用法
% linear  线形(默认)
% nearest 临近点
% next    下一个
% previous 前一个
% pchip 保形分段三次插值
% cubic 
% v5cubic
% spline  三次方样条数据插值

% 线性
subplot(2,3,1)
xq=1:0.5:24;
vq=interp1(time,tem,xq,'linear');
plot(xq,vq,'*')
title('linear')

% 临近点
subplot(2,3,2)
xq=1:0.5:24;
vq=interp1(time,tem,xq,'nearest');
plot(xq,vq,'*')
title('nearest')

% next
subplot(2,3,3)
xq=1:0.5:24;
vq=interp1(time,tem,xq,'next');
plot(xq,vq,'*')
title('next')


% previous
subplot(2,3,4)
xq=1:0.5:24;
vq=interp1(time,tem,xq,'previous');
plot(xq,vq,'*')
title('previous')

% pchip
subplot(2,3,5)
xq=1:0.5:24;
vq=interp1(time,tem,xq,'pchip');
plot(xq,vq,'*')
title('pchip')

% spline
subplot(2,3,6)
xq=1:0.5:24;
vq=interp1(time,tem,xq,'spline');
plot(xq,vq,'*')
title('spline');
close
% 第三种 取出插值多项式的系数
%v = ppval(pp,xq) 在查询点 xq 处计算分段多项式 pp。
x=0:0.5:2*pi;
y=sin(x);
p=interp1(x,y,'spline','pp'); %% 返回各个分段插值多项式p的系数
yy=ppval(p,linspace(0,2*pi,101));
plot(x,y,'o',linspace(0,2*pi,101),yy);
% 第四种
x=0:0.5:2*pi;
y=sin(x);
xi=-1:0.2:7;
p=interp1(x,y,xi,'spline') ;%插值区间xi超出样本区间x自动外推
p=interp1(x,y,xi,'linear','extrap'); %加上'extrap'自动外推
plot(x,y,'o',xi,p);
p=interp1(x,y,xi,'next','extrap'); %加上'extrap'自动外推
p=interp1(x,y,xi,'nearest',9);%令超出范围的数值为9

二、spline三次样条插值

1、函数简介

MATLAB中的插值函数为interp1,其调用格式为:yi= spline(x,y,xi),

其中x,y为初始插值点,xi为给定的插值点,yi为在被插值点xi处的插值结果。

2、用法示例

%第一种 单条曲线插值
x=0:0.5:2*pi;
y=sin(x);
xx=0:0.1:2*pi;
yy=spline(x,y,xx);
plot(x,y,'o',xx,yy,'-')
close

% 第二种 多条曲线插值
x=0:0.5:2*pi;
y=[sin(x);cos(x)];
xx=0:0.1:2*pi;
yy=spline(x,y,xx);
plot(x,y,'o',xx,yy,'-')

% 第三种 取出插值多项式的系数
x=0:0.5:2*pi;
y=sin(x);
p=spline(x,y); %返回各个分段插值多项式p的系数
xx=0:0.1:2*pi;
yy=ppval(p,xx); %v = ppval(pp,xq) 在查询点 xx 处计算分段多项式 p。
plot(x,y,'o',xx,yy) 

三、pchip 分段三次 Hermite 插值多项式

1、函数简介

其函数使用方法跟以上的类似,我们这里直接上代码。

2、函数代码

%第一种
x=0:0.5:2*pi;
y=sin(x);
xx=0:0.1:2*pi;
yy=pchip(x,y,xx);
plot(x,y,'o',xx,yy,'-')
% 第二种 取出插值多项式的系数
x=0:0.5:2*pi;
y=sin(x);
p=pchip(x,y);
xx=0:0.1:2*pi;
yy=ppval(p,xx); %v = ppval(pp,xq) 在查询点 xx 处计算分段多项式 pp。
plot(x,y,'o',xx,yy)
发布了20 篇原创文章 · 获赞 31 · 访问量 632

猜你喜欢

转载自blog.csdn.net/STM89C56/article/details/105540938
今日推荐