当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

《数字信号处理》教学参考资料(MATLAB 5手册)第15章 MATLAB与其他编程语言结合

资源类别:文库,文档格式:PDF,文档页数:43,文件大小:1.33MB,团购合买
15.1 介绍MATLAB和FORTRAN或C 304 15.2 MATLAB和C 305 15.2.1 C中对mxArray的操作 305 15.2.2 C中对MAT文件的处理 313 15.2.3 C调用MATLAB 316 15.2.4 MATLAB调用C 318 15.3 MATLAB和FORTRAN 323 15.3.1 FORTRAN中对mxArray的操作 323 15.3.2 FORTRAN中MAT文件的处理 328 15.3.3 FORTRAN调用MATLAB 331 15.3.4 MATLAB调用FORTRAN 333 15.4 MATLAB和高级文件管理 338 15.5 和其他程序的结合 345
点击下载完整版文档(PDF)

China-pub.com 下载 第15章 MATLAB与其他编程语言结合 MATLAB可以和其他编程语言一起使用,可以调用FORTRAN或C程序。反过来 FORTRAN或C也可以调用MATLAB程序。这样,快速的编译程序就可以利用MATLAB中强大 的矩阵或图形命令,通过编写部分的C或FORTRAN程序,并进行编译,就可以避免MALTAB 程序的瓶颈现象。 MATLAB还可以结合使用其他的应用程序,如Microsoft Word for Windows。这将在本章 的最后一节讨论,这主要取决于计算机的系统和安装的应用程序。 15.1介绍MATLAB和FORTRAN或C MATLAB可以被FORTRAN或C语言程序调用,它也可以调用FORTRAN或C语言程序。 如果MATLAB程序运行速度很慢,后者对此很有用。因为MATLAB是一个解释性语言,所以 当运行程序时就是解释它的命令。这样有时会导致程序的运行速度很慢,如fOr-loops循环。 在FORTRAN77和C中可以使用MATLAB库,也可以用FORTRAN90或C+对它们进行链接。 除非特别需要,一般不推荐编写FORTRAN或C程序。MATLAB的优点在于可以用高级的 形式描述出操作,而程序员不必担心循环的次数和一些其他细节问题。 被MATLAB调用的程序必须在编译后转换成MEX文件,这样才能被MATLAB调用。在编 译时它们和M文件一样使用。 在2.8节中讲到了由MATLAB创建的二进制文件。它们是以MAT文件形式被调用的,在C 或FORTRAN语言的库中有用来读和写二进制文件的程序。注意,这些文件可以在不同的平台 间传递,例如,用户可以读取在Windows环境下建立的MAT文件到UNIX环境中。在15.4节中 介绍了如何在MATLAB中读或写其他的二进制文件。这对有特殊格式要求的程序很有用。 MATLAB编译器、C数学库和C++数学库可以从MathWorks公司买到。首先可以作为自动 MEX文件生成器或C源代码生成器使用,结合C数学库一起生成应用程序。 在C中编写MATLAB程序,数据通过指针来访问。在其他编程语言中调用MALTAB程序, 就要求使用指针。 在MATLAB5中,所有变量类型,如标量、向量、矩阵、字符串、细胞矩阵和结构,都 以mxArrays形式来保存,所有的数据操作都通过这些mxArrays来完成。 MATLAB5中新的数据类型,也就是多维数组、细胞矩阵和结构只能在C中使用,而不能 在FORTRAN中使用。 在C或FORTRAN中使用的MATLAB程序主要分四类: mx 可操作的mxArrays。 mat MAT文件。 eng MATLAB工程文件。 mex MEX程序,在MALTAB环境中完成一些操作的程序。 在下面几节中将举一些例子。这些例子基本上说明了MATLAB和C或FORTRAN是如何相

下载 第1 5章 M AT L A B与其他编程语言结合 M AT L A B可以和其他编程语言一起使用,可以调用 F O RT R A N或C程序。反过来 F O RT R A N或C也可以调用M AT L A B程序。这样,快速的编译程序就可以利用 M AT L A B中强大 的矩阵或图形命令,通过编写部分的 C或F O RT R A N程序,并进行编译,就可以避免 M A LTA B 程序的瓶颈现象。 M AT L A B还可以结合使用其他的应用程序,如 Microsoft Word for Wi n d o w s。这将在本章 的最后一节讨论,这主要取决于计算机的系统和安装的应用程序。 15.1 介绍M AT L A B和F O RT R A N或C M AT L A B可以被F O RT R A N或C语言程序调用,它也可以调用 F O RT R A N或C语言程序。 如果M AT L A B程序运行速度很慢,后者对此很有用。因为 M AT L A B是一个解释性语言,所以 当运行程序时就是解释它的命令。这样有时会导致程序的运行速度很慢,如 f o r- l o o p s循环。 在F O RTRAN 77和C中可以使用M AT L A B库,也可以用F O RTRAN 90或C + +对它们进行链接。 除非特别需要,一般不推荐编写 F O RT R A N或C程序。M AT L A B的优点在于可以用高级的 形式描述出操作,而程序员不必担心循环的次数和一些其他细节问题。 被M AT L A B调用的程序必须在编译后转换成 M E X文件,这样才能被M AT L A B调用。在编 译时它们和M文件一样使用。 在2 . 8节中讲到了由M AT L A B创建的二进制文件。它们是以 M AT文件形式被调用的,在 C 或F O RT R A N语言的库中有用来读和写二进制文件的程序。注意,这些文件可以在不同的平台 间传递,例如,用户可以读取在 Wi n d o w s环境下建立的M AT文件到U N I X环境中。在1 5 . 4节中 介绍了如何在M AT L A B中读或写其他的二进制文件。这对有特殊格式要求的程序很有用。 M AT L A B编译器、C数学库和C + +数学库可以从M a t h Wo r k s公司买到。首先可以作为自动 M E X文件生成器或C源代码生成器使用,结合C数学库一起生成应用程序。 在C中编写M AT L A B程序,数据通过指针来访问。在其他编程语言中调用 M A LTA B程序, 就要求使用指针。 在M ATLAB 5中,所有变量类型,如标量、向量、矩阵、字符串、细胞矩阵和结构,都 以m x A r r a y s形式来保存,所有的数据操作都通过这些 m x A r r a y s来完成。 M ATLAB 5中新的数据类型,也就是多维数组、细胞矩阵和结构只能在 C中使用,而不能 在F O RT R A N中使用。 在C或F O RT R A N中使用的M AT L A B程序主要分四类: m x 可操作的m x A r r a y s。 m a t M AT文件。 e n g M AT L A B工程文件。 m e x M E X程序,在M A LTA B环境中完成一些操作的程序。 在下面几节中将举一些例子。这些例子基本上说明了 M AT L A B和C或F O RT R A N是如何相

