This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Show hidden characters 最后,当我们要组合两个或者多个向量中的元素时,可以使用~meshgrid~ 函数。假设我们有一个以~ $ \alpha $ ~ 和~ $ \beta $ ~ 作为自变量的函数~ $ f( \alpha , \beta )= \sin ( \alpha )+ 2 * \cos ( \beta ) $ ~,我们想求出在~ $ \alpha \in ( 0 , \pi ) $ ~ 和~ $ \beta \in (- \pi , \pi ) $ ~ 内的所有值,这时就可以通过~ \mcode {[alpha,beta] = meshgrid(0:0.1:pi,-pi:0.1:pi)}~ 得到矩阵~alpha~ 和~beta,两个矩阵大小相同,所有相同位置的两个元素组合起来,就遍历了所有的可能组合。再通过以下两行命令即可得到~f~并做出图形: 结构体~structure,结构体中包含字段名(field)和与其对应的值(value)。定义结构体及赋值有两种方式,一种是通过~struct~ 函数,如~ \mcode {student1 = struct('Name','PanZhongxian','Age',24);};另一种方式是每次增加一部分,如~ \mcode {student2.Name='Panzhongxian';}~ \mcode {student2.Age=24;}。 个人觉着前者结构清晰、可读性强、内存一次性分配完成,但是~MATLAB~ 帮助里边绝大多数都是使用后者。struct~ 型的变量也可以组成数组,比如下边是改自~MATLAB~ 中自带的一个例子。 判定数据类型是否是对象、元胞、字符串元胞、字符、字段名、浮点数、画图窗口句柄、整数、java 对象、逻辑性数、数值型数据、MATLAB~ 对象、实数、标量、字符串、结构体、向量,可以选用下列函数: \mcode {isa}, ~ \mcode {iscell}, ~ \mcode {iscellstr}, ~ \mcode {ischar}, ~ \mcode {isfield}, ~ \mcode {isfloat}, ~ \mcode {ishghandle}, ~ \mcode {isinteger}, ~ \mcode {isjava}, ~ \mcode {islogical}, ~ \mcode {isnumeric}, ~ \mcode {isobject}, ~ \mcode {isreal}, ~ \mcode {isscalar}, ~ \mcode {isstr}, ~ \mcode {isstruct}, ~ \mcode {isvector}~ 等。 除判断数据类型外,还可以判断是否是特定的应用程序定义的数据、COM~ 对象、文件路径、空、相等(可比较字符串、元胞等)、无穷大相等、COM~ 事件、有穷数、全局变量、句柄、hold on~ 状态、无穷大数、COM~ 接口、关键词、字母字符、MAC~ 系统、集合元素、方法、非数、Windows~ 系统、素数、对象属性、已排序、空格字符、稀疏矩阵、字符串中的字母和数字、学生版本、UNIX 系统、变量名,可以选用以下函数:\mcode{isappdata}, ~\mcode{iscom}, ~\mcode{isdir}, ~\mcode{isempty}, ~\mcode{isequal}, ~\mcode{isequaln}, ~\mcode{isevent}, ~\mcode{isfinite}, ~\mcode{isglobal}, ~\mcode{ishandle}, ~\mcode{ishold}, ~\mcode{isinf}, ~\mcode{isinterface}, ~\mcode{iskeyword}, ~\mcode{isletter}, ~\mcode{ismac}, ~\mcode{ismember}, ~\mcode{ismethod}, ~\mcode{isnan}, ~\mcode{isobject}, ~\mcode{ispc}, ~\mcode{isprime}, ~\mcode{isprop}, ~\mcode{issorted}, ~\mcode{isspace}, ~\mcode{issparse}, ~\mcode{isstrprop}, ~\mcode{isstudent}, ~\mcode{isunix}, ~\mcode{isvarname}~ 等。 首先说一下低层次的文件操作函数: \mcode {fopen}、 \mcode {fclose}、 \mcode {fseek}、 \mcode {ferror}、 \mcode {fgetl}、 \mcode {fgets}、 \mcode {fprintf}、 \mcode {fread}、 \mcode {frewind}、 \mcode {fscanf}、 \mcode {feof}、 \mcode {ftell}、 \mcode {fwrite}~ 等,不是说使用这些函数的就档次低,而是说这些函数操作层次比较低,其他的一些读写操作函数往往在内部调用这些低层次的函数。这些函数的使用和~C~ 语言中的同名函数几乎是相同的,不同之处在于一些细微的调用格式。对文件进行操作之前都需要使用~ \mcode {fopen}~ 函数进行打开,对文件句柄进行操作完后,又需要使用~ \mcode {fclose}~函数将文件关闭。这里就不对这些函数作具体的介绍了,下边的应用列举了对二进制文件的读写。 emxArray~结构体是一种可嵌入的~mxArray~结构体(An embeddable version of the MATLAB mxArray),对应不同数据类型有不同种类的~emxArray~结构体~命名规则为emxArray \_ ~ \textless baseTypedef \textgreater ,其中~ \textless baseTypedef \textgreater ~指的就是~rtwtypes.h~ 函数中预定义的数据类型,包括~real \_ T, time \_ T, boolean \_ T, int \_ T, uint \_ T, ulong \_ T, char \_ T, byte \_ T~等等许多类型。 Coder~支持的~MATLAB~函数越来越多,但比起~MATLAB~ 所有的函数来说,还是很有限的。所以当我们想用一些“不支持的函数”时就会遇到问题。我们分析一下~MATLAB~ 不支持的函数的原因,可能是因为~MATLAB~ 函数考虑的太多的,对于不同的输入格式,MATLAB~ 总能找到一种对应的方法,那么函数本身就会非常复杂。而往往我们只用到程序的一点点功能,这就给从“不支持”到“支持”转换创造了条件。以~smooth~函数为例,在~R2011a~ 里边,smooth.m~ 文件共有~679~ 行,其中有~71~ 行的~help,可见这个函数的复杂性。但我们只用到其中一种最基本的功能,而且输入的信号也是一个确定长度的一维向量,就是调用如下函数形式: \ begin{lstlisting } smooth_sig = smooth(sig_w,50); \end { lstlisting } 按~F7~键,提示错误找不到~dlltest.h~文件中的一个头文件:“fatal error C1083: 无法打开包括文件:“mclmcrrt.h”: No such file or directory”。 这个错误是由于我们没有设置头文件的路径,应为调用动态链接库时不仅仅是生成的三个文件,还需要~MCR~ 中的其他文件。我们电脑上已经安装了~MATLAB~ 就没有必要再去装~MCR~ 了,头文件在~ \mcode {[matlabroot '/extern/include' ]}~ 目录中,库文件在~ \mcode {[matlabroot '/extern/lib/win32/microsoft' ]}~ 目录中。在~VS~ 的项目属性页~ $ \rightarrow $ ~配置属性~ $ \rightarrow $ ~VC++~ 目录中,在“包含目录”和“库目录”中增加相应的两个目录。