插值运算的matlab函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
插值运算的matlab函数
1一维插值函数
interp1()
命令格式:
yi=interp1(x,y,xi,’method’)
x为插值节点构成的向量,y为插值节点函数值构成的向量,yi是被插值点xi的插值结果,‘method‘是采用的插值方法,缺省时表示分线段性插值,’nearest‘为最邻近插值;’linear‘为分线段性插值;’spline’为三次样条插值;’pchip’为分段Hermite插值;’cubic’为分段Hermite插值
例子:画出y=sin(x)在区间[0 10]的曲线,并在曲线上插值节点xk=k,k=0,1 (10)
及函数值,画出分段线性插值折线图
x=0:10;
y=sin(x);
xi=0:0.25:10;
yi1=interp1(x,y,xi,'nearest');
yi2=interp1(x,y,xi,'linear');
yi3=interp1(x,y,xi,'spline');
yi4=interp1(x,y,xi,'pchip');
yi5=interp1(x,y,xi,'cubic');
subplot(1,5,1)
plot(x,y,'o',xi,yi1,'k--',xi,sin(xi),'k:');
title('\bfNearest');
subplot(1,5,2)
plot(x,y,'o',xi,yi2,'k--',xi,sin(xi),'k:');
title('\bfLinear');
subplot(1,5,3)
plot(x,y,'o',xi,yi3,'k--',xi,sin(xi),'k:');
title('\bfSpline');
subplot(1,5,4)
plot(x,y,'o',xi,yi4,'k--',xi,sin(xi),'k:');
title('\bfPchip');
subplot(1,5,1)
plot(x,y,'o',xi,yi5,'k--',xi,sin(xi),'k:');
title('\bfCubic');
spline()为三次样条函数
命令格式1:yi=spline(x,y,xi),意义等同于yi=interp1(x,y,xi,'spline')
命令格式2:pp=spline(x,y) ,输出三次样条函数分段表示的结构
pchip()命令格式与spline()完全相同
csape()为可输入边界条件的三次样条函数
命令格式:pp=csape(x,y,conds,valconds),x为插值节点构成的向量,y为插值节点函数值构成的向量;conds为边界类型,缺省为非扭结边界条件;valconds表示边界值。
边界类型:‘complete‘为给定边界条件的一阶导数;’not-a-knot‘为非扭
结;’periodic‘为周期边界条件;’second’为给定边界条件的二阶导数;’variational’为自由边界
例子:
(1)已知y=f(x)的函数表及端点条件S’’(x1)=S’’(x4)=0
X 1 2 4 5
F(x) 1 3 4 2
求三次样条插值函数S(x),并计算f(3),f(4.5)的近似值
clear;
clc;
x=[1 2 4 5];
y=[1 3 4 2];
s=csape(x,y,'variation')
value=fnval(s,[3 4.5])
再输入s.coefs可以得到三次样条插值分段表示的系数
注释:V = FNVAL(F,X) or FNVAL(X,F) provides the value atthe points in X of the function described by F .
(1)已知函数y=1/(25x^2+1)在[0 1]上的值如下表
X 0 0.25 0.5 0.75 1
Y 1 0.3903 0.1379 0.0664 0.0385
求三次样条插值函数S(x),使满足S’(0)=0,S’(1)=-0.074
x=[0:0.25:1];
y=1./(1+25*x.^2);
s=csape(x,y,'complete',[0 -0.074])
fnplt(s,'r')
s.coefs
2高维插值函数
interp2()二维插值函数
命令格式:zi=interp2(X,Y,Z,xi,yi,’method’)
X为插值节点构成的矩阵(X=e’*x,e=(1,1,…,1));Y为插值节点构成的矩阵
(Y=y’*e);Z为插值节点函数值构成的矩阵,Zij=f(Xi,Yj) ;‘method‘是采用的插值方法,缺省时表示分双线性插值,’nearest‘为最邻近插值;’linear‘为分线段性插值;’spline’为三次样条插值;’cubic’为双三次插值。
例子:利用函数peaks产生一个山顶曲面数据,通过插值做出更为紧密的山顶曲面
clear;
clc;
[x,y,z]=peaks(10);
subplot(1,2,1)
mesh(x,y,z),hold on;
plot3(x,y,z,'r*');
subplot(1,2,2)
[xi,yi]=meshgrid(-3:0.1:3,-3:0.1:3);
zi=interp2(x,y,z,xi,yi);
mesh(xi,yi,zi);
griddata()
当数据不完全,不能构造矩阵时,不能使用intperp2函数,而要采用griddata函数,采用三角形插值方法。
命令格式:zi=griddata(x,y,z,xi,yi,’method’)
X为插值节点构成的向量,y为插值节点构成的向量,z为插值节点函数值构成的向量,zi是被插值点的插值结果;‘method‘是采用的插值方法,缺省时表示分双线性插值,’nearest‘为最邻近插值;’linear‘三角形线性插值;’cubic’为三角形三次插值。
例子:
已知水道测量数据如表
X 129.0 140.0 108.5 88.0 185.5 195.0
Y 7.5 141.5 28.0 147.0 22.5 137.5
Z 1.22 2.44 1.83 2.44 1.83 2.44
X 105.5 157.5 107.5 77.0 81.0 162.0
Y 85.5 -6.5 -81.5 3.0 56.5 -66.5
Z 2.44 2.74 2.74 2.44 2.44 2.74
X 162.0 117.5
Y 84.0 -38.5
Z 1.22 2.74
clear;
clc;
x=[129.0 140.0 108.5 88.0 185.5195.0 105.5 157.5 107.5 77.0 81.0 162.0 162.0 117.5];
y=[7.5 141.5 28.0 147.0 22.5137.5 85.5 -6.5 -81.5 3.0 56.5 -66.584.0 -38.5];
z=[ 1.22 2.44 1.83 2.44 1.83 2.44 2.44 2.74 2.74 2.44 2.44 2.74 1.22 2.74];
xi=linspace(min(x),max(x),40);
yi=linspace(min(y),max(y),40);
[Xi Yi]=meshgrid(xi,yi);
[Xi,Yi,Zi]=griddata(x,y,z,Xi,Yi,'cubic');
subplot(1,2,1);
mesh(Xi,Yi,Zi);
subplot(1,2,2)
[c,h]=contour(Xi,Yi,Zi,[-1.1:-0.1:-2.9]);
clabel(c,h)
interp3()三维插值函数
命令格式:vi=interp3(X,Y,Z,V,xi,yi,zi,’method’)
X为插值节点构成的三维矩阵,Y插值节点构成的三维矩,Z为插值节点构成的三维矩阵,vi是被插值点(xi,yi,zi)的插值结果;‘method‘是采用的插值方法,缺省时表示分双线性插值,’nearest‘为最邻近插值;’linear‘三角形线性插值;’cubic’为三角形三次插值。
intern() n维插值函数
命令格式:vi=interpn(X1,X2,X3,…,V,y1,y2,y3,…,’method’)
‘method‘是采用的插值方法,缺省时表示分双线性插值,’nearest‘为最邻近插值;’linear‘三角形线性插值;’cubic’为三角形三次插值。