China-pub.com 第I5章MATLAB.与其他编程语言结合 305 下载 互调用的。它们已在运行Sun OS5.5.1的工作站上和Soloais CDE1.0.2版的Windows.系统中编 译通过。对于每一种系统而言,编程的思想都是一样的。然而还是有一些重要的细节方面是 不相同的。这就是为什么MATLAB中的例程很有趣的原因,它们可以在库中找到: .../matlab52/extern/examples 路径中的三个点,,表示这部分路径与系统有关。 例程的文档可以用MATLAB命令helpdesk获得。而且还有MATLAB手册《应用程序接 口指南》。 15.2 MATLAB和C 为了使C和MATLAB混合编程,重要的是使用的C编译器以ANSI C标准进行编译。 15.2.1C中对mxArray的操作 用下面描述的程序可以对mxArray:进行操作。为了使用这些程序,在程序中必须嵌入头文 件matrix.h,也就是在程序的开始包含下面一行: #include "matrix.h" 下面表中的程序用来分配和释放内存。一个好的编程习惯就是及时释放不再使用的内存。 不必使用MATLAB程序来创建数据结构,因为在程序结束时MATLAB会自动地来完成(可见命 令集l95中程序mexMakeArrayPersistent和mexMakeMemoryPersistent)。 命令集175 C中的内存管理 void +mxCalloc(size_t n,size_t size); 分配内存。参数n表示分配的元素个数,size表示每个元素的字节数。如果分配成功, 返回一个指向已分配内存的开始位置的指针:否则返回NULL。在程序中必须嵌入库 文件。当不再使用时用mxFree来释放内存。 void mxsetAllocFcns(calloc_proc callocfcn,free_proc freefcn,realloc_proc reallocfcn,malloc_proc mallocfcn); 在非MEX程序中用来释放内存。使用helpdesk可得更多信息。 void mxFree(void *ptr); 释放ptr指向的内存空间。 void *mxRealloc(void *ptr,size_t size); 重新分配用mxCa11oc分配的内存。参数ptr是指向内存开始位置的指针,size是分配 元素的个数。如果分配成功,返回得到指向分配内存开始位置的指针:否则返回 NULL。在程序中必须嵌入库文件。用nxFree来释放不再使用的内存。 void mxDestroyArray(mxArray tarray_ptr)i 释放array ptr指向的mxArray内存。 下面的常用程序用来管理和检查mxArray,如命名、重构和检查它们的类型。 命令集176 C中处理mxArray的常用程序 mxComplexity

互调用的。它们已在运行 Sun OS 5.5.1的工作站上和Soloais CDE 1.0.2版的Wi n d o w s系统中编 译通过。对于每一种系统而言,编程的思想都是一样的。然而还是有一些重要的细节方面是 不相同的。这就是为什么M AT L A B中的例程很有趣的原因,它们可以在库中找到: . . . / m a t l a b 5 2 / e x t e r n / e x a m p l e s 路径中的三个点,. . .,表示这部分路径与系统有关。 例程的文档可以用 M AT L A B命令h e l p d e s k获得。而且还有 M AT L A B手册《应用程序接 口指南》。 15.2 MAT L A B和C 为了使C和M AT L A B混合编程,重要的是使用的 C编译器以ANSI C标准进行编译。 15.2.1 C中对m x A r r a y的操作 用下面描述的程序可以对 m x A r r a y进行操作。为了使用这些程序,在程序中必须嵌入头文 件m a t r i x . h,也就是在程序的开始包含下面一行: #include "matrix.h" 下面表中的程序用来分配和释放内存。一个好的编程习惯就是及时释放不再使用的内存。 不必使用M AT L A B程序来创建数据结构,因为在程序结束时 M AT L A B会自动地来完成(可见命 令集1 9 5中程序m e x M a k e A r r a y P e r s i s t e n t和m e x M a k e M e m o r y P e r s i s t e n t )。 命令集1 7 5 C中的内存管理 void *mxCalloc(size_t n, size_t size); 分配内存。参数n表示分配的元素个数, s i z e表示每个元素的字节数。如果分配成功, 返回一个指向已分配内存的开始位置的指针;否则返回 N U L L。在程序中必须嵌入库 文件。当不再使用时用m x F r e e来释放内存。 void mxSetAllocFcns(calloc_proc callocfcn,free_proc freefcn,realloc_proc reallocfcn, malloc_proc mallocfcn); 在非M E X程序中用来释放内存。使用 h e l p d e s k可得更多信息。 void mxFree(void *ptr); 释放p t r指向的内存空间。 void *mxRealloc(void *ptr, size_t size); 重新分配用m x C a l l o c分配的内存。参数p t r是指向内存开始位置的指针, s i z e是分配 元素的个数。如果分配成功,返回得到指向分配内存开始位置的指针;否则返回 N U L L。在程序中必须嵌入库文件。用m x F r e e来释放不再使用的内存。 void mxDestroyArray(mxArray *array_ptr); 释放a rr a y _ p t r指向的m x A r r a y内存。 下面的常用程序用来管理和检查 m x A r r a y,如命名、重构和检查它们的类型。 命令集1 7 6 C中处理m x A r r a y的常用程序 m x C o m p l e x i t y 第1 5章 M AT L A B与其他编程语言结合 3 0 5 下载

