Vc++6.0调用matlab的数学库函数

合集下载

VC6.0调用Matlab7.0编译动态库步骤

VC6.0调用Matlab7.0编译动态库步骤

VC6.0调用Matlab7.0编译动态库步骤1、Matlab步骤a)运行安装D:\MA TLAB7\toolbox\compiler\deploy\win32\MCRInstaller.exeb)安装matlab编译器MCR;c)配置mbuild –setup,( mex –setup可以不用);d)编写m函数文件;e)mcc –B csharedlib:libdllname mfilename.m,生成libdllname.h,libdllname.dll,libdllname.lib, libdllname.ctf文件。

2、VC步骤a)建立工程;b)将1.e生成的四个文件拷贝到工程目录下;c)在VC++6.0 下进行如下设置包含目录: Tools—>Options—>Directories—>Showdirectories for: Include files—><matlab7.0 安装目录>\Extern\Include;d)在VC++6.0 下进行如下设置lib文件包含目录:Tools—>Options—>Directories—>Show directories for: Library—><matlab7.0 安装目录>\Extern\Lib\Win32\Microsoft\msvc60;e)Project—>Add to Project—>Files⋯将C++头文件"libdllname.h"加入到VC++工程中,并在工程的头文件中加入#include "libdllname.h"。

还需设置当前工程的链接选项Project—>Settings—>Link—>Category:Input—>Object/library modules: dllname.lib;f)另外,还需将<matlab7.0 安装目录> \Extern\Lib\Win32\Microsoft\msvc60下所有库文件加入到VC工程中,Project—>Settings—>Link—>Category:Input—>Object/library modules: libeng.lib libfixedpoint.lib libmat.lib libmex.liblibmwarpack.lib libmwlapack.lib libmwrefblas.lib libmwservices.lib libmx.lib libut.libmclcom.lib mclcommain.lib mclmcr.lib mclmcrrt.lib mclxlmain.lib;g)初始化:mclInitializeApplication(NULL,0); lib dllname Initialize();h)增加mxArray 输入输出公共变量,用于数据交换。

对VC++6.0与Matlab的混合编程技术的探讨

