Matlab 版 (精华区)

发信人: zjliu (fly), 信区: Matlab
标  题: matlab与vc
发信站: 哈工大紫丁香 (Thu May 16 16:37:46 2002) , 转信

转贴自PRIS学术论坛
第一章、概述
 Matlab是当今世界上使用最为广泛的数学软件,它具有相当强大的数值计算、 数据处理

系统分析、图形显示,甚至符号运算功能,是一个完整的数学平 台,在这个平台上,你只

寥寥数语就可以完成十分复杂的功能,大大提高了 工程分析计算的效率。另外由于Matla
b的
广泛使用,于是出现了为各个领域专 门使用的工具箱(即在某一研究领域常用数学工具的
函数
包),这些工具箱的出现 更加促进了Matlab的流行。

  Matlab强大的功能只能在它所提供的平台上才能使用,也就是说,你必需在 安装有
matlab系统的机器上使用.m文件,这样就给工程计算带来了很大不便;特 别是,在matla
b
中,使用的行解释方式执行代码,这样大大地限制了代码执行速度。 于是人们想到,能否
开发
一个matlab与其他高级语言的接口,这样就可以把matlab 的强大功能融入各种应用程序中

并且通过高级语言编译器编译为2进制代码, 从而大大提高了执行速度。

   于是matlab的5.1版本提供了自带的C++ Complier,同时MathTools公司也为
Matlab开发了m文件高效解释和调试IDE:MIDEVA。经过近两年的发展,matlab 5.3 中的C

complier--mcc版本已经为2.0,而MIDEVA最新版本为4.5。 将matlab与C混合编程大概有如
下三种方
法:

  1.用Matlab的mcc将.m文件翻译为cpp源文件,然后在C编译器中调用 也可以用mcc编
译编译为stand-alone程序。

  2.用Matcom(MIDEVA)将.m文件翻译为cpp代码,并编译为exe或dll 文件。

  3.按照matcom的语法,在VC或BCB中直接书写matlab语句(与matlab 很相似),这也
lab系统的机器上使用.m文件,这样就给工程计算带来了很大不便;特 别是,在matlab
中,使用的行解释方式执行代码,这样大大地限制了代码执行速度。 于是人们想到,能否
开发
一个matlab与其他高级语言的接口,这样就可以把matlab 的强大功能融入各种应用程序中

并且通过高级语言编译器编译为2进制代码, 从而大大提高了执行速度。

   于是matlab的5.1版本提供了自带的C++ Complier,同时MathTools公司也为
Matlab开发了m文件高效解释和调试IDE:MIDEVA。经过近两年的发展,matlab 5.3 中的C

complier--mcc版本已经为2.0,而MIDEVA最新版本为4.5。 将matlab与C混合编程大概有如
下三种方法:

  1.用Matlab的mcc将.m文件翻译为cpp源文件,然后在C编译器中调用 也可以用mcc编
译编译为stand-alone程序。

  2.用Matcom(MIDEVA)将.m文件翻译为cpp代码,并编译为exe或dll 文件。

  3.按照matcom的语法,在VC或BCB中直接书写matlab语句(与matlab 很相似),这也
成的C++程序嵌入到VC。最近对这个问题做了一下尝试,在这里 做一个总结,请大家回去

试。这里只介绍VC的情况,用BC的网友就自己研究研究吧,估 计是类似的。

  1、设置项目编译选项 首先建立一个新的项目,或者打开一个已有的项目,然后选
择菜单: Project->Settings->C/C++ Category:Preprocessor Preprocessor
definitions: Preprocessor definitions: 添加: MSVC,IBMPC,MSWIND Category: Preco
mpiled
Headers 选择: Automatic use of precompiled headers Through header: stdafx.h

  2、调设置项目连接选项 首先要从下面几个函数定义文件(*.def)生成相应的导入库
文件(*.lib) libmmfile.def libmcc.def libmatlb.def libmx.def libmat.def 它们位于

录c:\matlab\extern\include 用下面命令导出库文件: lib /def:libmmfile.def
/out:libmmfil
e.lib /machine:ix86 lib /def:libmcc.def /out:libmcc.lib /machine:ix86 lib
/def:li
bmatlb.def /out:libmatlb.lib /machine:ix86 lib /def:libmx.def
成的C++程序嵌入到VC。最近对这个问题做了一下尝试,在这里 做一个总结,请大家回去

试。这里只介绍VC的情况,用BC的网友就自己研究研究吧,估 计是类似的。

  1、设置项目编译选项 首先建立一个新的项目,或者打开一个已有的项目,然后选
择菜单: Project->Settings->C/C++ Category:Preprocessor Preprocessor
definitions: Preprocessor definitions: 添加: MSVC,IBMPC,MSWIND Category: Preco
mpiledHeaders 选择: Automatic use of precompiled headers Through header: stdaf
x.h

  2、调设置项目连接选项 首先要从下面几个函数定义文件(*.def)生成相应的导入库