306 MATLAB5手册 China-pub.c 下载 是一个枚举数据类型,用来表示mxArray的虚数元素。它的值可以为mxCOMPLEX(复 数mxArray)或nxREAL(其他)。 mxClassID 是一个枚举数据类型,用来表示mxArray的类型。有下列选项: mxCELL CLASS, 细胞类型。 mxSTRUCT CLASS, 结构类型。 mxOBJECT CLASS, 用户自定义类型。 mxCHAR_CLASS, 字符串类型。 mxSPARSE CLASS, 稀疏矩阵。 mxDOUBLE CLASS, 双精度浮点小数。 mxSINGLE_CLASS, 单精度浮点小数。 mxINT8 CLASS, 8位整数。 mxUINT8 CLASS, 8位无符号整数。 mxINT16 CLASS, 16位整数。 mxUINT16_CLASS, 16位无符号整数。 mxINT32 CLASS, 32位整数。 mxUINT32 CLASS, 32位无符号整数。 mxUNKNOWN CLASS, 未知类型。 mxclassID mxGetclassID(const mxArray *array_ptr); 返回array ptr指向的mxArray类型:见上。 const char *mxGetclassName(const mxArray *array_ptr); 同上,返回字符串形式的类型。 bool mxIsclass(const mxArray +array_ptr,const char *name); 如果array_ptr指向的mxArray有字符串name表示的类型,则返回真。字符串name相 对应于上面的类型(见nxClassID):“cel1”、“struct”、“char”、“sparse”、 “double”、“single”、“int8”、“uint8”、“int16”、“uintl6”、“int32” 和“uint32”。它还可以是自定义的类型名。 const char +mxGetName(const mxArray *array_ptr)i 返回包含array ptr指向的mxArray名字的字符串。 double mxGetscalar(const mxArray tarray_ptr); 返回array ptr指向的mxArray的第一个实数元素的值。总是返回一个double型值。如 果mxArray是一个结构或细胞类型,则返回0.O:如果mxArray:是一个稀疏矩阵类型, 则返回第一个非零实数元素的值:如果mxArray为空,则返回一个不确定值。 mxArray *mxDuplicateArray(const mxArray *in); 复制in指向的mxArray,并返回指向复制mxArray的指针。当它不再使用时,用 mxDestroy Array来释放它:见命令集I75。 int mxGetNumberofElements(const mxArray *array_ptr); 返回array ptr指向的mxArray的元素个数。使用mxGetClassIDi来找出元素类型。 int mxGetElementsize(const mxArray *array_ptr); 返回保存array ptr指向的mxArray中一个元素需要的字节数。如果mxArray是细胞或 结构类型,则返回指向它们的指针大小。如果操作失败,返回0

是一个枚举数据类型,用来表示 m x A r r a y的虚数元素。它的值可以为 m x C O M P L E X(复 数m x A r r a y )或m x R E A L(其他)。 m x C l a s s I D 是一个枚举数据类型,用来表示 m x A r r a y的类型。有下列选项: m x C E L L _ C L A S S , 细胞类型。 m x S T R U C T _ C L A S S , 结构类型。 m x O B J E C T _ C L A S S , 用户自定义类型。 m x C H A R _ C L A S S , 字符串类型。 m x S P A R S E _ C L A S S , 稀疏矩阵。 m x D O U B L E _ C L A S S , 双精度浮点小数。 m x S I N G L E _ C L A S S , 单精度浮点小数。 m x I N T 8 _ C L A S S , 8位整数。 m x U I N T 8 _ C L A S S , 8位无符号整数。 m x I N T 1 6 _ C L A S S , 1 6位整数。 m x U I N T 1 6 _ C L A S S , 1 6位无符号整数。 m x I N T 3 2 _ C L A S S , 3 2位整数。 m x U I N T 3 2 _ C L A S S , 3 2位无符号整数。 m x U N K N O W N _ C L A S S , 未知类型。 mxClassID mxGetClassID(const mxArray *array_ptr); 返回a rr a y_p t r指向的m x A r r a y类型;见上。 const char *mxGetClassName(const mxArray *array_ptr); 同上,返回字符串形式的类型。 bool mxIsClass(const mxArray *array_ptr, const char *name); 如果a rr a y_p t r指向的m x A r r a y有字符串n a m e表示的类型,则返回真。字符串 n a m e相 对应于上面的类型 (见m x C l a s s I D):“c e l l”、“s t r u c t”、“c h a r”、“s p a r s e”、 “d o u b l e”、“s i n g l e”、“i n t 8”、“u i n t 8”、“i n t 1 6”、“u i n t 1 6”、“i n t 3 2” 和“u i n t 3 2”。它还可以是自定义的类型名。 const char *mxGetName(const mxArray *array_ptr); 返回包含a rr a y_p t r指向的m x A r r a y名字的字符串。 double mxGetScalar(const mxArray *array_ptr); 返回a rr a y_p t r指向的m x A r r a y的第一个实数元素的值。总是返回一个 d o u b l e型值。如 果m x A r r a y是一个结构或细胞类型,则返回 0 . 0;如果m x A r r a y是一个稀疏矩阵类型, 则返回第一个非零实数元素的值;如果 m x A r r a y为空,则返回一个不确定值。 mxArray *mxDuplicateArray(const mxArray *in); 复制 i n指向的 m x A r r a y,并返回指向复制 m x A r r a y的指针。当它不再使用时,用 m x D e s t r o y A r r a y来释放它;见命令集1 7 5。 int mxGetNumberOfElements(const mxArray *array_ptr); 返回a rr a y_p t r指向的m x A r r a y的元素个数。使用m x G e t C l a s s I D来找出元素类型。 int mxGetElementSize(const mxArray *array_ptr); 返回保存a rr a y_p t r指向的m x A r r a y中一个元素需要的字节数。如果 m x A r r a y是细胞或 结构类型,则返回指向它们的指针大小。如果操作失败,返回 0。 3 0 6 M ATLAB 5 手册 下载

China-pub.com 第I5章MATLAB与其他编程语言结合 307 下载 int mxGetNumberofDimensions(const mxArray +array_ptr); 返回array ptr指向的mxArray中的维数,这个数总是不小于2。 const int +mxGetDimensions(const mxArray array_ptr)i 返回一个整数向量的指针,包含array_ptr指向的mxArray的每一维的元素个数。 int mxsetDimensions(mxArray *array ptr,const int *size,int ndims); 用来重构或增加/减少array ptr指向的mxArray的元素。参数ndims表示维数范围, siz表示一个整数向量的指针,包含每维中需要的元素个数。如果操作成功,返回 0:否则返回1。如果要增加或减少元素,则必须进行分配/释放内存。用helpdesk 可得更多信息。 int mxGetM(const mxArray array_ptr); 返回‘行'数,也就是array_ptr指向的mxArray的第一维中元素的个数。 void mxsetM(mxArray *array_ptr,int m); 用来重构或增加/减少array ptr指向的mxArray中的‘行’数。参数m表示规定的‘行' 数,见mxSetDimensions。 int mxGetN(const mxArray array_ptr); 返回‘列'数,也就是array ptr指向的mxArray的第二维中元素的个数。 void mxsetN(mxArray *array_ptr,int n); 用来重构或增加/减少array_ptr指向的mxArray中的‘列?数。参数n表示规定的‘列' 数,见nxSetDimensions。 bool mxIsEmpty(const mxArray tarray_ptr); 如果array ptr指向的mxArray为空,就返回真。 bool mxIsFromGlobalws (const mxArray tarray_ptr); 如果array_ptr指向的mxArray是从MATLAB:全局工作区中复制得到,则返回真。 bool mxIsNumeric(const mxArray tarray_ptr); 如果array ptr指向的mxArray是数字或字符串类型,则返回真。 bool mxIsInt8(const mxArray *array_ptr); 8位整数。 bool mxIsUint8(const mxArray tarray_ptr)i 8位无符号整数。 bool mxIsInt16(const mxArray *array_ptr)i 16位整数。 bool mxIstint16(const mxArray *array_ptr); 16位无符号整数。 bool mxIsInt32(const mxArray *array_ptr); 32位整数。 bool mxIstint32(const mxArray tarray_ptr); 32位无符号整数。 bool mxIssingle(const mxArray *array_ptr);