对VC++6.0与Matlab的混合编程技术的探讨
Malb的所有 函数 ; ) V + 中调用 包含 Ma a t a (在 C + 3 tb l 的数学 函数 库进行 编程 . 用 数学 函数 库中 的规定 f 吏 函数 。 其中 , 采用方 式( 和() 要 Malb 1 2 ) 需 t 环境 的 支 a
表 1 Ma a 擎库 函数 t b引 l
Malb V + 的混 合编 程是 通过 应用 程序 t 与 C+ a 接 口( P) A I实现 的 。Malb中提供 的 v + 应 用程 t a C+ 序接 口方 式有 3种 :)通过 调用 语 言编 译器 和链 ( 1 接 器 。将 Mal tb程 序 编 译 成 V + 文 件 ; ) a C+ ( 在 2 V + C +中使 用 Malb引 擎 服 务 ,通 过 引 擎 调 用 t a
很好 的程 序 设 计 方 法 。
关 键 词 : 用 程序 接 口 ; t b引 擎 ; C + 客 户机 / 务 器 应 Ma a l V +; 服
Mal t b是 Mah ok 公 司推 出 的 一 套高 效 a tw rs 1 用户 数 据 请 求 (C 数 据 类 型 )、x ry 种 , Poet a e中输 入项 目名 , 项 目引 导完 、 V 2m Ar a 在 r cnm j 按 率的数 值计 算 和可视 化软 件 ,具有 极其 强大 的数 矩 阵 ( 数 据 结 构 )、 t b 命 令 成 项 目工程 创建 。 3 Mal a 在这 里我们 创建 一个 MF C单文 值分 析 、矩 阵运 算 、信 号 处 理 和图 形显 示 功 能 ; 4 Ma a 、 t b变量 ( l 数据 结 构) 、 t b命 令 6 Malb 档工程 , 名为 D m eg 5 Mal a 、 t a 命 e on 。 Maa t b以其强 大的数 据处 理能 力 和丰 富的工 具箱 变量 ( l 数据 结 构 ) 、 x r y矩 阵 ( 据 结 果 ) 、 7m Ar a 数 8 31 .2打开 界面 , 菜单 栏 中选 择 T o -o - _ 在 ol >p s

vc++6.0与matlab7.1 混编配置和注意事项

vc++6.0与matlab7.1 混编配置和注意事项

一,配置matlab7.1为了能够使用MA TLAB的Complier将*.m函数文件编译为动态链接库DLL,必须对MATLAB的环境做出相应的设置。

具体做法如下:1.。

在MATLAB的Command Window下输入命令mbuild –setup,并根据MA TLAB的提示选择合适的编译器,笔者使用的是Microsoft Visual C++6.0,进行对C++连接环境的设置。

过程如下:>> mbuild -setupPlease choose your compiler for building standalone MA TLAB applications:Would you like mbuild to locate installed compilers [y]/n? ySelect a compiler:[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2008a\sys\lcc[2] Microsoft Visual C++ 2005 in d:\Program Files\Microsoft Visual Studio 8[3] Microsoft Visual C++ 6.0 in D:\Program Files\Microsoft Visual Studio[0] NoneCompiler: 3Please verify your choices:Compiler: Microsoft Visual C++ 6.0Location: D:\Program Files\Microsoft Visual StudioAre these correct [y]/n? yTrying to update options file:C:\Documents and Settings\hk\Application Data\MathWorks\MATLAB\R2008a\compopts.batFrom template: D:\PROGRA~1\MATLAB\R2008a\bin\win32\mbuildopts\msvc60compp.batDone . . .2.。

VC中使用matlabC++数学函数库

VC中使用matlabC++数学函数库
方, 注意一定要确保这些库文件存在。 S 实 例 程 序
求关于以上两矩阵的广义特征值问题。
!,$5,"*88 ,9$ *4154&$ +88&’*+,’41 ^’1*&2#$_5,#+%-"9_ ^’1*&2#$_)+,&+("988_ ^’1*&2#$‘5,#&’("97?!25$# %40 abHTcDNFFaDD!? ^’%#$% MFF ^’%1#$% abHTcDNFFaDD ^#$%’1$ abHTcDNFFaDD Z ^$1#’% ^$1#’% !)+,&+( 中的数据存储是以先列后行的顺序存储 O40,0+1 相同 5,+,’* #42(&$ #+,+YWX: e { YZdYdYdYdSdYd[dJYd[} 5,+,’* #42(&$ #+,+[WX: e { Yd\d]d[dAd>dSd@d@} ’1, )+’1f’1, +0;*d*9+0!+0;<WXg { !*0$+,$ ,Q4 )+,0’*$5 )QP00+G )+,ZfSdSd#+,+Yge!即生成矩阵 P )QP00+G )+,YfSdSd#+,+[ge!即生成矩阵 h !定义几个 )QP00+G 矩阵用于输出结果 )QP00+G PPdhhdUdVdie !调用数学函数库 UVf g计算广义特征值问题 !实际上利用了数值计算中的 UV 算法 PP:jRfkhhdkUdkVdkid)+,Zd)+,Yge !80’1, ,9$ )+,0’*$5 !实际上 )QP00+G 类重载了 FKK流操作符77与‘‘ !可以很方便地输出结果 *42,‘‘)+,Z‘‘$1#&e *42,‘‘)+,Y‘‘$1#&e !输出计算结果 *42,‘‘_PP_‘‘$1#&‘‘PP‘‘$1#&; !特征值利用 PP 主对 *42,‘‘_hh_‘‘$1#&‘‘hh‘‘$1#&e角元素除以 hh 相应的主对角元素 *42,‘‘_U_‘‘$1#&‘‘U‘‘$1#&e!PP:U!W)+,YX!V *42,‘‘_V_‘‘$1#&‘‘V‘‘$1#&; !hh:U!W)+,[X!V *42,‘‘_i_‘‘$1#&‘‘i‘‘$1#&e!i 为特征元素 *42,‘‘_PPfYdYg?hhfYdYg_‘‘PPfYdYg?hhfYdYg‘‘$1#&e *42,‘‘_PPf[d[g?hhf[d[g_‘‘PPf[d[g?hhf[d[g‘‘$1#&e *42,‘‘_PPfSdSg?hhfSdSg_‘‘PPfSdSg?hhfSdSg‘‘$1#&e 0$,201fabHTcDNFFaDDge } !特征值J["[Z\= !特征值JY"\=@[A !特征值 Z"[Y[YA

VC调用matlab的步骤

VC调用matlab的步骤

数据拟合的关键步骤数据拟合的好坏与模型是否能够成功有很大的关系,因此在数据拟合上,该软件库使用了比较成熟的数据拟合算法,即采用比较权威的高效计算软件Matlab6.1中的数据拟合函数进行拟合。

对于在Visual C++中调用Matlab应用程序接口,关键在于设置编译环境和使用正确的调用规则,然后,在发布软件时携带必要的动态连接库就可以保证程序的独立性[10]。

1、设置Visual C++编译环境对于调用Matlab的应用程序来说,只要保证程序的编译路径中包含Matlab 的目录下的Extern\Include目录,然后在程序中添加libmx.lib、libmmfile.lib、libmex.lib和libmatlb.lib即可[14]使用Matlab提供的高效算法。

而针对于Visual C++6.0来说,具体设置如下:图3.1 选项目录属性页第一步:打开应用程序工程后,在‘工具’菜单下选择‘选项’选单,将弹出选项对话框,选择其中的‘目录’属性页,如图3.1所示,在其中的Showdirectories for下拉式选项框中分别选择Include Files和Library Files,在下部的编辑框中输入以下路径:Matlab根目录\EXTERN\INCLUDEMatlab根目录\EXTERN\LIB然后选确定按钮。

第二步:选择下拉菜单Project中的菜单项Add To Project>>Files,将Matlab根目录\\extern\lib\win32\microsoft\msvc60下的四个lib文件:libmx.lib、libmmfile.lib、libmex.lib、libmatlb.lib添加到工程中。

完成上述工作后,就可以在Visual C++中调用Matlab数学函数及计算引擎了。

2 、Matlab应用程序接口调用规范在需要调用Matlab应用程序接口的单元文件.Cpp开头添加#include “Matlab.h”语句,然后在程序实现部分调用Matlab函数。

C#调用C++函数库,c++调用matlab数学函数库实例

C#调用C++函数库,c++调用matlab数学函数库实例

C#调用C++函数库,c++调用matlab数学函数库实例在上一篇关于调用MatLab数学函数库的文章中,基本上只说了一件事情:MatLab的底部数学计算引擎其实都是一些C++函数库,这些函数库被编译成了C++动态链接库(也就是在安装目录下的bin\win32文件夹中的那些.dll文件),我们可以直接来调用这些存在于.dll文件中的函数,而与MatLab运行环境无关。

当然,这样做,可能会觉得有点儿盗窃的感觉,不过,可以肯定的是,这不是盗窃,这是合法的(因为这个函数库向外公开,也是MatLab产品的一部份,公司还为这个专门出了文档。

可是,好像7.0以后的版本就没有这么好的事儿了)。

在这里又多了一种语言——“C#”。

主要是因为如果要开发一个软件,那么,在现在这个时代里,用C++来做界面显示,实在是一种非常不可取的事情。

虽然也用VC6.0的MFC来开发过软件,但现在想想还是很后怕的。

而C#做界面显示和整个程序的架构就显得非常的简单方便了。

所以,我的想法是这样的:在C++中调用MatLab数学库中的函数(我真的是把绝大多数的数值计算都压到MatLab 身上了)包装成我自己的数学计算库,然后再在C#中调用我自己的数学计算库中的数值算法。

这个过程,开始的时候我也不知道能不能成功,后来经过不断的尝试发现是可行的。

下面就举一个完整例子写到下面,因为我非常害怕自己会忘掉。

就举一个LU分解解一次方程组的例子吧:1、安装MatLab6.5主要是为了得到MatLab数学库的头文件.dll文件和.lib文件,当然可以从其它电脑上把包含这些文件的文件夹拷过来用,具体是哪些文件夹,后面会说到。

2、启动VC6.0,新建一个工程,新建的时候选“工程”页中的"Win32 Dynamic-Link Library",表示要建一个动态链接库项目。

3、建好了.dll(Dynamic-Link Library的简称)项目之后,首先要做就是进行包含目录设置:“工具”—>“先项”—>“目录”—>“目录[S]”在这个下接框中选“Include files”项进行头文件库设置,在下面的文本框中输入要需要的头文件的所在的文件夹目录(这样设置之后,在需要的时候,编译器就会这些目录下在查找头文件),这里应该输入是D:\MatLab6dot5\extern\include\cpp和D:\MatLab6dot5\extern\include。

VC中调用matlab配置方法

VC中调用matlab配置方法

ATLAB提供了许多方法与VC程序的通信:MATLAB引擎(ENGINE)模式,采用了客户机/服务器(CLIENT/SERVER)的计算形式,通过MA TLAB应用程序接口(API)中有关函数,在VC 环境中调用MATLAB函数,但此种方法需要MATLAB环境后台支持,因此系统必须安装MATLAB;MA TLAB本身提供的MCC工具编译,编译m文件生成VC++或c语言,直接在VC中使用;MATLAB的MEX工具将m文件编译成DLL,供VC调用。

MATLAB现具有的MA TLAB Add—in(其包装了MCC、MEX)更方便了第二、三种方法的应用,现本系统的实现就是以第三种为基础的。

2.1 MA TLAB与VC实现互连为了在开发时实现对MA TLAB的具体功能的调用,应首先在操作系统中安装MATLAB工具软件,之后并运行此工具软件,依次执行“mex –setup;mbuild –setup;cd(prefdir); mccsavepath;”命令。

之后运行VC开发工具,从VC++菜单中依次打开“Tools->Customize->Add-ins and Macro Files”,选中MA TLAB Add—in宏,可以看到工具栏中多了一个。

现在VC就可以利用它来得到m文件所对应的c、c++文件。

2.2 开发工具VC运行环境设置开发时,须对VC的开发环境变量进行设置。

通过“Tools->Options->Directories”找到的“Directories”项中添加环境变量。

添加头文件和库文件搜索路径有(本计算机的文件搜索路径为):F:\MATLAB6P5\EXTERN\INCLUDEF:\MATLAB6P5\EXTERN\INCLUDE\CPP同时将MA TLAB的链接库添加到VC中。

从“Tools->Options->Directories”中“Show directories for:”下拉框里选择“Library files”,然后再在“Directories”项中添加环境变量。

Matlab程序在VC中的调用

Matlab程序在VC中的调用

Matlab程序在VC中的调用摘要:利用vc与matlab接口技术,用VC 调用Matlab 编译的DLL 文件进行复杂数据处理不仅简洁通用,更具有很强的实用性和可扩展性,在科学计算与工程运用领域具有广泛的推广应用价值。

关键词:MATLAB ;VC;DLL ;接口1. VC与MATLAB简介VC 是大家都非常熟悉的一个软件,它是MicroSoft公司开发的在Windows 环境下主要软件开发环境之一,用其中的MFC 可以快速方便地编写出各种友好的用户界面,且用VC ++ 开发的系统具有容易维护升级、界面友好,代码效率高、执行速度快等一系列优点,因此已成为目前应用软件开发中的主流工具之一。

①、MATLAB是Mathworks 公司开发出的一款著名软件,如今已成为世界上使用最广泛的数学软件,它具有强大的数值计算、数据处理、图象显示、符号运算、系统分析、模拟仿真功能,由于受到各个领域专家学者的青睐,在他们的共同努力下,经过多年的发展,如今的Matlab 不仅拥有功能完善的内部函数库,更有专用于各领域的强大工具包,在这个平台上只需寥寥数语便可完成在其它环境中复杂度不可想象的功能;另外,开放性也是Matlab 一个最重要、最受欢迎的特点,除内部函数外,所有Matlab 工具包中主包文件和各工具包文件都是可读可改的源文件,用户可通过对源文件的修改来形成新的工具包,甚至亦可完全由自己编写源文件来构筑自己研究领域的专用工具包。

在欧美发达国家中,Matlab 已经成为应用线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能;在设计研究单位和工业部门,Matlab 也被广泛地用于研究和解决各种具体工程问题。

Matlab在中国得到充分的重视,在各科研机构和高校中得到大量的使用。

2 利用VC 与MATLAB接口实现matlab程序在VC中的调用(1) 在Matlab 环境中编写. m 文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Vc++6.0调用matlab的数学库函数
前段时间在摸索如何在VC++6.0当中调用Matlab的里的数学库函数。

当时弄得我很是郁闷,现在想想,自已走了很多弯路,原来,是如些的简单。

所以,与出来和大家一起讨论和分享。

一、关于Matlab6.x
首先,matlab它本身也是用C++语言编写的,具是什么是编译器我倒是忘记了(好像是Borland吧)。

说Matlab是一种科学计算语言吧,其实也可以,不过,其实也可以把它看作是一个科学计算软件。

它里面有很多的已写好的数值计算、分析以及统计等的函数。

然后在Matlab里写文件(比如.m文件),文件里的每一个语句其实都是在调用它里面的函数。

说白了,Matlab就是为我们写了一大堆的数学运算函数,然后再能过文档(help指令)来告诉我们怎么调用这些函数,就是这样。

其次,为什么要选择Matlab的6.x版?现在最新的版本好像是7.x了吧,照理说,就应该用最新版的。

可是,最新版的Matlab(7.x)不再把数学库公共了,如果想要调用它里面的函数库,就必须将Matlab在后台运行。

也就是说,不管你用什么语言,只要你想调用Matlab7.x里面的函数,那么你的程序就必须在Matlab运行环境下运行。

哦,刚才忘记说了,这篇日志的目的是要建立独立于Matlab 运行环境的程序。

最后,Matlab6.x已推出七八年了,会不会和7.x版本相比而有点过时了?我是这样理解的,如果你调用的函数不是一些当前数值计算领域的新兴问题,那就是没有问题的。

对于我们工科的人来说,10年前的伟大的mathworks公司绝对可以提供我们想要的计算方法了。

所以,6.x,没问题。

二、关于C++和Matlab混合编程
关于这个主题的文章是非常之多的,足以让你眼花缭乱了。

更让我感到不解的是,有好多人居中然以C++和Matlab混合编程为主题,在正式期刊上发表文章。

不信你可以在知网或万方上搜搜看,呵呵,一大把。

不过,我还是要感谢这些文章啊,因为这些文章让我理解了什么是“灌水”。

所谓的C++和Matlab混合编程大概是指这样的一个过程:
1)在Matlab里写.m文件,当然,这种文件中除了函数好像就没有别的什么了。

2)在Matlab里的命令行中使用mcc命令生成C/C++代码。

