怎么用vc语言实现matlab meshgrid 函数中mesh函数

C语言实现MATLAB&6.5中M文件的方法(转)
摘要:本文着重描述了运用MATLAB命令将M文件翻译为C语言程序,并修改为可直接调用的C语言函数的方法,使用该方法所需要注意的方法局限性和MATLAB版本差异的影响。运用该方法将能够使C语言能直接使用MATLAB当中已经完成的数学计算功能,大大扩充了C语言的数学计算功能和开发效率。
  关键词:MATLAB;M文件;C语言接口
  众所周知,MATLAB是一个功能强大的数学软件,擅长于用矩阵运算完成各种数学功能。但是其程序需要在MATLAB环境下解释执行,效率不高。如果能将它强大的函数库用于C语言,利用C来编译执行,MATLAB将能发挥更大的作用。所以,MATLAB从5.0开始已经提供了与外部C/C++程序的应用程序接口,为利用C语言调用MATLAB的函数提供了可能。但是MATLAB的接口发展很快,到MATLAB
6.5已经提供了对VC 7.0的支持,同时对C的接口相对于5.X版本有了一定的改变。
  在MATLAB当中,我们利用M文件来实现函数,每一个M文件实现一个单独的功能,这一点和C语言当中的函数是相互对应的。所以,如果我们能将MATLAB中的M文件转化为C语言下的一个单个函数,就能实现MATLAB中相应的功能。
  实现方法
  整个过程可分为三个主要部分,用MATLAB将M文件翻译为C语言文件,从生成的C语言文件提取出有用语句,编写数据转换程序实现参数格式转换。整个过程最终将把M文件翻译成C语言当中的一个具有相同功能的函数,供其它的程序调用。
  本文用一个最简单的M文件来示例:
  文件名:messay.m
function c=messay()
c=sqrt(a)+sqrt(b);
  该m文件实现了计算
  1、将M文件编译为C语言文件
  为了将M文件翻译为C语言文件,需要进行一定的设置,这里假设编写C语言的环境为VC6.0,在MATLAB命令提示符下输入mex
-setup和mbuild -setup命令,在相应选项中选择Microsoft Visual C/C++即可。
  在MATLAB命令行中使用mcc命令将messay.m翻译为C代码。