int mxGetNumberOfDimensions(const mxArray *array_ptr); 返回a rr a y_p t r指向的m x A r r a y中的维数,这个数总是不小于 2。 const int *mxGetDimensions(const mxArray *array_ptr); 返回一个整数向量的指针,包含 a rr a y_p t r指向的m x A r r a y的每一维的元素个数。 int mxSetDimensions(mxArray *array_ptr, const int *size, int ndims); 用来重构或增加 /减少a rr a y _ p t r指向的m x A r r a y的元素。参数 n d i m s表示维数范围, s i z e表示一个整数向量的指针,包含每维中需要的元素个数。如果操作成功,返回 0;否则返回1。如果要增加或减少元素,则必须进行分配 /释放内存。用h e l p d e s k 可得更多信息。 int mxGetM(const mxArray *array_ptr); 返回‘行’数,也就是a rr a y_p t r指向的m x A r r a y的第一维中元素的个数。 void mxSetM(mxArray *array_ptr, int m); 用来重构或增加/减少a rr a y_p t r指向的m x A r r a y中的‘行’数。参数m表示规定的‘行’ 数,见m x S e t D i m e n s i o n s。 int mxGetN(const mxArray *array_ptr); 返回‘列’数,也就是a rr a y_p t r指向的m x A r r a y的第二维中元素的个数。 void mxSetN(mxArray *array_ptr,int n); 用来重构或增加/减少a rr a y_p t r指向的m x A r r a y中的‘列’数。参数n表示规定的‘列’ 数,见m x S e t D i m e n s i o n s。 bool mxIsEmpty(const mxArray *array_ptr); 如果a rr a y_p t r指向的m x A r r a y为空,就返回真。 bool mxIsFromGlobalWS(const mxArray *array_ptr); 如果a rr a y_p t r指向的m x A r r a y是从M AT L A B全局工作区中复制得到,则返回真。 bool mxIsNumeric(const mxArray *array_ptr); 如果a rr a y _ p t r指向的m x A r r a y是数字或字符串类型,则返回真。 bool mxIsInt8(const mxArray *array_ptr); 8位整数。 bool mxIsUint8(const mxArray *array_ptr); 8位无符号整数。 bool mxIsInt16(const mxArray *array_ptr); 1 6位整数。 bool mxIsUint16(const mxArray *array_ptr); 1 6位无符号整数。 bool mxIsInt32(const mxArray *array_ptr); 3 2位整数。 bool mxIsUint32(const mxArray *array_ptr); 3 2位无符号整数。 bool mxIsSingle(const mxArray *array_ptr); 第1 5章 M AT L A B与其他编程语言结合 3 0 7 下载

