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。在程序中必须嵌入库 文件<stdlib.h>。当不再使用时用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。在程序中必须嵌入库文件<stdlib.h>。用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。在程序中必须嵌入库 文件< s t d l i b . h >。当不再使用时用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。在程序中必须嵌入库文件< s t d l i b . h >。用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 手册 下载