当然,还可以直接生成.dll和.lib,这里的.dll和.lib都是C的,不能生成C++的动态链接库(反正文档里是这么说的)。

3)在C/C++编译器中嵌入生成的C/C++源码,或调用生成的.dll。

我说,何必这么麻烦呢?
三、弯路子
如果要按照上面所述的三个步骤来进行C++和Matlab混合编程的话,那就必须要安装Matlab了(要不然怎么编写.m文件和使用mcc命令)。

在安装Matlab的时候,注意,最好是安装在和你的C/C++编译器所在安装目录的同一个目录下,这一点很重要,要不然,你会发现mcc命令不好使。

安装好之后,你就可以按以上的三个步骤来编程了,具体的一些细节,相关的文章实在是太多了,这里就不多说了。

因为,我觉得这是一种弯路方法。

四、言归正传
拜完了“前辈们”,终于轮到我说话了。

其实,不用安装Matlab,不用.m文件。

其实,说到底,Matlab就是为我们写了许多数学计算函数(可以调用的大约在400多个),然后把这些函数放在一个个的动态链接库中。

是的,就是这样理解的,不用想得太多了。

那么既然是这样,我们直接调用这些库不就成了嘛,是的,就是这样的,就是这么简单。

首先,我们需了解matlab的安装目录里都有些什么东西,当然,在这里,我们就只关心它的数学库在什么地方。