308 MATLAB5手册 China-pub.com 下载 单精度浮点小数。 bool mxIsDouble(const mxArray *array_ptr); 双精度浮点小数。 bool mxIscomplex(const mxArray tarray_ptr); 复数。如果array ptr指向的mxArray按函数指定的格式存储数据,则返回真。 int mxcalcsinglesubscript ((const mxArray +array_ptr,int nsbus,int +subs) 将多维中的坐标向量转换成字典序中的标量下标。参数nsbs通常表示array ptr指向 的nxArray中的维数,subs表示要转换坐标向量的指针。用helpdesk可得更多信息。 下面的程序用来创建和处理二维m×满矩阵,矩阵的元素是双精度浮点小数。 命令集177 C中满矩阵的处理 mxArray *mxCreateDoubleMatrix(int m,int n,mxComplexity Complexflag); 和mxCreateCellMatrix相似(见命令集I8I),但是这里创建的是二维m×n双精度浮点 小数矩阵。如果矩阵中元素有复数,则参数Complexflag是nxCOMPLEX类型,否则是 mxREAL类型。 double *mxGetpr(const mxArray *array_ptr); 返回array ptr指向的mxArray中第一个实数元素的指针。如果矩阵中没有任何实数元 素,则返回NULL。 void mxsetpr(mxArray tarray_ptr,double *pr); 设置array ptr指向的mxArray中的实数元素。参数pr包含应该使用值的向量指针,这 个向量必须用mxCalloc来动态地分配:见命令集175。 double *mxGetpi(const mxArray tarray_ptr)i 和nxGetPr相似,但是是对虚数元素。 void mxsetpi(mxArray tarray_ptr,double *pi); 和mxSetPr相似,但是是对虚数元素。 下面的程序用来创建和处理二维m×的稀疏矩阵,矩阵元素是双精度浮点小数。 命令集178 C中稀疏矩阵的处理 mxArray *mxCreatespares(int m,int n int nzmax,mxComplexity ComplexFlag); 创建一个二维m×n的稀疏矩阵。参数nzmax表示矩阵中非零元素的个数。如果矩阵中 有复数元素,则参数ComplexFlag是mxCOMPLEX类型:否则是mxREAL类型。如果创 建成功,返回指向这个矩阵的指针:否则返回NULL。当它不再使用时,用 mxDestroyArray来释放所占内存:见命令集175。 int mxGetNzmax(const mxArray *array_ptr); 返回array_ptr指向的稀疏矩阵mxArray中的nzmax(值(见上)。如果发生任何错误,都 返回一个不确定数。 void mxsetNzmax(mxArray *array_ptr,int nzmax);

单精度浮点小数。 bool mxIsDouble(const mxArray *array_ptr); 双精度浮点小数。 bool mxIsComplex(const mxArray *array_ptr); 复数。如果a rr a y _ p t r指向的m x A r r a y按函数指定的格式存储数据,则返回真。 int mxCalcSingleSubscript((const mxArray *array_ptr,int nsbus,int *subs) 将多维中的坐标向量转换成字典序中的标量下标。参数 n s u b s通常表示a rr a y_p t r指向 的m x A r r a y中的维数,s u b s表示要转换坐标向量的指针。用h e l p d e s k可得更多信息。 下面的程序用来创建和处理二维 m×n满矩阵,矩阵的元素是双精度浮点小数。 命令集1 7 7 C中满矩阵的处理 mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity Complexflag); 和m x C r e a t e C e l l M a t r i x相似(见命令集1 8 1 ),但是这里创建的是二维 m×n双精度浮点 小数矩阵。如果矩阵中元素有复数,则参数 C o m p l e x f l a g是m x C O M P L E X类型,否则是 m x R E A L类型。 double *mxGetPr(const mxArray *array_ptr); 返回a rr a y_p t r指向的m x A r r a y中第一个实数元素的指针。如果矩阵中没有任何实数元 素,则返回N U L L。 void mxSetPr(mxArray *array_ptr, double *pr); 设置a rr a y _ p t r指向的m x A r r a y中的实数元素。参数p r包含应该使用值的向量指针,这 个向量必须用m x C a l l o c来动态地分配;见命令集 1 7 5。 double *mxGetPi(const mxArray *array_ptr); 和m x G e t P r相似,但是是对虚数元素。 void mxSetPi(mxArray *array_ptr, double *pi); 和m x S e t P r相似,但是是对虚数元素。 下面的程序用来创建和处理二维 m×n的稀疏矩阵,矩阵元素是双精度浮点小数。 命令集1 7 8 C中稀疏矩阵的处理 mxArray *mxCreateSpares(int m, int n int nzmax, mxComplexity ComplexFlag); 创建一个二维m×n的稀疏矩阵。参数n z m a x表示矩阵中非零元素的个数。如果矩阵中 有复数元素,则参数C o m p l e x F l a g是m x C O M P L E X类型;否则是m x R E A L类型。如果创 建成功,返回指向这个矩阵的指针;否则返回 N U L L。当它不再使用时,用 m x D e s t r o y A r r a y来释放所占内存;见命令集 1 7 5。 int mxGetNzmax(const mxArray *array_ptr); 返回a rr a y_p t r指向的稀疏矩阵 m x A r r a y中的n z m a x值(见上)。如果发生任何错误,都 返回一个不确定数。 void mxSetNzmax(mxArray *array_ptr, int nzmax); 3 0 8 M ATLAB 5 手册 下载

China-pub.coM 第I5章MATLAB与其他编程语言结合 309 下载 设置array ptr指向的稀疏矩阵mxArray中的nzmax值(见上)。如果nzmaxi改变,那么向 量ir、pr和pi的大小(如果它们存在)也将随着改变。用helpdesk可得更多信息。 int *mxGetIr(const mxArray *array ptr); 返回一个包含有行数的整数向量指针,其中第一行有数字0,array ptr指向的稀疏矩 阵mxArray中有非零元素。如果操作失败,返回NULL。 void mxsetIr(mxArray array_ptr,int *ir); 定义array_ptr指向的稀疏矩阵mxArray中有非零元素的行。参数ir是一个整数向量指 针,包含使用的行数,这些行必须按列序来存储。在0处开始行计数。用helpdesk 可得更多信息。 int *mxGetJc(const mxArray *array_ptr); 和nxGetIr相似,但是返回的整数向量指针直接表示有非零元素的列来。用helpdesk 可得更多信息。 void mxsetJc(mxArray +array_ptr,int +jc); 和nxSetIr相似,但是设置直接表示有非零元素列的向量。用nelpdesk可得更多信息。 bool mxIssParse(const mxArray *array_ptr); 如果array_ptr指向的mxArray是稀疏矩阵类型,返回真。 下面的程序用来创建和处理字符串mxArrays。 命令集179 C中字符串的处理 mxChar 被字符串mxArray用来存储数据元素的数据类型。 mxArray *mxCreatecharArray(int ndim,const int *dims); 和nxCreateCellArray相似,但是是创建n维的字符矩阵,见命令集181。 mxArray *mxCreatecharMatrixFromstrings (int m,char **str); 和nxCreateCellMatrix相似(见命令集181),但是是用str指向的字符串向量创建 二维字符矩阵:m是字符串向量中的字符串数。 mxArray *mxcreatestring(const char *str); 用字符串str创建一个字符串矩阵mxArray。如果创建成功,则返回指向这个字符串 mxArray的指针:否则返回NULL。当字符串nxArray不再使用时,应用mxDestroyArray 来释放所占内存:见命令集75。 int mxGetstring (const mxArray +array_ptr,char *buf,int buflen); 复制array_ptr指向的字符串mxArray,得到的字符串保存在buf中。blen是buf仲可 以存放的最大字符数。如果复制成功,返回0:否则返回1。 bool mxIschar(const mxArray +array_ptr); 如果array ptr指向的mxArray是字符串类型,则返回真。 MATLAB5中一个新数据类型是多维数组:见2.2节。用下面的程序来处理这种类型 的mxArray

设置a rr a y_p t r指向的稀疏矩阵m x A r r a y中的n z m a x值(见上)。如果n z m a x改变,那么向 量i r、p r和p i的大小(如果它们存在)也将随着改变。用h e l p d e s k可得更多信息。 int *mxGetIr(const mxArray *array_ptr); 返回一个包含有行数的整数向量指针,其中第一行有数字 0,a rr a y_p t r指向的稀疏矩 阵m x A r r a y中有非零元素。如果操作失败,返回 N U L L。 void mxSetIr(mxArray *array_ptr, int *ir); 定义a rr a y_p t r指向的稀疏矩阵m x A r r a y中有非零元素的行。参数 i r是一个整数向量指 针,包含使用的行数,这些行必须按列序来存储。在 0处开始行计数。用 h e l p d e s k 可得更多信息。 int *mxGetJc(const mxArray *array_ptr); 和m x G e t I r相似,但是返回的整数向量指针直接表示有非零元素的列来。用 h e l p d e s k 可得更多信息。 void mxSetJc(mxArray *array_ptr, int *jc); 和m x S e t I r相似,但是设置直接表示有非零元素列的向量。用h e l p d e s k可得更多信息。 bool mxIsSParse(const mxArray *array_ptr); 如果a rr a y_p t r指向的m x A r r a y是稀疏矩阵类型,返回真。 下面的程序用来创建和处理字符串 m x A r r a y s。 命令集1 7 9 C中字符串的处理 m x C h a r 被字符串m x A r r a y用来存储数据元素的数据类型。 mxArray *mxCreateCharArray(int ndim, const int *dims); 和m x C r e a t e C e l l A r r a y相似,但是是创建n维的字符矩阵,见命令集1 8 1。 mxArray *mxCreateCharMatrixFromStrings(int m,char **str); 和m x C r e a t e C e l l M a t r i x相似(见命令集1 8 1 ),但是是用s t r指向的字符串向量创建 二维字符矩阵;m是字符串向量中的字符串数。 mxArray *mxCreateString(const char *str); 用字符串s t r创建一个字符串矩阵 m x A r r a y。如果创建成功,则返回指向这个字符串 m x A r r a y的指针;否则返回N U L L。当字符串m x A r r a y不再使用时,应用m x D e s t r o y A r r a y 来释放所占内存;见命令集1 7 5。 int mxGetString(const mxArray *array_ptr, char *buf, int buflen); 复制a rr a y_p t r指向的字符串m x A r r a y,得到的字符串保存在 b u f中。b u f l e n是b u f中可 以存放的最大字符数。如果复制成功,返回 0;否则返回1。 bool mxIsChar(const mxArray *array_ptr); 如果a rr a y_p t r指向的m x A r r a y是字符串类型,则返回真。 M ATLAB 5中一个新数据类型是多维数组;见 2 . 2节。用下面的程序来处理这种类型 的m x A r r a y。 第1 5章 M AT L A B与其他编程语言结合 3 0 9 下载

310 MATLAB5手册 China-pub.c 下载 注意:C中可以使用8、16或32位的带符号或不带符号的整数和单精度浮点小数的 mxArray来创建和计算。然而现在已不能在MALTAB环境中使用它们了。 命令集180C中多维数组的处理 mxArray *mxCreateNumericArray(int ndim,const int +dims,mxclassID class, MxComplexity ComplexFlag); 和nxCreateCellArray相似,但是这里是创建n维的数字矩阵。数字类型为class, 见命令集176中的nxClassID。如果有复数,则ComplexFlag设为nxCOMPLEX:否 则为mxREAL。 void *mxGetData(const mxArray tarray_ptr); 和nxGetPr相似,见命令集177,但是返回一个void指针。更多的是用在除双精度浮 点小数以外的其他类型数字矩阵中。 void mxsetData(mxArray tarray_ptr ,void *data_ptr)i 和nxSetPr相似,见命令集I77,但是返回一个void指针。更多的是用在除双精度浮 点小数以外的其他类型数字矩阵中。 void *mxGetImagData(const mxArray array_ptr)i 和nxGetPi相似,见命令集177,但是返回一个void指针。更多的是用在除双精度 浮点小数以外的其他类型数字矩阵中。 void mxsetImagData(mxArray array_ptr,void *pi); 和nxSetPi相似,见命令集I77,但是返回一个void指针。更多的是用在除双精度 浮点小数以外的其他类型数字矩阵中。 void mxsetLogical(mxArray array_ptr); 在array ptr指向的数字mxArray中设置逻辑标识符。MATLAB就会把mxArray的数据 当作逻辑变量来对待,也就是0是假,其他值是真。 void mxclearLogical(mxArray *array_ptr); 去掉数字mxArray中的逻辑标识符,见上。 bool mxIsLogical(const mxArray tarray_ptr); 检查数字mxArray中的逻辑标识符的设置,见上。如果设置了,就返回真:否则返回假。 MATLAB5中一新数据类型是细胞矩阵,也称细胞数组:见5.5节。下面的程序用来处理 这种类型的mxArray: 命令集181 C中细胞矩阵的处理 mxArray *mxCreatecellArray(int ndim,const int *dims): 创建一个n维的空细胞矩阵。参数ndim是维数,dims是表示每维大小的向量指针。如 果创建成功,就返回指向细胞矩阵的指针:否则返回NULL或停止程序运行。 mxArray *mxCreatecellMatrix(int m ,int n); 和上个函数相似,但是是用来创建一个二维mXn的细胞矩阵。 mxArray *mxGetcell(const mxArray tarray_ptr,int index); 从细胞mxArray中复制一个细胞。参数array ptr是指向细胞mxArray的指针,index表

注意: C中可以使用 8、1 6或3 2位的带符号或不带符号的整数和单精度浮点小数的 m x A r r a y来创建和计算。然而现在已不能在 M A LTA B环境中使用它们了。 命令集1 8 0 C中多维数组的处理 mxArray *mxCreateNumericArray(int ndim, const int *dims, mxClassID class, MxComplexity ComplexFlag); 和m x C r e a t e C e l l A r r a y相似,但是这里是创建 n维的数字矩阵。数字类型为 c l a s s, 见命令集1 7 6中的m x C l a s s I D。如果有复数,则 C o m p l e x F l a g设为m x C O M P L E X;否 则为m x R E A L。 void *mxGetData(const mxArray *array_ptr); 和m x G e t P r相似,见命令集1 7 7,但是返回一个v o i d指针。更多的是用在除双精度浮 点小数以外的其他类型数字矩阵中。 void mxSetData(mxArray *array_ptr ,void *data_ptr); 和m x S e t P r相似,见命令集1 7 7,但是返回一个v o i d指针。更多的是用在除双精度浮 点小数以外的其他类型数字矩阵中。 void *mxGetImagData(const mxArray *array_ptr); 和m x G e t P i相似,见命令集 1 7 7,但是返回一个 void 指针。更多的是用在除双精度 浮点小数以外的其他类型数字矩阵中。 void mxSetImagData(mxArray *array_ptr, void *pi); 和m x S e t P i相似,见命令集 1 7 7,但是返回一个 v o i d指针。更多的是用在除双精度 浮点小数以外的其他类型数字矩阵中。 void mxSetLogical(mxArray *array_ptr); 在a rr a y_p t r指向的数字m x A r r a y中设置逻辑标识符。M AT L A B就会把m x A r r a y的数据 当作逻辑变量来对待,也就是 0是假,其他值是真。 void mxClearLogical(mxArray *array_ptr); 去掉数字m x A r r a y中的逻辑标识符,见上。 bool mxIsLogical(const mxArray *array_ptr); 检查数字m x A r r a y中的逻辑标识符的设置,见上。如果设置了,就返回真;否则返回假。 M ATLAB 5中一新数据类型是细胞矩阵,也称细胞数组;见 5 . 5节。下面的程序用来处理 这种类型的m x A r r a y: 命令集1 8 1 C中细胞矩阵的处理 mxArray *mxCreateCellArray(int ndim, const int *dims); 创建一个n维的空细胞矩阵。参数 n d i m是维数,d i m s是表示每维大小的向量指针。如 果创建成功,就返回指向细胞矩阵的指针;否则返回 N U L L或停止程序运行。 mxArray *mxCreateCellMatrix(int m ,int n); 和上个函数相似,但是是用来创建一个二维 m×n的细胞矩阵。 mxArray *mxGetCell(const mxArray *array_ptr, int index); 从细胞m x A r r a y中复制一个细胞。参数a rr a y_p t r是指向细胞m x A r r a y的指针,i n d e x表 3 1 0 M ATLAB 5 手册 下载

China-bub.coM 第I5章MATLAB.与其他编程语言结合 311 下载 示第一个细胞与被复制细胞之间的细胞数:见命令剿76中mxCalcSingleSubscript。 如果复制成功,返回指向细胞nxArray的指针;否则返回NULL。 void mxsetcell(mxArray +array_ptr,int index,mxArray +value); 设置细胞mxArray中的一个细胞。参数index表示第一个细胞与被设置细胞之间的细 胞数:见命令集176中mxCalcsingleSubscript。参数value是细胞指针,细胞的 值将被设置在array ptr指向的mxArray中。 bool mxIscell(const mxArray tarray_ptr); 如果array ptr指向的mxArray是细胞类型,则返回真。 MATLAB5中另一新数据类型是结构:见12.5节。下面的程序用来处理这种类型的 mxArray: 命令集182 C中结构的处理 mxArray +mxCreatestructArray(imdim,const int *dims ,int nfields,const char *+field_names); 和nxCreateCel1 Array相似(见命令集181),但是是创建n维的结构矩阵。参数 nfields表示每个元素中的域数,field names是字符串向量指针,表示域名。 m x A r r a y m x c r e a t e s t r u c t M a t m i i tt n t i n t n f i e l d sc,o n s tc h a r **field names); 和上个函数相似,但是是用来创建二维mXn的结构矩阵。 int mxGetNumberofFields(const mxArray tarray_ptr); 返回array ptr指向的结构mxArray中的域数。如果操作失败,则返回0。 mx Ar r aym x G et F i el d cmoxnAsrtr aya r r a y p tim,t in d e x cons tch ar *field name); 返回array_ptr指向的结构mxArray中一个元素的一个域值。参数index表示第一个元素 和返回的元素之间的元素个数:见命令集I76中mxCalcSingleSubscript。参数 field name表示元素中域名的字符串,如果操作成功,返回指向这个域的指针:否则 返回NULL。 void mxsetField(mxArray +array_ptr,int index,const char +field_name,mxArray +value); 和上个函数相似,但是是用指针vae指向的值来设置域值。 int mxGetFieldNumber(const mxArray *array_ptr,const char +field_name); 返回array ptr指向的结构mxArray中一个域中的域数。字符串field_name表示域名字, 如果操作成功,则返回结构中域的个数(从0开始):否则返回一1。 const ch a r m x G e t F i e l d N a m e B y N u m b n x A r o a y ar r a yp t tn t field number); 返回array ptr指向的结构mxArray中的域名。参数field number表示结构中域的一个 数字序列(从0开始)。 m x A r r ay m x G e t F i e l d B y N u m b e m ta o n sy a rr a y p t irn t i n d e x i n t field number);

