15-MATLAB和其他编程语音结合.pdf

上传人:asd****56 文档编号:70322165 上传时间:2023-01-19 格式:PDF 页数:43 大小:1.33MB
返回 下载 相关 举报
15-MATLAB和其他编程语音结合.pdf_第1页
第1页 / 共43页
15-MATLAB和其他编程语音结合.pdf_第2页
第2页 / 共43页
点击查看更多>>
资源描述

《15-MATLAB和其他编程语音结合.pdf》由会员分享,可在线阅读,更多相关《15-MATLAB和其他编程语音结合.pdf(43页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、下载第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

2、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的优点在于可以用高级

3、的形式描述出操作,而程序员不必担心循环的次数和一些其他细节问题。被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中读或写其他的二进制文件。这对有特殊格式要求的程序很有用

4、。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

5、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 tM AT文件。e n gM AT L A B工程文件。m e xM E X程序,在M A LTA B环境中完成一些操作的程序。在下面几节中将举一些例子。这些例子基本上说明了 M AT L A B和C或F O RT R A N是如何相互调用的。它们已在运行Sun OS 5.5.1的工作站上和Soloais CDE 1.0.2版的Wi n d o w s系统中编译通过。对于每一种系统而言,编程的思想都是一样的。然而还是有一些重要的细节方面是不相同的。这

6、就是为什么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进行操作。为了使用这些程序,在程序中必须嵌入

7、头文件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 5C中的内存管理void*mxCalloc(size_t n,size_t size);分配内存。

8、参数n表示分配的元素个数,s i z e表示每个元素的字节数。如果分配成功,返回一个指向已分配内存的开始位置的指针;否则返回 N U L L。在程序中必须嵌入库文件。当不再使用时用m x F r e e来释放内存。void mxSetAllocFcns(calloc_proc callocfcn,free_procfreefcn,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*mxRe

9、alloc(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 6C中处理m x A r

10、 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下载是一个枚举数据类型,用来表示 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

11、,用户自定义类型。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

12、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

13、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

14、 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

15、 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中一个元素需要的字

16、节数。如果 m x A r r a y是细胞或结构类型,则返回指向它们的指针大小。如果操作失败,返回 0。3 0 6M ATLAB 5 手册下载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(mxA

17、rray*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(m

18、xArray*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

19、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是数字或字符串类型,则返回真。bo

20、ol 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 mxIsSingl

21、e(const mxArray*array_ptr);第1 5章M AT L A B与其他编程语言结合3 0 7下载单精度浮点小数。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)将多维中的坐标向量转换成字典序中的标量

22、下标。参数 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可得更多信息。下面的程序用来创建和处理二维mn满矩阵,矩阵的元素是双精度浮点小数。命令集1 7 7C中满矩阵的处理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),但是这里创建的是二维 mn双精度浮点小数矩阵。如果矩阵中元素有复数,则参

23、数 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来动态地分配;

24、见命令集 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相似,但是是对虚数元素。下面的程序用来创建和处理二维mn的稀疏矩阵,矩阵元素是双精度浮点小数。命令集1 7 8C中稀疏矩阵的处理mxArray*mxCreateSpares(int m,int n int nzmax,mxComplexity ComplexFlag);创建一个二维mn的稀疏矩阵。参数n z m a x表示矩阵中非零

25、元素的个数。如果矩阵中有复数元素,则参数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*

26、array_ptr,int nzmax);3 0 8M ATLAB 5 手册下载设置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(

27、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相似,但是设

28、置直接表示有非零元素列的向量。用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 9C中字符串的处理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相似

29、,但是是创建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

30、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是字符串类型,则返回真

31、。M ATLAB 5中一个新数据类型是多维数组;见 2.2节。用下面的程序来处理这种类型的m x A r r a y。第1 5章M AT L A B与其他编程语言结合3 0 9下载注意:C中可以使用 8、1 6或3 2位的带符号或不带符号的整数和单精度浮点小数的m x A r r a y来创建和计算。然而现在已不能在 M A LTA B环境中使用它们了。命令集1 8 0C中多维数组的处理mxArray*mxCreateNumericArray(int ndim,const int*dims,mxClassID class,MxComplexity ComplexFlag);和m x C r e

32、 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*d

33、ata_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指针。更多的是用在除双精度浮点小数以外的其他类

34、型数字矩阵中。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 ATL

35、AB 5中一新数据类型是细胞矩阵,也称细胞数组;见 5.5节。下面的程序用来处理这种类型的m x A r r a y:命令集1 8 1C中细胞矩阵的处理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);和上个函数相似,但是是用来创建一个二维 mn的细胞矩阵。mxArray*mxGetCell(c

36、onst 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 0M ATLAB 5 手册下载示第一个细胞与被复制细胞之间的细胞数;见命令集 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);设置细

37、胞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

38、 y:命令集1 8 2C中结构的处理mxArray*mxCreateStructArray(int ndim,const int*dims,int nfields,constchar*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是字符串向量指针,表示域名。m x A r r a y *m x C r e a t e S t r u c t M a t r i x(i n t m,i n t n,i n

39、 t n f i e l d s,c o n s t c h a r*f i e l d _ n a m e s);和上个函数相似,但是是用来创建二维 mn的结构矩阵。int mxGetNumberOfFields(const mxArray*array_ptr);返回a rr a y_p t r指向的结构m x A r r a y中的域数。如果操作失败,则返回 0。m x A r r a y *m x G e t F i e l d(c o n s t m x A r r a y *a r r a y _ p t r,i n t i n d e x,c o n s t c h a r*f i

40、 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);和上个函数相

41、似,但是是用指针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。c o n s t c h a r *m x G e t F i e l d N a m e B y N u m b e r(c o n s t m x A r r a y *a r r a y _ p t

42、r,i n tf 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开始)。m x A r r a y *m x G e t F i e l d B y N u m b e r(c o n s t m x A r r a y *a r r a y _ p t r,i n t i n d e x,i n tf i e l d _ n u m b e r);第1 5章M AT L A B与其他编程语言结合3 1 1下载和m x G e t F i

43、e l d相似,但是返回的是域名,f i e l d_n u m b e r表示结构中域的一个数字序列(从0开始)。v o i d m x S e t F i e l d B y N u m b e r(m x A r r a y *a r r a y _ p t r,i n t i n d e x ,i n t f i e l d _ n u m b e r,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*

44、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中取一些特殊常数值,比如机器无穷小正

45、数和无穷大正数。还有一些程序用来检查变量的值是否等于这些常数。命令集1 8 3C中特殊常数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,返回真;否则返回假。boo

46、l mxIsFinite(double value);如果v a l u e不是一个i n f或N a N,就返回真;否则返回假。下面的程序用来调试C语言程序。命令集1 8 4C中调试程序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中的一些程序已被新程

47、序所代替。虽然这些旧程序不应该再在新的C程序中3 1 2M ATLAB 5 手册下载使用,但是它们还存在,以便M ATLAB 5能向下兼容。命令集1 8 5C中旧的矩阵程序mxCreateFull mxIsFull mxIsString mxFreeMatrix15.2.2 C中对M AT文件的处理下面的例子说明了如何写和读一个 M AT文件,也就是M AT L A B以内部二进制格式存储的数据文件。例1 5.1假设C程序中要用到一个服从正态分布的随机矩阵。这个简单的矩阵在 C程序中生成很困难,但是在 M AT L A B中只需用一个命令。先定义一个 1 01 0的服从正态分布的矩阵,并用s

48、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后保存到新矩阵中*/这个程序在U N I X下进行编译(在系统提示符下输入连续的一行):注意,所有的路径都和系统有关。当程序运行时,

49、将会在文件d a t a.m a t中添加矩阵N e w M a t r i x,它等于2*O l d M a t r i x。下面列出了与M AT文件有关的程序,用它们可以读和写 M AT L A B的二进制文件,也可以在M AT L A B和C程序之间传递数据。为了使用这些程序,必须在程序中嵌入头文件 m a t.h,也就是在程序开始包含下面一行:#include mat.h在读或写M AT文件之前,必须先打开这个文件,在完成之后关闭文件。用下列程序来完成打开和关闭文件。命令集1 8 6C中打开和关闭M AT文件M A T F i l e二进制M AT数据文件。MATFile*matOpe

50、n(const char*filename,const char*mode);以m o d e方式打开文件f i l e n a m e,打开文件的方式有四种:“r”表示读方式,“w”表示写方式,“u”表示读/写方式,“w 4”表示写M ATLAB 4 的M AT文件。如果打开成功,返回M AT文件的指针;否则返回N U L L。FILE*matGetFp(MATFile*mfp);返回m f p指向的M AT文件的C文件指针。比如在C的函数f e r r o r()中将会用到。int matClose(MATFile*mfp);关闭m f p指向的M AT文件。如果关闭成功,返回0;否则返回

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com