- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MATLAB与C++的接口问题.doc
发信人: zjliu (Robusting), 信区: Matlab
标 题: MATLAB与C++的接口问题(zz)
发信站: 哈工大紫丁香 (Fri Nov 22 12:34:29 2002) , 转信
摘自北京理工大学BBS
MATLAB是什么东东?不用我多说了,大批的高手会告诉你它的无数好处。但是MATL
AB程序存在的一般问题是:
1、运算速度较慢,特别是有for i=1:???
for j=1:???
......
end
end时,那你就死定了。
2、无法脱离MATLAB环境运行,虽然你可以用MATLAB自带的工具把M文件转成可执行程序,但是执行时,你只能看到一个黑黑的窗口,难道,这就是......Windows? $%%^ $##%。
3、GUI功能差。许多大侠不愿意看到2中所述的DOS-Windows界面,于是使用了MATL
AB带的GUI生成工具。(不要扔臭鸡蛋!我知道你用Graphic Editor改了一下界面,发现以前的工作全都白做了——因为被覆盖了,西西)但是MATLAB提供的控件和事件实在有限。GUI界面做好后放在机器里,向尚未进实验室的师妹(们)炫耀一下,还勉强可以增加一些魅力值。如果被专家看到了,西西。只怕效果不太美妙。
因此,如果能够实现MATLAB与VC或者BC或者C++BUILDER等可视化设计语言的交互,提高速度,美化界面,使程序更符合Windows的规范,同时又利用MATLAB的强大功能,对任何人来说都很有意义。
我在课题中涉及到了部分MATLAB与C++的接口知识,在这里总结出来,算是抛砖引玉
吧。其中错误以及偏颇的地方,尚请各位大侠以及高手多多指教,谢谢!
(一)接口种类
用C++(或者C)语言操作MATLAB,有三种途径:
·MEX文件
在MATLAB中可调用的C或Fortran语言程序称为MEX文件。MATLAB可以直接把MEX文件视为它的内建函数进行调用。MEX文件是动态链接的子例程,MATLAB解释器可以自动载入并执行它。MEX文件主要有以下用途:
对于大量现有的C或者Fortran程序可以无须改写成MATLAB专用的M文件格式而在MATLAB中执行。
对于那些MATLAB运算速度过慢的算法,可以用C或者Fortran语言编写以提高效率。
·MAT文件应用程序
MAT文件是MATLAB专用的用于保存数据至磁盘和向MATLAB导入、从MATLAB导出数据的
数据文件格式。MAT文件提供了一种简便的机制,它允许你在两个平台之间以灵活的方式
移动数据。而且,它还提供了一种途径来向其它单机MATLAB应用导入或者导出数据。
为了简化在MATLAB环境之外对MAT文件的使用,MATLAB给出了一个操作例程库,通过
它,我们可以使用C/C++或者Fortran程序读写MAT文件。
·引擎应用程序
MATLAB提供了一系列的例程使得别的程序可以调用MATLAB,从而把MATLAB用作一个计算引擎。MATLAB引擎程序指的是那些通过管道(在UNIX系统中)或者ActiveX(在Windows系统中)与独立MATLAB进程进行通信的C/C++或者Fortran程序。
MATLAB同样提供了一个函数库来启动或者结束MATLAB进程、与MATLAB交换数据以及发送MATLAB命令。
(二)MEX文件
1、一个MEX的例子
#include mex.h
/*
* timestwo.c - example found in API guide
*
* Computational function that takes a scalar and doubles it.
*
* This is a MEX-file for MATLAB.
* Copyright (c) 1984-1998 The MathWorks, Inc.
*/
/* $Revision: 1.5 $ */
/* 本MEX文件的目的是实现timestwo的功能
void timestwo(double y[], double x[])是你的C++函数 */
void timestwo(double y[], double x[])
{
y[0] = 2.0*x[0];
}
/*下面这
文档评论(0)