示第一个细胞与被复制细胞之间的细胞数;见命令集1 7 6中m x C a l c S i n g l e S u b s c r i p t。 如果复制成功,返回指向细胞m x A r r a y的指针;否则返回N U L L。 void mxSetCell(mxArray *array_ptr, int index, mxArray *value); 设置细胞m x A r r a y中的一个细胞。参数 i n d e x表示第一个细胞与被设置细胞之间的细 胞数;见命令集1 7 6中m x C a l c S i n g l e S u b s c r i p t。参数v a l u e是细胞指针,细胞的 值将被设置在a rr a y_p t r指向的m x A r r a y中。 bool mxIsCell(const mxArray *array_ptr); 如果a rr a y_p t r指向的m x A r r a y是细胞类型,则返回真。 M ATLAB 5 中另一新数据类型是结构;见 1 2 . 5节。下面的程序用来处理这种类型的 m x A r r a y: 命令集1 8 2 C中结构的处理 mxArray *mxCreateStructArray(int ndim, const int *dims ,int nfields, const char **field_names); 和m x C r e a t e C e l l A r r a y相似(见命令集 1 8 1 ),但是是创建 n维的结构矩阵。参数 n f i e l d s表示每个元素中的域数,f i e l d_n a m e s是字符串向量指针,表示域名。 mxArray *mxCreateStructMatrix(int m, int n, int nfields, const char * * f i e l d _ n a m e s ) ; 和上个函数相似,但是是用来创建二维 m×n的结构矩阵。 int mxGetNumberOfFields(const mxArray *array_ptr); 返回a rr a y_p t r指向的结构m x A r r a y中的域数。如果操作失败,则返回 0。 mxArray *mxGetField(const mxArray *array_ptr, int index, const char * f i e l d _ n a m e ) ; 返回a rr a y_p t r指向的结构m x A r r a y中一个元素的一个域值。参数 i n d e x表示第一个元素 和返回的元素之间的元素个数;见命令集 1 7 6中m x C a l c S i n g l e S u b s c r i p t。参数 f i e l d_n a m e表示元素中域名的字符串,如果操作成功,返回指向这个域的指针;否则 返回N U L L。 void mxSetField(mxArray *array_ptr, int index, const char *field_name, mxArray * v a l u e ) ; 和上个函数相似,但是是用指针 v a l u e指向的值来设置域值。 int mxGetFieldNumber(const mxArray *array_ptr, const char *field_name); 返回a rr a y_p t r指向的结构m x A r r a y中一个域中的域数。字符串f i e l d _ n a m e表示域名字, 如果操作成功,则返回结构中域的个数 (从0开始);否则返回-1。 const char *mxGetFieldNameByNumber(const mxArray *array_ptr, int f i e l d _ n u m b e r ) ; 返回a rr a y_p t r指向的结构m x A r r a y中的域名。参数f i e l d_n u m b e r表示结构中域的一个 数字序列(从0开始)。 mxArray *mxGetFieldByNumber(const mxArray *array_ptr, int index, int f i e l d _ n u m b e r ) ; 第1 5章 M AT L A B与其他编程语言结合 3 1 1 下载

