精华内容
下载资源
问答
  • 主要介绍了matlab中二维插值函数interp2的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • MATLAB中的插值函数为interp1,其调用格式为:yi=interp1(x,y,xi,'method')其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量,'method'表示采用的插值方法,MATLAB提供的插值方法有几种:'method'是最...

    注:该文从链接地址http://blog.sciencenet.cn/blog-457143-679275.html转载。

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

    其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 'method'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'cubic'立方插值.缺省时表示线性插值

    注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。

    例如:在一 天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为

    12,9,9,10,18 ,24,28,27,25,20,18,15,13,

    推测中午12点(即13点)时的温度.

    x=0:2:24;

    y=[12   9   9   10   18  24   28   27   25   20  18  15  13];

    a=13;

    y1=interp1(x,y,a,'spline')

    结果为:  27.8725

    若要得到一天24小时的温度曲线,则:

    xi=0:1/3600:24;

    yi=interp1(x,y,xi, 'spline');

    plot(x,y,'o' ,xi,yi)

    126b7d727d6fb673a04cca4a94f95252.png

    命令1 interp1功能 一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。x:原始数据点Y:原始数据点xi:插值点Yi:插值点格式(1)yi = interp1(x,Y,xi)返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。参量x 指定数据Y 的点。若Y 为一矩阵,则按Y 的每列计算。yi 是阶数为length(xi)*size(Y,2)的输出矩阵。(2)yi = interp1(Y,xi)假定x=1:N,其中N 为向量Y 的长度,或者为矩阵Y 的行数。(3)yi = interp1(x,Y,xi,method)用指定的算法计算插值:’nearest’:最近邻点插值,直接完成计算;’linear’:线性插值(缺省方式),直接完成计算;’spline’:三次样条函数插值。对于该方法,命令interp1 调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline 用它们执行三次样条函数插值;’pchip’:分段三次Hermite 插值。对于该方法,命令interp1 调用函数pchip,用于对向量x 与y 执行分段三次内插值。该方法保留单调性与数据的外形;’cubic’:与’pchip’操作相同;’v5cubic’:在MATLAB 5.0 中的三次插值。对于超出x 范围的xi 的分量,使用方法’nearest’、’linear’、’v5cubic’的插值算法,相应地将返回NaN。对其他的方法,interp1 将对超出的分量执行外插值算法。(4)yi = interp1(x,Y,xi,method,'extrap')对于超出x 范围的xi 中的分量将执行特殊的外插值法extrap。(5)yi = interp1(x,Y,xi,method,extrapval)确定超出x 范围的xi 中的分量的外插值extrapval,其值通常取NaN 或0。例1

    >>x = 0:10; y = x.*sin(x);

    >>xx = 0:.25:10; yy = interp1(x,y,xx);

    >>plot(x,y,'kd',xx,yy)

    复制代码

    例2

    >> year = 1900:10:2010;

    >> product = [75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505

    249.633 256.344 267.893 ];

    >>p1995 = interp1(year,product,1995)

    >>x = 1900:1:2010;

    >>y = interp1(year,product,x,'pchip');

    >>plot(year,product,'o',x,y)

    复制代码

    插值结果为:

    p1995 =

    252.9885

    复制代码

    命令2 interp2功能 二维数据内插值(表格查找)格式(1)ZI = interp2(X,Y,Z,XI,YI)返回矩阵ZI,其元素包含对应于参量XI 与YI(可以是向量、或同型矩阵) 的元素, 即Zi(i,j) ←[Xi(i,j),yi(i,j)]。用户可以输入行向量和列向量Xi 与Yi,此时,输出向量Zi 与矩阵meshgrid(xi,yi)是同型的。同时取决于由输入矩阵X、Y 与Z 确定的二维函数Z=f(X,Y)。参量X 与Y 必须是单调的,且相同的划分格式,就像由命令meshgrid 生成的一样。若Xi与Yi 中有在X 与Y范围之外的点,则相应地返回nan(Not a Number)。(2)ZI = interp2(Z,XI,YI)缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一种情形进行计算。(3)ZI = interp2(Z,n)作n 次递归计算,在Z 的每两个元素之间插入它们的二维插值,这样,Z 的阶数将不断增加。interp2(Z)等价于interp2(z,1)。(4)ZI = interp2(X,Y,Z,XI,YI,method)用指定的算法method 计算二维插值:’linear’:双线性插值算法(缺省算法);’nearest’:最临近插值;’spline’:三次样条插值;’cubic’:双三次插值。例3:

    >>[X,Y] = meshgrid(-3:.25:3);

    >>Z = peaks(X,Y);

    >>[XI,YI] = meshgrid(-3:.125:3);

    >>ZZ = interp2(X,Y,Z,XI,YI);

    >>surfl(X,Y,Z);hold on;

    >>surfl(XI,YI,ZZ+15)

    >>axis([-3 3 -3 3 -5 20]);shading flat

    >>hold off

    复制代码

    例4:

    >>years = 1950:10:1990;

    >>service = 10:10:30;

    >>wage = [150.697 199.592 187.625

    179.323 195.072 250.287

    203.212 179.092 322.767

    226.505 153.706 426.730

    249.633 120.281 598.243];

    >>w = interp2(service,years,wage,15,1975)

    复制代码

    插值结果为:

    w =

    190.6288

    复制代码

    命令3 interp3功能 三维数据插值(查表)格式(1)VI = interp3(X,Y,Z,V,XI,YI,ZI)找出由参量X,Y,Z决定的三元函数V=V(X,Y,Z)在点(XI,YI,ZI)的值。参量XI,YI,ZI 是同型阵列或向量。若向量参量XI,YI,ZI 是不同长度,不同方向(行或列)的向量,这时输出参量VI 与Y1,Y2,Y3 为同型矩阵。其中Y1,Y2,Y3 为用命令meshgrid(XI,YI,ZI)生成的同型阵列。若插值点(XI,YI,ZI)中有位于点(X,Y,Z)之外的点,则相应地返回特殊变量值NaN。(2)VI = interp3(V,XI,YI,ZI)缺省地, X=1:N ,Y=1:M, Z=1:P ,其中,[M,N,P]=size(V),再按上面的情形计算。(3)VI = interp3(V,n)作n 次递归计算,在V 的每两个元素之间插入它们的三维插值。这样,V 的阶数将不断增加。interp3(V)等价于interp3(V,1)。(4)VI = interp3(......,method) %用指定的算法method 作插值计算:‘linear’:线性插值(缺省算法);‘cubic’:三次插值;‘spline’:三次样条插值;‘nearest’:最邻近插值。说明 在所有的算法中,都要求X,Y,Z 是单调且有相同的格点形式。当X,Y,Z 是等距且单调时,用算法’*linear’,’*cubic’,’*nearest’,可得到快速插值。例5

    >>[x,y,z,v] = flow(20);

    >>[xx,yy,zz] = meshgrid(.1:.25:10, -3:.25:3, -3:.25:3);

    >>vv = interp3(x,y,z,v,xx,yy,zz);

    >>slice(xx,yy,zz,vv,[6 9.5],[1 2],[-2 .2]); shading interp;colormap cool

    复制代码

    命令4 interpft功能 用快速Fourier 算法作一维插值格式(1)y = interpft(x,n)返回包含周期函数x 在重采样的n 个等距的点的插值y。若length(x)=m,且x 有采样间隔dx,则新的y 的采样间隔dy=dx*m/n。注意的是必须n≥m。若x 为一矩阵,则按x 的列进行计算。返回的矩阵y 有与x 相同的列数,但有n 行。(2)y = interpft(x,n,dim)沿着指定的方向dim 进行计算命令5 griddata功能 数据格点格式(1)ZI = griddata(x,y,z,XI,YI)用二元函数z=f(x,y)的曲面拟合有不规则的数据向量x,y,z。griddata 将返回曲面z 在点(XI,YI)处的插值。曲面总是经过这些数据点(x,y,z)的。输入参量(XI,YI)通常是规则的格点(像用命令meshgrid 生成的一样)。XI 可以是一行向量,这时XI 指定一有常数列向量的矩阵。类似地,YI 可以是一列向量,它指定一有常数行向量的矩阵。(2)[XI,YI,ZI] = griddata(x,y,z,xi,yi)返回的矩阵ZI 含义同上,同时,返回的矩阵XI,YI 是由行向量xi 与列向量yi 用命令meshgrid 生成的。(3)[XI,YI,ZI] = griddata(.......,method)用指定的算法method 计算:‘linear’:基于三角形的线性插值(缺省算法);‘cubic’: 基于三角形的三次插值;‘nearest’:最邻近插值法;‘v4’:MATLAB 4 中的griddata 算法。命令6 spline功能 三次样条数据插值格式(1)yy = spline(x,y,xx)对于给定的离散的测量数据x,y(称为断点),要寻找一个三项多项式y = p(x) ,以逼近每对数据(x,y)点间的曲线。过两点(xi, yi) 和(xi+1, yi+1) 只能确定一条直线,而通过一点的三次多项式曲线有无穷多条。为使通过中间断点的三次多项式曲线具有唯一性,要增加两个条件(因为三次多项式有4 个系数):a.三次多项式在点(xi, yi) 处有: p¢i(xi) = p¢i(xi) ;b.三次多项式在点(xi+1, yi+1) 处有: p¢i(xi+1) = pi¢(xi+1) ;c.p(x)在点(xi, yi) 处的斜率是连续的(为了使三次多项式具有良好的解析性,加上的条件);d.p(x)在点(xi, yi) 处的曲率是连续的;对于第一个和最后一个多项式,人为地规定如下条件:①. p¢1¢(x) = p¢2¢(x)②. p¢n¢(x) = p¢n¢-1(x)上述两个条件称为非结点(not-a-knot)条件。综合上述内容,可知对数据拟合的三次样条函数p(x)是一个分段的三次多项式:ï ïîï ïí죠££ ££ £=n n n+12 2 31 1 2p (x) x x xp (x) x x xp (x) x x xp(x)L L L L其中每段pi(x) 都是三次多项式。该命令用三次样条插值计算出由向量x 与y 确定的一元函数y=f(x)在点xx 处的值。若参量y 是一矩阵,则以y 的每一列和x 配对,再分别计算由它们确定的函数在点xx 处的值。则yy 是一阶数为length(xx)*size(y,2)的矩阵。(2)pp = spline(x,y)返回由向量x 与y 确定的分段样条多项式的系数矩阵pp,它可用于命令ppval、unmkpp 的计算。例6对离散地分布在y=exp(x)sin(x)函数曲线上的数据点进行样条插值计算:

    >>x = [0 2 4 5 8 12 12.8 17.2 19.9 20]; y = exp(x).*sin(x);

    >>xx = 0:.25:20;

    >>yy = spline(x,y,xx);

    >>plot(x,y,'o',xx,yy)

    复制代码

    命令7 interpn功能 n 维数据插值(查表)格式(1)VI = interpn(X1,X2,,,Xn,V,Y1,Y2,⋯,Yn) %返回由参量X1,X2,…,Xn,V 确定的n 元函数V=V(X1,X2,…,Xn)在点(Y1,Y2,…,Yn)处的插值。参量Y1,Y2,…,Yn 是同型的矩阵或向量。若Y1,Y2,…,Yn 是向量,则可以是不同长度,不同方向(行或列)的向量。它们将通过命令ndgrid生成同型的矩阵, 再作计算。若点(Y1,Y2,…,Yn) 中有位于点(X1,X2,…,Xn)之外的点,则相应地返回特殊变量NaN。VI = interpn(V,Y1,Y2,⋯,Yn) %缺省地,X1=1:size(V,1),X2=1:size(V,2),… ,Xn=1:size(V,n),再按上面的情形计算。VI = interpn(V,ntimes) %作ntimes 次递归计算,在V 的每两个元素之间插入它们的n 维插值。这样,V 的阶数将不断增加。interpn(V)等价于interpn(V, 1)。VI = interpn(⋯,method) %用指定的算法method 计算:‘linear’:线性插值(缺省算法);‘cubic’:三次插值;‘spline’:三次样条插值法;‘nearest’:最邻近插值算法。命令8 meshgrid功能 生成用于画三维图形的矩阵数据。格式 [X,Y] = meshgrid(x,y) 将由向量x,y(可以是不同方向的)指定的区域[min(x),max(x) , min(y) , max(y)] 用直线x=x(i),y=y(j) ( i=1,2,…,length(x) ,j=1,2,…,length(y))进行划分。这样,得到了length(x)*length(y)个点,这些点的横坐标用矩阵X 表示,X 的每个行向量与向量x 相同;这些点的纵坐标用矩阵Y 表示,Y 的每个列向量与向量y 相同。其中X,Y可用于计算二元函数z=f(x,y)与三维图形中xy 平面矩形定义域的划分或曲面作图。[X,Y] = meshgrid(x) %等价于[X,Y]=meshgrid(x,x)。[X,Y,Z] = meshgrid(x,y,z) %生成三维阵列X,Y,Z,用于计算三元函数v=f(x,y,z)或三维容积图。例7

    [X,Y] = meshgrid(1:3,10:14)

    复制代码

    计算结果为:

    X =

    1 2 3

    1 2 3

    1 2 3

    1 2 3

    1 2 3

    Y =

    10 10 10

    11 11 11

    12 12 12

    13 13 13

    14 14 14

    复制代码

    命令9 ndgrid功能 生成用于多维函数计算或多维插值用的阵列格式 [X1,X2,…,Xn] = ndgrid(x1,x2,…,xn) %把通过向量x1,x2,x3…,xn 指定的区域转换为数组x1,x2,x3,…,xn 。这样, 得到了 length(x1)*length(x2)*…*length(xn)个点,这些点的第一维坐标用矩阵X1 表示,X1 的每个第一维向量与向量x1 相同;这些点的第二维坐标用矩阵X2 表示,X2 的每个第二维向量与向量x2 相同;如此等等。其中X1,X2,…,Xn 可用于计算多元函数y=f(x1,x2,…,xn)以及多维插值命令用到的阵列。[X1,X2,…,Xn] = ndgrid(x) %等价于[X1,X2,…,Xn] = ndgrid(x,x,…,x)命令10 table1功能 一维查表格式 Y = table1(TAB,X0) %返回用表格矩阵TAB 中的行线性插值元素,对X0(TAB的第一列查找X0)进行线性插值得到的结果Y。矩阵TAB 是第一列包含关键值,而其他列包含数据的矩阵。X0 中的每一元素将相应地返回一线性插值行向量。矩阵TAB 的第一列必须是单调的。例8

    >>tab = [(1:4)' hilb(4)]

    >>y = table1(tab,[1 2.3 3.6 4])

    复制代码

    查表结果为:

    >>tab = [(1:4)' hilb(4)]

    >>y = table1(tab,[1 2.3 3.6 4])

    展开全文
  • MATLAB自带插值函数

    2020-04-15 18:25:21
    MATLAB中的插值函数为interp1,其调用格式为:yi= interp1(x,y,xi,'method'), 其中x,y为初始插值点,xi为给定的插值点,yi为在被插值点xi处的插值结果。 'method'表示采用的插值方法,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)

     

    展开全文
  • Matlab插值函数汇总及使用说明

    万次阅读 多人点赞 2018-09-12 19:44:52
    MATLAB中的插值函数为interp1,其调用格式为: yi= interp1(x,y,xi,'method')  其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插...

    转自:https://blog.csdn.net/yiqianmingyang/article/details/52311643

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

    其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 'method'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'cubic'立方插值.缺省时表示线性插值

        注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。

    例如:在一 天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为

                12,9,9,10,18 ,24,28,27,25,20,18,15,13,

    推测中午12点(即13点)时的温度.

    x=0:2:24;
           y=[12   9   9   10   18  24   28   27   25   20  18  15  13];

    a=13;
          y1=interp1(x,y,a,'spline')

    结果为:  27.8725

    若要得到一天24小时的温度曲线,则:

    xi=0:1/3600:24;

    yi=interp1(x,y,xi, 'spline');

    plot(x,y,'o' ,xi,yi)

    命令1 interp1
    功能 一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。
    x:原始数据点
    Y:原始数据点
    xi:插值点
    Yi:插值点
    格式
    (1)yi = interp1(x,Y,xi) 
    返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。参量x 指定数据Y 的点。
    若Y 为一矩阵,则按Y 的每列计算。yi 是阶数为length(xi)*size(Y,2)的输出矩阵。
    (2)yi = interp1(Y,xi) 
    假定x=1:N,其中N 为向量Y 的长度,或者为矩阵Y 的行数。
    (3)yi = interp1(x,Y,xi,method) 
    用指定的算法计算插值:
    ’nearest’:最近邻点插值,直接完成计算;
    ’linear’:线性插值(缺省方式),直接完成计算;
    ’spline’:三次样条函数插值。对于该方法,命令interp1 调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline 用它们执行三次样条函数插值;
    ’pchip’:分段三次Hermite 插值。对于该方法,命令interp1 调用函数pchip,用于对向量x 与y 执行分段三次内插值。该方法保留单调性与数据的外形;
    ’cubic’:与’pchip’操作相同;
    ’v5cubic’:在MATLAB 5.0 中的三次插值。
    对于超出x 范围的xi 的分量,使用方法’nearest’、’linear’、’v5cubic’的插值算法,相应地将返回NaN。对其他的方法,interp1 将对超出的分量执行外插值算法。
    (4)yi = interp1(x,Y,xi,method,'extrap') 
    对于超出x 范围的xi 中的分量将执行特殊的外插值法extrap。
    (5)yi = interp1(x,Y,xi,method,extrapval) 
    确定超出x 范围的xi 中的分量的外插值extrapval,其值通常取NaN 或0。
    例1 

    1.  

    2. >>x = 0:10; y = x.*sin(x);

    3. >>xx = 0:.25:10; yy = interp1(x,y,xx);

    4. >>plot(x,y,'kd',xx,yy)

    复制代码

    例2 

    1.  

    2. >> year = 1900:10:2010;

    3. >> product = [75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505

    4. 249.633 256.344 267.893 ];

    5. >>p1995 = interp1(year,product,1995)

    6. >>x = 1900:1:2010;

    7. >>y = interp1(year,product,x,'pchip');

    8. >>plot(year,product,'o',x,y)

    复制代码

    插值结果为: 

    1.  

    2. p1995 =

    3. 252.9885

    复制代码

    命令2 interp2
    功能 二维数据内插值(表格查找)
    格式 
    (1)ZI = interp2(X,Y,Z,XI,YI) 
    返回矩阵ZI,其元素包含对应于参量XI 与YI(可以是向量、或同型矩阵) 的元素, 即Zi(i,j) ←[Xi(i,j),yi(i,j)]。用户可以输入行向量和列向量Xi 与Yi,此时,输出向量Zi 与矩阵meshgrid(xi,yi)是同型的。同时取决于由输入矩阵X、Y 与Z 确定的二维函数Z=f(X,Y)。参量X 与Y 必须是单调的,且相同的划分格式,就像由命令meshgrid 生成的一样。若Xi与Yi 中有在X 与Y范围之外的点,则相应地返回nan(Not a Number)。
    (2)ZI = interp2(Z,XI,YI) 
    缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一种情形进行计算。
    (3)ZI = interp2(Z,n) 
    作n 次递归计算,在Z 的每两个元素之间插入它们的二维插值,这样,Z 的阶数将不断增加。interp2(Z)等价于interp2(z,1)。
    (4)ZI = interp2(X,Y,Z,XI,YI,method) 
    用指定的算法method 计算二维插值:
    ’linear’:双线性插值算法(缺省算法);
    ’nearest’:最临近插值;
    ’spline’:三次样条插值;
    ’cubic’:双三次插值。

    例3: 

    1.  

    2. >>[X,Y] = meshgrid(-3:.25:3);

    3. >>Z = peaks(X,Y);

    4. >>[XI,YI] = meshgrid(-3:.125:3);

    5. >>ZZ = interp2(X,Y,Z,XI,YI);

    6. >>surfl(X,Y,Z);hold on;

    7. >>surfl(XI,YI,ZZ+15)

    8. >>axis([-3 3 -3 3 -5 20]);shading flat

    9. >>hold off

    复制代码

    例4: 

    1.  

    2. >>years = 1950:10:1990;

    3. >>service = 10:10:30;

    4. >>wage = [150.697 199.592 187.625

    5. 179.323 195.072 250.287

    6. 203.212 179.092 322.767

    7. 226.505 153.706 426.730

    8. 249.633 120.281 598.243];

    9. >>w = interp2(service,years,wage,15,1975)

    复制代码

    插值结果为: 

    1.  

    2. w =

    3. 190.6288

    复制代码

    命令3 interp3
    功能 三维数据插值(查表)
    格式 
    (1)VI = interp3(X,Y,Z,V,XI,YI,ZI) 
    找出由参量X,Y,Z决定的三元函数V=V(X,Y,Z)在点(XI,YI,ZI)的值。参量XI,YI,ZI 是同型阵列或向量。若向量参量XI,YI,ZI 是不同长度,不同方向(行或列)的向量,这时输出参量VI 与Y1,Y2,Y3 为同型矩阵。其中Y1,Y2,Y3 为用命令meshgrid(XI,YI,ZI)生成的同型阵列。若插值点(XI,YI,ZI)中有位于点(X,Y,Z)之外的点,则相应地返回特殊变量值NaN。
    (2)VI = interp3(V,XI,YI,ZI) 
    缺省地, X=1:N ,Y=1:M, Z=1:P ,其中,[M,N,P]=size(V),再按上面的情形计算。
    (3)VI = interp3(V,n) 
    作n 次递归计算,在V 的每两个元素之间插入它们的三维插值。这样,V 的阶数将不断增加。interp3(V)等价于interp3(V,1)。
    (4)VI = interp3(......,method) %用指定的算法method 作插值计算:
    ‘linear’:线性插值(缺省算法);
    ‘cubic’:三次插值;
    ‘spline’:三次样条插值;
    ‘nearest’:最邻近插值。
    说明 在所有的算法中,都要求X,Y,Z 是单调且有相同的格点形式。当X,Y,Z 是等距且单调时,用算法’*linear’,’*cubic’,’*nearest’,可得到快速插值。

    例5 

    1.  

    2. >>[x,y,z,v] = flow(20);

    3. >>[xx,yy,zz] = meshgrid(.1:.25:10, -3:.25:3, -3:.25:3);

    4. >>vv = interp3(x,y,z,v,xx,yy,zz);

    5. >>slice(xx,yy,zz,vv,[6 9.5],[1 2],[-2 .2]); shading interp;colormap cool

    复制代码

    命令4 interpft
    功能 用快速Fourier 算法作一维插值
    格式 
    (1)y = interpft(x,n) 
    返回包含周期函数x 在重采样的n 个等距的点的插值y。若length(x)=m,且x 有采样间隔dx,则新的y 的采样间隔dy=dx*m/n。注意的是必须n≥m。若x 为一矩阵,则按x 的列进行计算。返回的矩阵y 有与x 相同的列数,但有n 行。
    (2)y = interpft(x,n,dim) 
    沿着指定的方向dim 进行计算

    命令5 griddata
    功能 数据格点
    格式 
    (1)ZI = griddata(x,y,z,XI,YI) 
    用二元函数z=f(x,y)的曲面拟合有不规则的数据向量x,y,z。griddata 将返回曲面z 在点(XI,YI)处的插值。曲面总是经过这些数据点(x,y,z)的。输入参量(XI,YI)通常是规则的格点(像用命令meshgrid 生成的一样)。XI 可以是一行向量,这时XI 指定一有常数列向量的矩阵。类似地,YI 可以是一列向量,它指定一有常数行向量的矩阵。
    (2)[XI,YI,ZI] = griddata(x,y,z,xi,yi) 
    返回的矩阵ZI 含义同上,同时,返回的矩阵XI,YI 是由行向量xi 与列向量yi 用命令meshgrid 生成的。
    (3)[XI,YI,ZI] = griddata(.......,method) 
    用指定的算法method 计算:
    ‘linear’:基于三角形的线性插值(缺省算法);
    ‘cubic’: 基于三角形的三次插值;
    ‘nearest’:最邻近插值法;
    ‘v4’:MATLAB 4 中的griddata 算法。

    命令6 spline
    功能 三次样条数据插值
    格式 
    (1)yy = spline(x,y,xx) 
    对于给定的离散的测量数据x,y(称为断点),要寻找一个三项多项式y = p(x) ,以逼近每对数据(x,y)点间的曲线。过两点(xi, yi) 和(xi+1, yi+1) 只能确定一条直线,而通过一点的三次多项式曲线有无穷多条。为使通过中间断点的三次多项式曲线具有唯一性,要增加两个条件(因为三次多项式有4 个系数):
    a.三次多项式在点(xi, yi) 处有: p¢i(xi) = p¢i(xi) ;
    b.三次多项式在点(xi+1, yi+1) 处有: p¢i(xi+1) = pi¢(xi+1) ;
    c.p(x)在点(xi, yi) 处的斜率是连续的(为了使三次多项式具有良好的解析性,加上的条件);
    d.p(x)在点(xi, yi) 处的曲率是连续的;
    对于第一个和最后一个多项式,人为地规定如下条件:
    ①. p¢1¢(x) = p¢2¢(x)
    ②. p¢n¢(x) = p¢n¢-1(x)
    上述两个条件称为非结点(not-a-knot)条件。综合上述内容,可知对数据拟合的三次样条函数p(x)是一个分段的三次多项式:
    ï ïî
    ï ïí
    ì
    £ £
    £ £
    £ £
    =
    n n n+1
    2 2 3
    1 1 2
    p (x) x x x
    p (x) x x x
    p (x) x x x
    p(x)
    L L L L
    其中每段pi(x) 都是三次多项式。
    该命令用三次样条插值计算出由向量x 与y 确定的一元函数y=f(x)在点xx 处的值。若参量y 是一矩阵,则以y 的每一列和x 配对,再分别计算由它们确定的函数在点xx 处的值。则yy 是一阶数为length(xx)*size(y,2)的矩阵。
    (2)pp = spline(x,y) 
    返回由向量x 与y 确定的分段样条多项式的系数矩阵pp,它可用于命令ppval、unmkpp 的计算。

    例6
    对离散地分布在y=exp(x)sin(x)函数曲线上的数据点进行样条插值计算: 

    1.  

    2. >>x = [0 2 4 5 8 12 12.8 17.2 19.9 20]; y = exp(x).*sin(x);

    3. >>xx = 0:.25:20;

    4. >>yy = spline(x,y,xx);

    5. >>plot(x,y,'o',xx,yy)

    复制代码

    命令7 interpn
    功能 n 维数据插值(查表)
    格式 
    (1)VI = interpn(X1,X2,,,Xn,V,Y1,Y2,⋯,Yn) %返回由参量X1,X2,…,Xn,V 确定的n 元函数V=V(X1,X2,…,Xn)在点(Y1,Y2,…,Yn)处的插值。参量Y1,Y2,…,Yn 是同型的矩阵或向量。若Y1,Y2,…,Yn 是向量,则可以
    是不同长度,不同方向(行或列)的向量。它们将通过命令ndgrid生成同型的矩阵, 再作计算。若点(Y1,Y2,…,Yn) 中有位于点(X1,X2,…,Xn)之外的点,则相应地返回特殊变量NaN。
    VI = interpn(V,Y1,Y2,⋯,Yn) %缺省地,X1=1:size(V,1),X2=1:size(V,2),… ,
    Xn=1:size(V,n),再按上面的情形计算。
    VI = interpn(V,ntimes) %作ntimes 次递归计算,在V 的每两个元素之间插入它们的n 维插值。这样,V 的阶数将不断增加。interpn(V)
    等价于interpn(V, 1)。
    VI = interpn(⋯,method) %用指定的算法method 计算:
    ‘linear’:线性插值(缺省算法);
    ‘cubic’:三次插值;
    ‘spline’:三次样条插值法;
    ‘nearest’:最邻近插值算法。

    命令8 meshgrid
    功能 生成用于画三维图形的矩阵数据。
    格式 [X,Y] = meshgrid(x,y) 将由向量x,y(可以是不同方向的)指定的区域[min(x),max(x) , min(y) , max(y)] 用直线x=x(i),y=y(j) ( i=1,2,…,length(x) ,j=1,2,…,length(y))进行划分。这样,得到了length(x)*length(y)个点,
    这些点的横坐标用矩阵X 表示,X 的每个行向量与向量x 相同;这些点的纵坐标用矩阵Y 表示,Y 的每个列向量与向量y 相同。其中X,Y可用于计算二元函数z=f(x,y)与三维图形中xy 平面矩形定义域的划分或
    曲面作图。
    [X,Y] = meshgrid(x) %等价于[X,Y]=meshgrid(x,x)。
    [X,Y,Z] = meshgrid(x,y,z) %生成三维阵列X,Y,Z,用于计算三元函数v=f(x,y,z)或三维容积图。

    例7 

    1. [X,Y] = meshgrid(1:3,10:14)

    复制代码

    计算结果为: 

    1. X =

    2. 1 2 3

    3. 1 2 3

    4. 1 2 3

    5. 1 2 3

    6. 1 2 3

    7. Y =

    8. 10 10 10

    9. 11 11 11

    10. 12 12 12

    11. 13 13 13

    12. 14 14 14

    复制代码

    命令9 ndgrid功能 生成用于多维函数计算或多维插值用的阵列
    格式 [X1,X2,…,Xn] = ndgrid(x1,x2,…,xn) %把通过向量x1,x2,x3…,xn 指定的区域转换为数组x1,x2,x3,…,xn 。这样, 得到了 length(x1)*length(x2)*…*length(xn)个点,这些点的第一维坐标用矩阵X1 表
    示,X1 的每个第一维向量与向量x1 相同;这些点的第二维坐标用矩阵X2 表示,X2 的每个第二维向量与向量x2 相同;如此等等。
    其中X1,X2,…,Xn 可用于计算多元函数y=f(x1,x2,…,xn)以及多维插值命令用到的阵列。
    [X1,X2,…,Xn] = ndgrid(x) %等价于[X1,X2,…,Xn] = ndgrid(x,x,…,x)

    命令10 table1
    功能 一维查表
    格式 Y = table1(TAB,X0) %返回用表格矩阵TAB 中的行线性插值元素,对X0(TAB的第一列查找X0)进行线性插值得到的结果Y。矩阵TAB 是第一列包含
    关键值,而其他列包含数据的矩阵。X0 中的每一元素将相应地返回一线性插值行向量。矩阵TAB 的第一列必须是单调的。

    例8 

    1.  

    2. >>tab = [(1:4)' hilb(4)]

    3. >>y = table1(tab,[1 2.3 3.6 4])

    复制代码

    查表结果为: 

    1.  

    2. >>tab = [(1:4)' hilb(4)]

    3. >>y = table1(tab,[1 2.3 3.6 4])

    展开全文
  • matlab插值函数

    2021-06-14 14:13:20
    %interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值 y1=interp1(x,y,xx); figure plot(x,y,'o',xx,y1,'r') title('分段线性插值') %临近插值 y2=interp1(x,y,xx,'nearest'); figure plot...

     插值

    x=0:2*pi;
    y=sin(x);
    xx=0:0.5:2*pi;
    
    %interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值
    y1=interp1(x,y,xx);
    figure
    plot(x,y,'o',xx,y1,'r')
    title('分段线性插值')
    
    %临近插值
    y2=interp1(x,y,xx,'nearest');
    figure
    plot(x,y,'o',xx,y2,'r');
    title('临近插值')
    
    %球面线性插值
    y3=interp1(x,y,xx,'spline');
    figure
    plot(x,y,'o',xx,y3,'r')
    title('球面插值')
    
    %三次多项式插值法
    y4=interp1(x,y,xx,'cubic');
    figure
    plot(x,y,'o',xx,y4,'r');
    title('三次多项式插值')

    方法

    说明

    连续性

    注释

    'linear'

    线性插值。在查询点插入的值基于各维中邻点网格点处数值的线性插值。这是默认插值方法。

    C0

     

    • 需要至少 2 个点。

    • 比最近邻点插值需要更多内存和计算时间。

     

    'nearest'

    最近邻点插值。在查询点插入的值是距样本网格点最近的值。

    不连续

     

    • 需要至少 2 个点。

    • 最低内存要求

    • 最快计算时间

     

    'next'

    下一个邻点插值。在查询点插入的值是下一个抽样网格点的值。

    不连续

     

    • 需要至少 2 个点。

    • 内存要求和计算时间与 'nearest' 相同

     

    'previous'

    上一个邻点插值。在查询点插入的值是上一个抽样网格点的值。

    不连续

     

    • 需要至少 2 个点。

    • 内存要求和计算时间与 'nearest' 相同

     

    'pchip'

    保形分段三次插值。在查询点插入的值基于邻点网格点处数值的保形分段三次插值。

    C1

     

    • 需要至少 4 个点。

    • 比 'linear' 需要更多内存和计算时间

     

    'cubic'

    用于 MATLAB® 5 的三次卷积。

    C1

     

    • 需要至少 3 个点。

    • 点必须均匀间隔

    • 对于不规则间隔的数据,此方法会回退到 'spline' 插值

    • 内存要求和计算时间与 'pchip' 相似

     

    'v5cubic'

    与 'cubic' 相同。

    C1

    'makima'

    修正 Akima 三次 Hermite 插值。在查询点插入的值基于次数最大为 3 的多项式的分段函数。为防过冲,已修正 Akima 公式。

    C1

     

    • 需要至少 2 个点。

    • 产生的波动比 'spline' 小,但不像 'pchip' 那样急剧变平

    • 计算成本高于 'pchip',但通常低于 'spline'

    • 内存要求与 'spline' 类似

     

    'spline'

    使用非结终止条件的样条插值。在查询点插入的值基于各维中邻点网格点处数值的三次插值。

    C2

     

    • 需要至少 4 个点。

    • 比 'pchip' 需要更多内存和计算时间

    展开全文
  • 展开查看详情1.1 第二章 函 数 插 值 — Matlab 插值函数2.2 Matlab 插值函数 Matlab 中的插值函数 interp1 % 分段插值(线性, Hermite ,样条) spline % 三次样条插值 更多插值方法见 Curve Fitting Toolbox csape ...
  • 使用 Matlab 的 interp3 函数,我的计算机由于矢量化 interp3 的内存需求高而挂起。 所以我决定写一个 mex 文件来按顺序插入数据。 速度增益高达 5 倍。 当 interp3 设置为线性时,此函数充当 matlab 的 interp3 ...
  • 已知一组数据点 编写一程序求解三次样 条插值函数 满足 并针对下面一组具体实验数据 0.25 0.3 0.39 0.45 0.53 0.5000 0.5477 0.6245 0.6708 0.7280 求解其中边界条件为 . 解 Matlab 计算程序为 clear clc x=[0.25 ...
  • matlab牛顿插值函数

    2021-04-18 11:07:41
    f [x1, x2,…xn+1](x x1)(x x2 )…(x xn ) 注:牛顿插值法中,用到了插值公式 %我们以二次牛顿插值公式为例解析牛顿...插值matlab计算方法_理学_高等教育_教育专区。计算方法 第五章 插值法 本...第二章 插值法及其mat...
  • MATLAB 牛顿插值函数

    千次阅读 2017-05-23 13:02:25
    x为插值点 M为插值次数function [y,R,A,C,L]=newdscg(X,Y,x,M) n=length(X);m=length(x); for t=1:m z=x(t);A=zeros(n,n);A(:,1)=Y';% A?第一列存Y的转置 s=0.0;p=1.0;q1=1.0;c1=1.0; for j=2:
  • Matlab程序Newton插值函数 精品资料 欢迎下载 编写程序构造区间上的以等分结点为插值结点的Newton插值公式,假设结点数为(包括两个端点),给定相应的函数值,插值... 解:Matlab计算程序为: clear clc f=( 请输入函...
  • MATLAB插值函数2012-08-27 16:11:48|分类: Matlab |举报|字号 订阅matlab中常用的差值函数:interp1 ,interplq ,interpft, spline, intep2, interp3, interpN.2012a中有interp1,interp1q, interpft, spline, pchip,...
  • Matlab中的插值函数

    2021-01-27 07:56:54
    该命令对数据点之间计算插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。x:原始数据点Y:原始数据点xi:插值点Yi:插值点格式(1)yi = interp1(x,Y,xi)返回插值向量yi,每一元素对应于参量...
  • Matlab实现拉格朗日插值函数

    万次阅读 多人点赞 2018-04-01 15:30:51
    function yy=lagrange(x1,y1,xx) %本程序为Lagrange1插值,其中x1,y1 %为插值节点和节点上的函数值,输出为插值点xx的函数值, %xx可以是向量。...% L向量用来存放插值函数 end u=sum(L.*y1); ...
  • matlab自带的插值函数interp1的几种插值方法

    万次阅读 多人点赞 2018-04-27 14:27:51
    插值法 插值法又称“内插法”,是利用函数f (x)在某区间中已知的若干点的函数值,作出适当的特定函数,在区间的其他点上用这特定函数的值作为函数f (x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称...
  • matlab interp插值函数

    千次阅读 2019-11-20 22:48:24
    什么是插值函数咧,我所理解的插值函数就是,有一些点但是直接plot出来的图,不大好看,可能是锯齿的散点的,但是你想要一个平滑...MATLAB中的插值函数为interp1,其调用格式为: yi= interp1(x,y,xi,'method') 其...
  • [X,Y,Z]=griddata(X1,Y1,u1,linspace(0,1)',linspace(-1,1),'v4');%插值 figure,contourf(X,Y,Z)
  • 数值分析中的拉格朗日插值法,牛顿插值法,三次样条插值法的matlab代码描述。
  • 以一种函数为例展示多种插值方法,包括分段线性插值、Newton插值、拉格朗日插值等等,并给出了函数文件及脚本文件
  • 2. MATLAB中的插值函数的使用示例 在MATLAB中,有一个函数可以直接使用,进行插值运算,在图像的几何变换中经常用到,主要在图像缩放、图像旋转中用到。本系列以操作图像缩放来介绍,而对于图像旋转,也是找到图像...
  • 对三次样条插值函数的m文件,下载可直接可用,用于matlab编程设计和课程作用 对三次样条插值函数的m文件,下载可直接可用,用于matlab编程设计和课程作用
  • matlab一维插值函数

    2021-04-20 12:57:26
    一、插值的定义 二、插值的方法 拉格朗日插值 分段线性插值 三次样条插值 三、用Matlab解插值问题 返回 二维插值 一、二维插值定义 二、网格节点插值法 ......x 用三次样条插值选取11个基点计算插值(ych) To MATLAB ...
  • 编写程序构造区间上的以等分结点为插值结点的Newton插值公式假设结点数为包括两个端点给定相应的函数值插值区间和等分的份数该程序能快速计算...不同的值并画出原函数的图像以及插值函数的图像观察当增大时的逼近效果....
  • 新乡学院数学与信息科学系 实验报告 实验项目名称 插值实验 所属课程名称 数学实验 实 验 类 型 综合...的插值方法的基本思想了解掌握用Matlab计算一维差值和二维插值的方法 实验原理 拉格朗日(Lagrange)插值 已知函数f
  • Matlab程序设计期中考察题目:基于Matlab的Lagrange插值函数的数值计算班级: 2009级数学与应用数学组长: 李洋洋组员: 王茜王**彬毕瑞日期: 2012 年 4 月 30 日摘要插值法是广泛应用于理论研究与工程实践的重要...
  • 已知一组数据点,编写一程序求解三次样条插值函数满足并针对下面一组具体实验数据求解,其中边界条件为.解:Matlab计算程序为:clearclcx=[0.25 0.3 0.39 0.45 0.53]y=[0.5000 0.5477 0.6245 0.6708 0.7280]n=length...
  • D、用指定的算法method计算二维插值: ’linear’ :双线性插值算法(缺省算法); ’nearest' :最临近插值; ’spline’ :三次样条插值; ’cubic’ :双三次插值。 E、如以下的运用: [xi,yi] = meshgrid(0:2:...
  • MATLAB实现Lagrange插值函数

    千次阅读 多人点赞 2020-08-31 09:56:53
    MATLAB实现Lagrange插值函数 首先我们绘制Lagrange基函数 首先给出一个Lagrange基函数比较复杂的设法: function y=lagrange(x0,y0,x) n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,575
精华内容 3,430
热门标签
关键字:

matlab计算插值函数

matlab 订阅