欢迎来到天天文库
浏览记录
ID:34079673
大小:1.33 MB
页数:43页
时间:2019-03-03
《matlab教程15matlab与其他编程语言结合》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、下载第15章MATLAB与其他编程语言结合MATLAB可以和其他编程语言一起使用,可以调用FORTRAN或C程序。反过来FORTRAN或C也可以调用MATLAB程序。这样,快速的编译程序就可以利用MATLAB中强大的矩阵或图形命令,通过编写部分的C或FORTRAN程序,并进行编译,就可以避免MALTAB程序的瓶颈现象。MATLAB还可以结合使用其他的应用程序,如MicrosoftWordforWindows。这将在本章的最后一节讨论,这主要取决于计算机的系统和安装的应用程序。15.1介绍MATL
2、AB和FORTRAN或CMATLAB可以被FORTRAN或C语言程序调用,它也可以调用FORTRAN或C语言程序。如果MATLAB程序运行速度很慢,后者对此很有用。因为MATLAB是一个解释性语言,所以当运行程序时就是解释它的命令。这样有时会导致程序的运行速度很慢,如for-loops循环。在FORTRAN77和C中可以使用MATLAB库,也可以用FORTRAN90或C++对它们进行链接。除非特别需要,一般不推荐编写FORTRAN或C程序。MATLAB的优点在于可以用高级的形式描述出操作,而程序
3、员不必担心循环的次数和一些其他细节问题。被MATLAB调用的程序必须在编译后转换成MEX文件,这样才能被MATLAB调用。在编译时它们和M文件一样使用。在2.8节中讲到了由MATLAB创建的二进制文件。它们是以MAT文件形式被调用的,在C或FORTRAN语言的库中有用来读和写二进制文件的程序。注意,这些文件可以在不同的平台间传递,例如,用户可以读取在Windows环境下建立的MAT文件到UNIX环境中。在15.4节中介绍了如何在MATLAB中读或写其他的二进制文件。这对有特殊格式要求的程序很有用
4、。MATLAB编译器、C数学库和C++数学库可以从MathWorks公司买到。首先可以作为自动MEX文件生成器或C源代码生成器使用,结合C数学库一起生成应用程序。在C中编写MATLAB程序,数据通过指针来访问。在其他编程语言中调用MALTAB程序,就要求使用指针。在MATLAB5中,所有变量类型,如标量、向量、矩阵、字符串、细胞矩阵和结构,都以mxArrays形式来保存,所有的数据操作都通过这些mxArrays来完成。MATLAB5中新的数据类型,也就是多维数组、细胞矩阵和结构只能在C中使用,而
5、不能在FORTRAN中使用。在C或FORTRAN中使用的MATLAB程序主要分四类:mx可操作的mxArrays。matMAT文件。engMATLAB工程文件。mexMEX程序,在MALTAB环境中完成一些操作的程序。在下面几节中将举一些例子。这些例子基本上说明了MATLAB和C或FORTRAN是如何相第15章MATLAB与其他编程语言结合305下载互调用的。它们已在运行SunOS5.5.1的工作站上和SoloaisCDE1.0.2版的Windows系统中编译通过。对于每一种系统而言,编程的思想
6、都是一样的。然而还是有一些重要的细节方面是不相同的。这就是为什么MATLAB中的例程很有趣的原因,它们可以在库中找到:.../matlab52/extern/examples路径中的三个点,...,表示这部分路径与系统有关。例程的文档可以用MATLAB命令helpdesk获得。而且还有MATLAB手册《应用程序接口指南》。15.2MATLAB和C为了使C和MATLAB混合编程,重要的是使用的C编译器以ANSIC标准进行编译。15.2.1C中对mxArray的操作用下面描述的程序可以对mxArra
7、y进行操作。为了使用这些程序,在程序中必须嵌入头文件matrix.h,也就是在程序的开始包含下面一行:#include"matrix.h"下面表中的程序用来分配和释放内存。一个好的编程习惯就是及时释放不再使用的内存。不必使用MATLAB程序来创建数据结构,因为在程序结束时MATLAB会自动地来完成(可见命令集195中程序mexMakeArrayPersistent和mexMakeMemoryPersistent)。命令集175C中的内存管理void*mxCalloc(size_tn,size_t
8、size);分配内存。参数n表示分配的元素个数,size表示每个元素的字节数。如果分配成功,返回一个指向已分配内存的开始位置的指针;否则返回NULL。在程序中必须嵌入库文件。当不再使用时用mxFree来释放内存。voidmxSetAllocFcns(calloc_proccallocfcn,free_procfreefcn,realloc_procreallocfcn,malloc_procmallocfcn);在非MEX程序中用来释放内存。使用helpdesk可得更多信息。
此文档下载收益归作者所有