312 MATLAB5手册 China-pub.com 下载 和nxGetField相似,但是返回的是域名,field number表示结构中域的一个数字序 列(从0开始)。 void mxsetField ByNumber mxa nrayy ptrint index,int field number, mxArray *value); 和nxSetField相似,但是返回的是域名,field number表示结构中域的一个数字序列 (从0开始)。 bool mxIsstruct (const mxArray *array_ptr); 如果array ptr指向的nxArray是结构类型,则返回真。 int mxsetclassName (mxArray tarray_ptr,const char +classname); 将array ptr指向的MATLAB结构转换成classname:指定的MATLAB对象。如果转换 成功,返回O:否则返回一个非零数。当用load读入对象到MATLAB中时,要检查类 classname是否存在。如果不存在,则不能将对象反转换成结构。 下面的程序用来在C中取一些特殊常数值,比如机器无穷小正数和无穷大正数。还有一些 程序用来检查变量的值是否等于这些常数。 命令集183 C中特殊常数 double mxGetEps(void); 返回MATLAB中机器无穷小正数。 double mxGetInf(void); 返回MATLAB中inf的值,也就是无穷大的正数。 bool mxIsInf(double value); 如果value是无穷大正数,就返回真:否则返回假。 double;mxGetNaN(void); 返回MATLAB中的NaN值。 bool mxIsNaN(double value); 如果value是一个NaN,返回真:否则返回假。 bool mxIsFinite(double value); 如果value不是一个inf或NaN,就返回真:否则返回假。 下面的程序用来调试C语言程序。 命令集184 C中调试程序 void mxAssert(int expr,char terror_message)i 在调试时使用,如果expr为假,则程序停止,并打印出expr、文件名、行数和错误信 息。如果epr为真,则对程序没有影响。 void mxAsserts(int expr,char error message); 同上,但是expr为假时不打印出expr。 MATLAB4.2中的一些程序已被新程序所代替。虽然这些I旧程序不应该再在新的C程序中