文件(*.lib) libmmfile.def libmcc.def libmatlb.def libmx.def libmat.def 它们位于

录c:\matlab\extern\include 用下面命令导出库文件: lib /def:libmmfile.def
/out:libmmfil
e.lib /machine:ix86 lib /def:libmcc.def /out:libmcc.lib /machine:ix86 lib
/def:li
bmatlb.def /out:libmatlb.lib /machine:ix86 lib /def:libmx.def
/out:libmx.lib /mac
hine:ix86 lib /def:libmat.def /out:libmat.lib /machine:ix86 将它们放入你的项
目连接选项 Project->Settings->Link Category:Input Object/library modules:
Object/librar
y modules: 添加:libmatpm.lib libmmfile.lib libmcc.lib libmatlb.lib
libmx.lib libm
at.lib

  注1: 中间是空格,不要加逗号 注2: libmatpm.lib是C++ MathLib的库,如果是只
用C,就不用连接它了。 Ignore libraries: 添加: msvcrt.lib 注: 仅在Debug版本中需
要。
原因不明:P 以上的这些lib文件,我已经做好了,打了个包放在这里下载:matlablibs.z
ip
(64K)

  3、设置编译环境 Tools->Options->Directories Include fiels添加:
c:\matlab\extern\include c:\matlab\extern\include\cpp Library fiels添加:
c:\matlab\extern\lib
c:\matlab\extern\include 注:下面这个目录是那些lib所在的地方。 如果都挪到上面
/out:libmx.lib /mac
hine:ix86 lib /def:libmat.def /out:libmat.lib /machine:ix86 将它们放入你的项
目连接选项 Project->Settings->Link Category:Input Object/library modules:
Object/librar
y modules: 添加:libmatpm.lib libmmfile.lib libmcc.lib libmatlb.lib
libmx.lib libm
at.lib

  注1: 中间是空格,不要加逗号 注2: libmatpm.lib是C++ MathLib的库,如果是只
用C,就不用连接它了。 Ignore libraries: 添加: msvcrt.lib 注: 仅在Debug版本中需
要。
原因不明:P 以上的这些lib文件,我已经做好了,打了个包放在这里下载:matlablibs.z
ip
(64K)

  3、设置编译环境 Tools->Options->Directories Include fiels添加:
c:\matlab\extern\include c:\matlab\extern\include\cpp Library fiels添加:
c:\matlab\extern\lib
c:\matlab\extern\include 注:下面这个目录是那些lib所在的地方。 如果都挪到上面
情况。 另外,x,y当然可以是数组。 只是MCC生成的CPP文件有大量"没用"的代码. 用mcc

令生成了test.hpp和test.cpp。 用mcc命令生成了test.hpp和test.cpp。 文件demo.cpp:

以下内容为程序代码:
#include "stdafx.h"
#include "matlab.hpp"
#include "test.hpp"
void mccDemo()
{
CString str;
mwArray x, y, sum, prod;
double dx,dy,dsum,dprod;
x = 5.0; y = 10.0;
sum = test(&prod, x, y);
dx=x(1,1); dy=y(1,1);
dsum=sum(1,1);
dprod=prod(1,1);
str.Format("%f+%f=%f\n%f*%f=%f", dx,dy,dsum,dx,dy,dprod);
AfxMessageBox(str);
}

情况。 另外,x,y当然可以是数组。 只是MCC生成的CPP文件有大量"没用"的代码. 用mcc

令生成了test.hpp和test.cpp。 用mcc命令生成了test.hpp和test.cpp。 文件demo.cpp:

以下内容为程序代码:
#include "stdafx.h"
#include "matlab.hpp"
#include "test.hpp"
void mccDemo()
{
CString str;
mwArray x, y, sum, prod;
double dx,dy,dsum,dprod;
x = 5.0; y = 10.0;
sum = test(&prod, x, y);
dx=x(1,1); dy=y(1,1);
dsum=sum(1,1);
dprod=prod(1,1);
str.Format("%f+%f=%f\n%f*%f=%f", dx,dy,dsum,dx,dy,dprod);
AfxMessageBox(str);
}

  由于采用了C++数学库,语法很简单。注意数组的赋值、其中数据的存取,这些都要
仔细地看手册。 最后是跳出一个消息框,显示计算结果。 改程序启动之后,选择菜单mc
c->
demo即可。
--
GzLi 如是说:
Joy and pain are coming and going both.
Be kind to yourself and others.

welcome to Matlab (Tools for math)
http://bbs.sjtu.edu.cn/cgi-bin/bbsdoc?board=Matlab





--

※ 来源:.哈工大紫丁香 http://bbs.hit.edu.cn [FROM: 202.118.229.86]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.335毫秒