mcc -m messay.m
  其中的参数-m代表mcc命令将把m文件翻译成C语言的代码。
  翻译命令将在messay.m所在的文件夹下生成三个C语言文件:messay.h,messay.c和messay_main.c。其中messay_main.c提供了main()函数;messay.h提供了整个程序的函数声明;messay.c包含了MATLAB生成的功能函数。这三个文件当中,messay.c中包含了我们所需要的数学函数。
  2、提取有用语句
  通过分析,发现由mcc生成的代码内部参数传送方式由MATLAB链接库规定,难以改动,因此需要提取有用的代码,并更改生成代码的参数传递方式。同时从生成代码的注释中可以看出,真正蕴含M文件功能实现的代码段都在Mmessay()函数当中(该函数名的默认构造方式为前缀M加上M文件的文件名),而其它的生成函数仅实现参数传递和标准化接口服务的功能。
  所以提取代码的具体方法是利用messay.c当中生成的static mxArray * Mmessay(int
nargout_)函数,对该函数进行修改,而其他的生成函数都可以忽略不用。原生成的Mmessay()代码如下:
static mxArray * Mmessay(int nargout_) {
 mexLocalFunctionTable save_local_function_table =
mclSetCurrentLocalFunctionTable(&_local_function_table_messay);
 mxArray * c = NULL;
 mxArray * b = NULL;
 mxArray * a = NULL;
 mlfAssign(&a, _mxarray0_);
 mlfAssign(&b, _mxarray1_);
 mlfAssign(&c, mclPlus(mlfSqrt(mclVv(a, "a")), mlfSqrt(mclVv(b,
 mclValidateOutput(c, 1, nargout_, "c", "messay");
 mxDestroyArray(a);
 mxDestroyArray(b);
 mclSetCurrentLocalFunctionTable(save_local_function_table_);
  在生成代码当中,mclSetCurrentLocalFunctionTable和mclSetCurrentLocalFunctionTable函数为两个外部函数,将参数传给外部,与其相关的部分都对C程序使用数学函数没有影响。最终实际有用并执行运算的只有一句:
mlfAssign(&c, mclPlus(mlfSqrt(mclVv(a, "a")),
mlfSqrt(mclVv(b, "b"))));
  实际上,由MATLAB翻译的C语句中,大部分的和实际计算有关的语句和自生成的函数都以mlf开头,所以寻找有用语句的简单方法就是直接寻找mlf为前缀的代码。
  3、参数格式转换
  应当指出,MATLAB所有的计算都是基于一种名为mxArray的数据结构之上的,所有的浮点数、向量或者是矩阵在MATLAB当中都是通过mxArray结构来进行存储和传递的。当然,MATLAB所提供的所有数学函数也都是基于这样一种数据结构进行运算的。所以,要使用MATLAB的生成代码,就必须将C语言当中常用的浮点数和整数转换为mxArray结构。
  本例中利用MATLAB函数mxArray *mlfScalar(double v)和函数double
*mxGetPr(mxArray
*)来实现参数格式转换。函数mlfScalar()将double型变量存入一个新建的mxArray结构中,并返回指针,而函数mxGetPr()将mxArray结构保存的实数的实部取出。至于其它参数转换方法可参看参考文献3中的相关部分。
  最终可以编写这样一个利用了MATLAB数学函数并实现计算的函数:
double Mmessay(double ina, double inb) {
 mxArray *a,*b,*c; //三个用于MATLAB数学函数计算的参数
 double * //计算结果变量
 a=mlfScalar((double)ina); //利用mlfScalar()进行类型转换
 b=mlfScalar((double)inb);
 mlfAssign(&c, mclPlus(mlfSqrt(mclVv(a, "a")), mlfSqrt(mclVv(b,
 outc=mxGetPr(c); //c获得结果的实部,即结果
 mxDestroyArray(a); //释放空间
 mxDestroyArray(b);
 mxDestroyArray(c);
 return *
  到此,整个翻译过程完成,但是还不能直接调用。在这个函数当中运用到了MATLAB的数学库函数mlfSqrt()、mlcPlus()和数据转换函数mlfScalar()、mxGetPr()。由于这些函数是固化在链接库当中的,为了连接执行,必须加入几个库文件和几个静态链接库lib文件。所需要的库文件为mcc命令生成的messay.c文件当中所加入的库文件,一般为libmatlb.h,而需要加入的静态链接库文件如下:
libmat.lib,libmatlb.lib,libmex.lib,libmx.lib
  如果没有以上文件,可以用VC的lib命令将MATLAB相应的def文件转化为lib文件,转化格式为lib
/def:filename.def /machine:ix86 /out:filename.lib。
  方法的局限
  使用本文所用的方法可以将M文件翻译为C语言的函数,但是要受到两个因素的制约。
  1、功能的实现受到MATLAB C函数库的限制
  这种翻译的机制是由MATLAB提供的,mcc命令能直接翻译的函数也仅局限于MATLAB原有的函数。因为这些函数已经被MATLAB6.5编译好,一般以mlf为前缀,存于动态链接库当中并可被C语言直接调用。这些函数在参考文献4中可以查到。而超出了这个范围的函数,并在M文件当中被嵌套使用,在用mcc进行翻译的时候,mcc将在函数名前加上前缀mlf,并进一步翻译该函数。
  但是,这种翻译受到MATLAB参数传递的限制,而不能直接调用,在编译时会出现找不到相应的外部函数的错误。解决办法是手动将所有被翻译的函数进行参数传递方式的调整。如果M文件当中包含的函数被嵌套翻译的层数很深,这样的工作量是巨大而且不可接受的。
同时很多工具箱当中定义的函数也是不能使用这种方法进行翻译的。MATLAB的工具箱更新速度很快,而相应的MATLAB
C的函数库有一定滞后,导致很多最新的工具箱当中的函数是不能被翻译的。
  2、翻译本身存在的限制
  因为这种翻译是遵守C语言要求的,因而对于内存分配要求和C语言不同的函数和一些关于图形显示类型的函数(包括大量的GUI相关函数)也不能被正确的翻译。例如mash.m和step.m这两个较常用的MATLAB函数,由于上述的限制,就不能用本方法进行翻译。
  对于上述的问题,可以利用在C程序当中运用MATLAB引擎的方法动态调用MATLAB的库函数,基本上可以解决上述所有的函数不能被正确翻译和图形显示的问题。但是,运用MATLAB引擎的方法需要利用ActiveX的自动化服务器,在运行的时候程序会在后台执行一个MATLAB的线程而不能完全脱离MATLAB的环境,也就意味着在纯C的环境下是不能运用的,必须要先安装MATLAB并能够在运行时支持多线程工作。具体的方法可以参阅参考文献3。
  MATLAB 5.X和MATLAB 6.5的区别
  对于本方法有以下几点区别需要注意:
  (1)程序当中所需的库文件由5.X版本的matrix.h、mcc.h、matlab.h改为mex.h、libmatlb.h、libmatlbm.h等库文件。
  (2)程序所需要加入的静态链接库文件由5.X需要的libmmfile.lib、libmatlb.lib、libmcc.lib、libmx.lib改为libmat.lib、libmatlb.lib、libmex.lib、libmx.lib四个文件。
  (3)API函数改动很多,虽然数学函数库即mlf前缀的函数少有改动,但是关于变量建立,内存管理和数据类型转换的函数发生改变,即很多原mcc前缀的函数改为用mx为前缀的函数代替,使得很多5.X翻译的C程序代码不能在6.5相应的库下运行通过。
  (4)6.5版本中直接增加了在VC环境下对M文件的支持。在执行mbuild
-setup的配置命令后,MATLAB在VC中提供了MATLAB Project
Wizard,可在VC环境下直接建立MATLAB的工程来翻译M文件。但是这种翻译方法在遇到未定义函数嵌套时将错误的把函数名翻译为变量名,而mcc命令将进一步翻译内部嵌套的函数
Site:/oliver_yin/articles/2833.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
另一种方法:使用Matcom来转换
可以参考:
MATCOM是MathWorks公司开发的为MATLAB中的M文件进行高效解释和调试的集成开发环境。MATCOM编译M文件,先将M文件按照与MATCOM的cpp库的对应关系,翻译为cpp源代码,然后用C编译器将cpp文件编译成相应的exe或dll文件。
  用MATCOM方式,生成的代码可读性好,支持图形函数,支持M文件编译过程中的文件嵌套情况,可脱离MATLAB环境;缺陷为待编译的M文件不能涉及MATLAB的内部类。
具体的使用可以参考:
使用matcom matlab与mfc的混编
Matcom是mathTools公司推出的最早的Matlab到C++的编译器。后来,由于Mathtools被Matlab公司收购,Mtacom对Matlab
5.3以后的版本就没有推出新的版本。相比Matlab自带的编译器Compiler,用Matcom转化代码要简单和方便得多;且对于采用C++的工程和研究人员来说Matcom的C++矩阵库(Matrix
Lib)依然有非常大的利用价值。
通过Matcom连接M函数这类脚本语言或者高级算法语言有三种办法:—是将M文件编译成C++代码,然后在C++工程中插入这些代码,最后编译成为独立的可执行程序;二是直接在C++程序中使用Matcom提供的Matrix,方法与一相似,但常用。最后一种是利用MIDEVA直接生成EXE文件,然后在VC中通过shell调用,方法简单,但通用性差,仅适用于VC中调用Matlab实现图形显示的场合。
Mideva软件平台本身的功能相当强大,提供近千个Matlab的基本功能函数,通过必要的设置,就可以直接实现与C++的混合编程,而不必再依赖Matlab;同时,Mediva还提供编译转换功能,能够将Matlab函数或编写的Matlab程序转换为C++形式的DLL,从而实现脱离Matlab环境对Matlab函数和过程的有效调用,这样就有可能实现对Matlab强大的工具箱函数的利用。
  Mideva的缺点是C++与Matlab混合编写的应用软件必须携带必要的DLL,从而增大了软件的体积(约4M),同时也不能对所有的Matlab函数提供支持,例如采用类库进行设计的部分函数。
1. 目前,Matcom的最高版本为4.5。首先安装Matcom 4.5,如下图
安装Matcom前要已求安装VC++6.0。在安装过程中出现选择编译器对话框,选择”是” 如下图:
<img TITLE="" src="/blog7style/images/common/sg_trans.gif" real_src ="/bmiddle/49dd165c"
ALT="C语言实现MATLAB&6.5中M文件的方法(转)" />
出现选择是否安装了Matlab时,如果本机上安装的是Matlab
5.3版本,可以选择“是(Y)”确认,因为Matcom4.5不支持Matlab
6.1以上的版本。其他选项采用默认设置。Matcom可以独立于Matlab运行,但需要外部的C++编译器,指定Matlab的位置是为了让编译文件中需要的一些系统函数找到路径用的。
安装完成后,在“lib”下,可以找到使用MatcomC++矩阵库(Matrix
Lib)的头文件matlib.h和v4501v.lib文件,在Windows操作系统目录的system32目录下,可以找到使用MatcomC++矩阵库的动态链接库文件v4501v.dll。启动界面MIDEVA,如下图。MIDEVA集成开发环境包括命令行窗口、变量列表窗口、命令列表窗口和编译链接信息窗口等几部分,并有详细的帮助文档。
<img TITLE="" src="/blog7style/images/common/sg_trans.gif" real_src ="/bmiddle/49dd&690"
ALT="C语言实现MATLAB&6.5中M文件的方法(转)" />
Matcom命令输入方法与Matlab相同。如果安装在中文版操作系统时,输入命令前加一空格,否则显示为乱码。
1、启动MIDEVA ,File-&New,新建如下test1.m文件:
x=1:0.1:10; y=sin(x); plot(x,y);
将文件保存&&
m文件保存的默认位置为:matcom安装目录C:\matcom45\samples,生成的C++文件保存的默认位置为:matcom安装目录C:\matcom45\samples\Debug,在该目录下将会产生test1.h、test1.cpp、test1.r
、matlib.pch文件。 2. 在VC中用MFC Wizard(exe)创建一个基于对话框名为matcom01的工程。
在面板上添加一个ID为IDC_BUTTON1按扭。
3、将C:\matcom45\lib\下的matlib.h
和v4501v.lib文件和C:\matcom45\debug下的test1.h文件拷贝到工程目录下,然后在VC中将库文件和头文件加入到工程中:工程-&添加工程-&Files,选择刚刚拷贝到matcom01目录下的matlib.h
、v4501v和test1.h文件
4、在ExamleDlg.cpp中加入如下代码: #include "matlib.h“ #include "Test1.h“
CExamleDlg::OnButton1()中分别添加一个初始化类库调用函数”initM(MATCOM_VERSION)”和一个结束类库调用函数”exitM()”
注:test01.cpp中含有要在vc中添加的代码。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
另外参考:
如何把Matlab中的m文件转化成C语言代码
今天应同学的要求,折腾了一下如题所示的转化,过程略显复杂,但最终结果还是可以,即:现在一打开VC6.0直接会显示一个由M文件向Cpp转化的小工具,如下图所示:
&&&&&&&&&&&&&&&&&&&&&&&
现在把折腾的过程总结如下:
1.已经下载程序matcom
v4.5,如果未下载可到地址中下载;
2.机器已经安装Matlab
7.0或以上版本;
3.机器已经安装了软件Microsoft Visual C++
操作步骤:
1.安装matcom v4.5
注意:安装之前,首先在matlab的安装目录下手动建立文件夹:\MATLAB701\bin\toolbox\matlab\general.
2.第一次运行matcom v4.5
运行MATcom4.5自动搜索VC编译器并提示用户是否安装,之后提示是否安装有MATLAB,回答安装后,如果没有建立文件夹\MATLAB701\bin\toolbox\matlab\general,则发生错误。手动建立1.中所说的文件夹,再重新启动MATcom4.5即可。
3.启动MATLAB,
运行以下命令:
cd c:\matcom45& % MATcom的安装路径
diary mpath
matlabpath
4.复制文件
MATcom4.5\bin\usertype.dat文件到Visual C++
6.0\Common\MSDev98\bin目录。
5.Visual C++ 6.0中的操作
&&&&运行Visual
C++,并从菜单中选择Tools-&Customize-&Add-ins and Macro
Files,选择Browse,改变文件类型为Add-in(.dll),选择%MATcom45%\bin\mvcide.dll文件,确定。
补充如果你安装的VC6.0为中文版,则相应的路径为工具\定制\附加项...
6.在Visual C++的开发环境中可以看到一个Visual
MATcom工具条,安装成功。
感谢原作者。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Matlab 之meshgrid, interp, griddata 用法和实例(转)
关于MATLAB&插值(Interpolation)
matlab二维插值--interp2与griddata from
1. meshgrid
meshgrid用于从数组a和b产生网格。生成的网格矩阵A和B大小是相同的。它也可以是更高维的。
[A,B]=Meshgrid(a,b)生成size(b)Xsize(a)大小的矩阵A和B。它相当于a从一行重复增加到size(b)行,把b转置成一列再重复增加到size(a)列。因此命令等效于:
A=ones(size(b))*a;B=b'*ones(size(a))
如下所示:
&& a=[1:2]
&& b=[3:5]
&& [A,B]=meshgrid(a,b)
&& [B,A]=meshgrid(b,a)
3&4&53&4&5
1&1&12&2&2
interp1&&一维数据插值函数
一维数据插值。该函数对数据点之间计算内插值,它找出一元函数f(x)在中间点的数值,其中函数表达式由所给数据决定。
yi=interp1(x,Y,xi):返回插值向量yi,每一元素对应于参量xi,同时由向量X与Y的内插值决定。参量x 指定数据Y的点。若Y为一矩阵,则按Y的每列计算。yi是阶数为length(xi)*size(Y,2)的输出矩阵。
yi=interp1(Y,xi):假定x=1:N,其中N为向量Y的长度,或者为矩阵Y的行数。
yi=interp1(x,Y,xi,method):用指定的算法计算插值。nearest为最近邻点插值,直接完成计算;linear为线性插值(默认方式),直接完成计算;spline为三次样条函数插值。
yi=interp1(x,Y,xi,method,'extrap'):对于超出x范围的xi中的分量将执行特殊的外插值法extrap。
yi=interp1(x,Y,xi,method,extrapval):确定超出x范围的xi中的分量的外插值extrapval,其值通常取NaN或0。
interp2函数&&二维数据内插值
完成二维的数据插值。
ZI=interp2(X,Y,Z,XI,YI):返回矩阵ZI,其元素包含对应于参量XI与YI(可以是向量、或同型矩阵)的元素。用户可以输入行向量和列向量Xi与Yi,此时,输出向量Zi与矩阵meshgrid(xi,yi)是同型的。同时取决于由输入矩阵X、Y与Z确定的二维函数Z=f(X,Y)。
ZI=interp2(Z,XI,YI):默认地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一种情形进行计算。
ZI=interp2(Z,n):作n次递归计算,在Z的每两个元素之间插入它们的二维插值,这样,Z的阶数将不断增加。interp2(Z)等价于interp2(z,1)。
ZI=interp2(X,Y,Z,XI,YI,method):用指定的算法method计算二维插值。linear为双线性插值算法(默认算法),nearest为最临近插值,spline为三次样条插值,cubic为双三次插值。
interp3函数&&三维数据插值
完成三维数据插值。
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。
VI=interp3(V,XI,YI,ZI):默认地,X=1:N,Y=1:M,Z=1:P,其中,[M,N,P]=size(V),再按上面的情形计算。
VI=interp3(V,n):作n次递归计算,在V的每两个元素之间插入它们的三维插值。这样,V的阶数将不断增加。interp3(V)等价于interp3(V,1)。
VI=interp3(...,method):用指定的算法method做插值计算。linear为线性插值(默认算法),cubic为三次插值,spline为三次样条插值,nearest为最邻近插值。
interpn函数&&n维数据插值
完成n维数据插值。
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是向量,则可以是不同长度,不同方向(行或列)的向量。
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)。
3. 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 算法。
4.&matlab二维插值--interp2与griddata
二者均是常用的二维差值方法,两者的区别是,interp2的插值数据必须是矩形域,即已知数据点(x,y)组成规则的矩阵,或称之为栅格,可使用meshgid生成。而griddata函数的已知数据点(X,Y)不要求规则排列,特别是对试验中随机没有规律采取的数据进行插值具有很好的效果。griddata(X,Y,XI,YI,'v4') v4是一种插值算法,没有具体的名字,原文称为&MATLAB 4 griddata method&,是一种很圆滑的差值算法,效果不错。X和Y提供的已知数据点,XI和YI是需要插值的数据点,一般使用meshgrid生成,当然也可以其他数据,但是那样绘图的时候就比较麻烦,不能使用mesh等,只能使用trimesh。
示例如下:
a=[3 3 1.53003 27 0.42105 17 0.59809 9 0.590013 25 0.447015 15 117 5 0.383021 21 0.310025 13 0.283027 3 0.282027 27 0.1200];x=a(:,1);y=a(:,2);z=a(:,3);xtemp=linspace(min(x),max(x),100);ytemp=linspace(min(y),max(y),100);[X,Y]=meshgrid(xtemp,ytemp);Z=griddata(x,y,z,X,Y,'v4');surf(X,Y,Z)shading interp
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
matlab的interp2二维数据内插值函数
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)。Matlab中文论坛
(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)。
Matlab中文论坛
(4)ZI = interp2(X,Y,Z,XI,YI,method)用指定的算法method 计算二维插值:&linear&:双线性插值算法(缺省算法);&nearest&:最临近插值;&spline&:三次样条插值;&cubic&:双三次插值。例11. &&[X,Y] = meshgrid(-3:.25:3);2. &&Z = peaks(X,Y);3. &&[XI,YI] = meshgrid(-3:.125:3);4. &&ZZ = interp2(X,Y,Z,XI,YI);5. &&surfl(X,Y,Z);6. &&surfl(XI,YI,ZZ+15)7. &&axis([-3 3 -3 3 -5 20]);shading flat《Simulink与信号处理》8. &&hold off代码例21. &&years = 0;2. &&service = 10:10:30;3. &&wage = [150.697 199.592 187.6254. 179.323 195.072 250.2875. 203.212 179.092 322.7676. 226.505 153.706 426.7. 249.633 120.281 598.243];8. &&w = interp2(service,years,wage,15,1975)代码插值结果为:1. w =2. 190.6288
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
现在很多协议都用xml来设计,方便扩展,也具有兼容性.现在流行的json和gson就不说了,应用比较多的tinyxml也是很不错的.下面介绍下tinyxml的用法和实例.
使用tinyxml,需要在工程中包含其源码,并在头文件建立引用关系.下面是一个简单的例子,按照层次关系打印出xml文件. 代码如下: #include &st ...
griddata Data gridding SyntaxZI = griddata(x,y,z,XI,YI) [XI,YI,ZI] = griddata(x,y,z,XI,YI) [...] = griddata(...,method) [...] = griddata(...,method,options) DescriptionZI = griddat ...
meshgrid用于从数组a和b产生网格.生成的网格矩阵A和B大小是相同的.它也可以是更高维的.这里的大小指的是,size()函数的大小,size()函数返回的是一个向量, 那么size(A) = size(B). [A,B]=Meshgrid(a,b)生成size(b)Xsize(a)大小的矩阵A和B.它相当于a从一行重复增加到size(b)行,把b转置成 ...
List的用法 List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示. 表1 List接口定义的常用方法及功能 从表1可以看出,List接口提供的适合于自身的常 ...
meshgrid是MATLAB中用于生成网格采样点的函数.在使用MATLAB进行3-D图形绘制方面有着广泛的应用. 函数功能 生成绘制3-D图形所需的网格数据.在计算机中进行绘图操作时, 往往需要一些采样点,然后根据这些采样点来绘制出整个图形.在进行3-D绘图操作时,涉及到x.y.z三组数据,而x.y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标 ...
原网址:http://blog.csdn.net/china_skag/article/details/6727PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像.这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误.有两种语法,第二种比较次要但却是第一种的有用的扩展.f ...
PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像.这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误.有两种语法,第二种比较次要但却是第一种的有用的扩展. foreach (array_expression as $value) statement foreach ( ...
详细解释:help meshgrid meshgrid用于从数组a和b产生网格.生成的网格矩阵A和B大小是相同的.它也可以是更高维的. [A,B]=Meshgrid(a,b) 生成size(b)Xsize(a)大小的矩阵A和B.它相当于a从一行重复增加到size(b)行,把b转置成一列再重复增加到size(a)列.因此命令等效于: A=ones(size(b ...}

我要回帖

更多关于 matlab中的mesh函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信