和m x G e t F i e l d相似,但是返回的是域名, f i e l d_n u m b e r表示结构中域的一个数字序 列(从0开始)。 void mxSetFieldByNumber(mxArray *array_ptr, int index ,int field_number, mxArray *value); 和m x S e t F i e l d相似,但是返回的是域名, f i e l d_n u m b e r表示结构中域的一个数字序列 (从0开始)。 bool mxIsStruct(const mxArray *array_ptr); 如果a rr a y_p t r指向的m x A r r a y是结构类型,则返回真。 int mxSetClassName(mxArray *array_ptr, const char *classname); 将a rr a y_p t r指向的M AT L A B结构转换成c l a s s n a m e指定的M AT L A B对象。如果转换 成功,返回0;否则返回一个非零数。当用 l o a d读入对象到M AT L A B中时,要检查类 c l a s s n a m e是否存在。如果不存在,则不能将对象反转换成结构。 下面的程序用来在C中取一些特殊常数值,比如机器无穷小正数和无穷大正数。还有一些 程序用来检查变量的值是否等于这些常数。 命令集1 8 3 C中特殊常数 double mxGetEps(void); 返回M AT L A B中机器无穷小正数。 double mxGetInf(void); 返回M AT L A B中i n f的值,也就是无穷大的正数。 bool mxIsInf(double value); 如果v a l u e是无穷大正数,就返回真;否则返回假。 double; mxGetNaN(void); 返回M AT L A B中的N a N值。 bool mxIsNaN(double value); 如果v a l u e是一个N a N,返回真;否则返回假。 bool mxIsFinite(double value); 如果v a l u e不是一个i n f或N a N,就返回真;否则返回假。 下面的程序用来调试C语言程序。 命令集1 8 4 C中调试程序 void mxAssert(int expr, char *error_message); 在调试时使用,如果e x p r为假,则程序停止,并打印出 e x p r、文件名、行数和错误信 息。如果e x p r为真,则对程序没有影响。 void mxAssertS(int expr, char *error_message); 同上,但是e x p r为假时不打印出e x p r。 M ATLAB 4.2中的一些程序已被新程序所代替。虽然这些旧程序不应该再在新的C程序中 3 1 2 M ATLAB 5 手册 下载

China-bub.com 第15章ATLAB与其他编程语言结合 313 下载 使用,但是它们还存在,以便MATLAB5能向下兼容。 命令集185 C中旧的矩阵程序 mxCreateFull mxIsFull mxIsstring mxFreeMatrix 15.2.2C中对MAT文件的处理 下面的例子说明了如何写和读一个MAT文件,也就是MATLAB以内部二进制格式存储的 数据文件。 ■例15.1 假设C程序中要用到一个服从正态分布的随机矩阵。这个简单的矩阵在C程序中生成很困 难,但是在MATLAB中只需用一个命令。先定义一个10×10的服从正态分布的矩阵,并用 save命令保存: oldMatrix=randn(10); 号创建一个随机矩阵 save data oldMatrix;号保存这个矩阵到文件data.mat中 再编写一个C程序,用来读这个随机矩阵。矩阵的所有元素乘以2,并生成一个新矩阵保 存到文件data.mat中。C程序保存在文件matex.c中。 #include "mat.h" void main() MATFile *mfp; mxArray *A_ptr,*B_ptr; double *A,*B; int M,N,i,j; 体从文件中读矩阵*/ mfp =matOpen("data.mat","u"); A_ptr matGetArray(mfp,"OldMatrix"); M mxGetM(A_ptr) N mxGetN(A_ptr); A mxGetPr(A_ptr); 体创建新矩阵* B_ptr mxCreateDoubleMatrix(M,N,mxREAL); mxSetName(B_ptr,"NewMatrix"); B mxGetPr(B_ptr); 体将原矩阵乘以2后保存到新矩阵中*/ for (i =0;i M;i++) for (j=0;j<N;j++) B[i+M*j]=2*A[i+M*j门;

使用,但是它们还存在,以便 M ATLAB 5能向下兼容。 命令集1 8 5 C中旧的矩阵程序 mxCreateFull mxIsFull mxIsString mxFreeMatrix 15.2.2 C中对M AT文件的处理 下面的例子说明了如何写和读一个 M AT文件,也就是M AT L A B以内部二进制格式存储的 数据文件。 ■ 例1 5 . 1 假设C程序中要用到一个服从正态分布的随机矩阵。这个简单的矩阵在 C程序中生成很困 难,但是在 M AT L A B中只需用一个命令。先定义一个 1 0×1 0的服从正态分布的矩阵,并用 s a v e命令保存: O l d M a t r i x = r a n d n ( 1 0 ) ; % 创建一个随机矩阵 save data OldMatrix; % 保存这个矩阵到文件d a t a . m a t中 再编写一个C程序,用来读这个随机矩阵。矩阵的所有元素乘以 2,并生成一个新矩阵保 存到文件d a t a . m a t中。C程序保存在文件m a t e x . c中。 第1 5章 M AT L A B与其他编程语言结合 3 1 3 下载 /*从文件中读矩阵*/ /*创建新矩阵*/ /*将原矩阵乘以2后保存到新矩阵中*/

点击下载完整版文档(PDF)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共43页,可试读15页,点击继续阅读 ↓↓
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有