是这样的,只用关心两个文件夹:<matlab>/bin和<matlab>/extern(<matlab>指的是matlab的安装目录),是吧,找到了吧,bin这个文件夹,看到这个
名字就知道它是里面一定是一些.dll,果然是这样的,matlab里面的所有c/c++数学库都在这个文件夹里面的。

别外,要想引用这
些.dll,你当然需要相应的.h/.hpp头文件和.lib文件了,那么,在<matlab>/extern/include里面就是头文件,而在
<matlab>/extern/lib就是.lib文件(静态链接库)了。

我们所需要的东西就是这么多了,别的,真的不需要了。

所以,我说,不需要安装matlab了,你直接在一台装有matlab的机器上把这两个文件夹(<matlab>/bin和<matlab>/extern)拷到你的电脑来就行了。

两个matlab的两个官文档是很有用的:MATLAB C++ Math Library User’s Guide 和MATLAB C++ Math Library Reference具体是这两个文档,顾名思义,就不用我说了,如果你发现在网上找这两个文档有困难的话,我的机器上倒是有。

五、总结
虽然,一二三四五这么一串说下来是说了很多没有用的话,不过对于新手来说,应该是有一定帮助的,真的可以节省很多宝贵的时间。

唉,其实真是还有一些比较重的细节的东西没有写出来,比如
c++编译器环境的配制,mwArray和mxArray的困惑,c++函数的调用格式与matlab里调用的异同等,不过,对于新手来说,上面的这些东西已经够烦的了,呵呵。

下午就要回家了,回家过年,就到这里吧。

相关文档
最新文档