面向对象有限元程序设计及其VC++与Matlab混合编程实现
Matlab引擎实现VC和Matlab混合编程

Matlab引擎实现VC和Matlab混合编程
要想在VC集成环境下利用Matlab引擎实现VC和Matlab的混合编程,一般需要经过以下几个必要的步骤:
(1)Visual C++6.0 编译环境的设置:通过菜单Tools/ Options,打开Visual C++6.0设置属性页,进入Directorie页面,在Show Directories for下拉列表中选择Include Files,添加路径:D:\Matlab6p5\extern\include(在Matlab的安装路径下);再选择下拉列表中的Library Files,添加路径:D:\Matlab6p5\extern\ lib\win32\Microsoft\msvc60(在Matlab的安装路径下)。
编译环境只需设置一次。
(2)添加库文件: 通过菜单Projects|settings,进入Link 页面,在Object/Library Modules 框中,添加库文件名:libmx.lib 、libmat.lib 、libeng.lib。
每个新的工程文件都要单独添加库文件。
(3)在使用engine 函数的程序头文件中包含如下两个头文件:#include "engine.h";#include 。
(4)在应用程序中添加调用Matlab引擎的程序代码:
以上步骤是对VC与Matlab混合编程的编译环境进行设置,在完成了以上基本步骤后就可以利用Matlab引擎库函数engEvalString来调用Matlab的内建函数了。
VC与Matlab混合编程

VC与Matlab混合编程本⽂主要介绍VC与Matlab混合编程的两种⽅法,并详细介绍了VC向Matlab传递复杂数据:结构体的⽅法,有详细代码说明。
Matlab 主要⾯对科学计算、可视化以及交互式程序设计的⾼科技计算环境,但由于Matlab开发平台上开发的程序不能脱离Matlab运⾏环境,因⽽在处理⼀些实际应⽤问题时显得灵活性不⾜,⽽VC++则在⼀定程度上能够弥补这⼀漏洞,因此,将⼆者结合共⽤,各献其长,可以为科研⼯作和⼯程开发提供更为强⼤的技术⽀持。
Matlab作为控制系统设计的⼀种通⽤⼯具,它可以很⽅便的和VC进⾏连接。
⼀般⽽⾔,Matlab与VC混合编程的实现⽅法有很多种,这⾥主要介绍以下两种:1. VC调⽤Matlab Engine的⽅式:Matlab Engine是⼀组Matlab提供的接⼝函数,⽀持C/C++语⾔,Matlab Engine采⽤C/S(客户机/服务器)模式,Matlab作为后台服务器,⽽C/C++程序作为前台客户机,向Matlab Engine传递执⾏命令和数据信息,从Matlab Engine接收执⾏结果。
⽤户可以在前台应⽤程序中调⽤这些接⼝函数,实现对Matlab Engine的控制。
采⽤这种⽅法⼏乎能利⽤Matlab全部功能,但是需要在机器上安装Matlab软件,缺点是执⾏效率较低。
下⾯简单介绍下这种⽅式的实现步骤:1.1 API接⼝介绍先来介绍⼀组Matlab提供的引擎API接⼝:(仅作简单功能介绍,详细参数说明请参考Matlab帮助)Engine* engOpen(const char* startcmd)启动Matlab引擎int engClose(Engine* ep) 关闭Matlab引擎int engEvalString(Engine* ep, const char* string)执⾏Matlab表达式mxArray* engGetArray(Engine* ep, const char* name)获取⼀个变量数组的值int engPutArray(engine* ep, const mxArray* mp)设置⼀个变量数组的值int engPutVariable(Engine *ep, const char *name, const mxArray *pm)同上mxArray *engGetVariable(Engine *ep, const char *name)获取⼀个变量int engOutputBuffer(Engine* eP,char* p,int n)获取输出字符串1.2 VC环境配置要想在VC集成环境下调⽤Matlab引擎实现VC和Matlab的混合编程,⼀般需要经过以下⼏个必要的步骤:(以下以Matlab2008a和VS2005版本为例)(1)添加include路径:将“\extern\include”(在Matlab的安装路径下)路劲添加到VC编译器的include下(2)添加lib路径:将“\extern \lib\win32\microsoft” (在Matlab的安装路径下) 路径添加到VC编译器的lib下(3)加载lib:需要加载⾄少libmx.lib、libmat.lib、libeng.lib三个库(4)include头⽂件:在要使⽤ engine 函数的地⽅包含engine.h头⽂件1.3 引擎调⽤接下来就可以在VC中调⽤Matlab引擎了,简单的⽰例代码如下:#include "engine.h"#pragma comment(lib, "libeng.lib")#pragma comment(lib, "libmx.lib")#pragma comment(lib, "libmat.lib")void TestDeno(){Engine* pEng = NULL;if (!(pEng = engOpen(NULL))){printf("Open matlab enging fail!");return;}//call Engine plot A*sin(t)+B A=2 B=1mxArray *A = NULL;double init = 2;A = mxCreateDoubleMatrix(1, 1, mxREAL);memcpy((void*) mxGetPr(A), (void*)&init, sizeof (double));engPutVariable(pEng, "A", A);init = 1;memcpy((void*) mxGetPr(A), (void*)&init, sizeof (double));engPutVariable(pEng, "B", A);mxDestroyArray(A);Sleep(3*60*1000);engEvalString(pEng, "t=0:0.2:7;plot(t,A*sin(t)+B);");if(NULL != pEng){engClose(pEng);}}⽰例代码通过VC调⽤Matlab引擎,绘制正弦曲线,相对简单,就不再详细解释,效图如下:2. VC调⽤Matlab DLL的⽅式DLL是⼀个可执⾏的⼆进制⽂件。
C与Matlab混合编程

VC 2010与Matlab 2010混合编程青岛福沃德电子信息科技有限公司h t t p://w w w.f uw o d.c o m/在最近的项目中,需要用C调用Matlab的函数,在网上找了一些相关的资料,遇到一些问题。
在这里结合一下自己的实现过程,把整个过程整理一下。
1 实验环境Windows 7。
Matlab 2010b,安装路径:E:\Program Files\Matlab\R2010b。
VC 2010,安装路径:C:\Program Files\Microsoft Visual Studio 10.0。
2 Matlab生成DLL2.1 编译器的安装在Matlab中先安装C编译器,当然要先确定电脑里已经安装了相关的编译器。
打开Matlab 2010b,在命令窗口输入mbuild –setup以下是具体命令窗口里的选项选择,当然我只安装了VC 2010的编译器,在编译器选项里只有1个。
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 E:\PROGRA~1\MA TLAB\R2010b\sys\lcc[2] Microsoft V isual C++ 2010 in C:\Program Files\Microsoft V isual Studio 10.0[0] NoneCompiler: 2Please verify your choices:Compiler: Microsoft V isual C++ 2010Location: C:\Program Files\Microsoft V isual Studio 10.0Are these correct [y]/n? y**************************************************************************** Warning: Applications/components generated using Microsoft Visual C++2010 require that the Microsoft V isual Studio 2010 run-timelibraries be available on the computer used for deployment.To redistribute your applications/components, be sure that thedeployment machine has these run-time libraries.****************************************************************************Trying to update options file: C:\Users\BaoQi\AppData\Roaming\MathWorks\MA TLAB\R2010b\compopts.batFrom template: E:\PROGRA~1\MA TLAB\R2010b\bin\win32\mbuildopts\msvc100compp.batDone . . .到这里已经安装了编译器。
MATLAB与C_VisualC_混合编程的实现

号处理、 雷达工程、 信号分析、 时间序列分析, 以及控制论、 系统 论, 均要涉及到大量的数值计算, 尤其是矩阵运算, 往往会使科 研人员的工作进程放慢下来, 而且纷繁的编程, 一方面会延误 工作;另一方面也消耗大量的人力和精力对所编程序进行调 试。为了克服这种困难, 该文介绍一个非常高效的程序开发工 具 %&’()’* 。这种软件集所有矩阵问题及其它计算问题于一身, 它易于掌握并可很方便地根据用户自己的情况进行扩展, 形成 新的标准子程序, 且运算效率极高。 &+,-+. 是一种进行科学 和工程计算的交互式程序。 它的基本数据单元是不需要指定维 数的矩阵, 因此解决同样的数值计算问题, 使用 &+,-+. 要 比 使用 .+/01 、 234,4+5、 1 等语言编程要提高效率几倍。为了 如 能 将 &+,-+. 语 言 和 其 它 更 好 地 发 挥 &+,-+. 的 的 功 能 , 高级语言 ( 如 1 语 言 或 234,4+5 语 言 等 ) 结 合 实 现 混 合 编 程, 从而发挥各自的优势, 这对于熟悉某种语言的工程技术人 员来说, 往往可以起到事倍功半的效果, 此种方法国内外曾有
*
%+,-+. 与 / 0 1234&( /55语言混合编程的实现
为 了 充 分 利 用 %&’(&) 的 强 大 功 能 同 时 又 能 克 服 它 的 不
足, 需要采用混合编程技术, 即将 % 文件转化为可执行文件或 。为此, 有两种方法可以实现。 动态链接库( 6-- 文件)
*#$
利用 %+,-+. 的 +78 标准实现混合编程
VC和MATlAB混编(笔记)

基于COM的VC/MATLAB混合编程方法Matlab是一种脚本语言,程序运行效率低下,而且不能脱离Matlab软件环境,不能直接用于商用软件的开发。
VC具有代码效率高,执行速度快等优点,但是自身提供的数学函数相对较少,当遇到复杂的数值运算时,编写复杂的程序代码将大幅度延长软件开发周期。
VC++由于其丰富得人机界面,高效的执行效率已经成为基于Windows平台下开发商业软件的必备工具。
然而,VC++对于复杂的数值运算就有点“力不从心”了。
因此,混编可以充分发挥出各自的有点,开发出更加好用的软件。
VC和Matlab的混合编程有多种方法:①Matlab engine方法②直接调用Matlab的C/C++数学函数库③用Matlab自带的Matlab Compiler④使用Matcom工具(可脱离Matlab软件环境)⑤使用Matlab的combuilder工具生产COM组件(可脱离Matlab软件环境)1、基于COM的VC/MATLAB混合编程方法自Matlab6.5版本开始,新推出来的Combuilder支持把用Matlab编写的程序做成com 组件,供其他语言调用。
该方法实现简单,通用性强,成为VC与Matlab混合编程最有效的方法。
COM是component object module的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。
Matlab6.5新推出来的Combuilder就是把用Matlab 编写的程序做成com组件,供其他语言调用。
该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数(注重:不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是Matlab公司推荐的使用方法。
例:基于COM的MATLAB与VC混编示例1、打开matlab新建一个M文件,这里采用与上例相同的函数,注意:不能是脚本文件。
Visual-C#与Matlab混合编程示例(含代码)

Visual C# 与Matlab 混合编程由于Visual C# 与Matlab 混合编程的资料并不多,本文通过一个实例来阐述Visual C# 与Matlab 混合编程的方法。
一、混合编程的 4 种方式1. 通过从Matlab的*m文件中生成C语言版本的DLL1) 在Matlab中写好m文件;2) 使用Matlab的编译器,编译为C#能识别的DLL文件;3) 建立C#工程,在工程中引用上一步生成的文件;2. C#调用Matlab工作区计算并返回结果主要使用engOpen, engClose, engPutVariable, engEvalString, engGetVariable 函数进行操作。
大致过程如下:MatlabCSharp.engPutVariable(ep, "ml_a", mx_a);MatlabCSharp.engPutVariable(ep, "ml_b", mx_b);MatlabCSharp.engEvalString( ep, "ml_c = ml_a + ml_b ;" ); mx_c = MatlabCSharp.engGetVariable(ep, "ml_c" );3. 使用Matlab DeployTool 生成COM 组件1) 单击菜单New Deployment Project -> MATLAB Builder NE -> Generic COM Component2) 添加相应的M 文件3) 保存,编译4) 新建C#工程,引用生成的DLL文件。
4. 使用Matlab DeployTool 生成.Net 组件1) 单击菜单New Deployment Project -> MATLAB Builder NE -> .Net Component2) 添加相应的M 文件3) 保存,编译4) 新建C# 工程,引用生成的DLL 文件。
VC与MATLAB混合编程实现方法及具体实例研究

VC与MATLAB混合编程实现方法及具体实例研究夏欣【期刊名称】《青岛理工大学学报》【年(卷),期】2012(033)003【摘要】Vc++与MATLAB混合编程的方法主要有2种类型,一种是在MATLAB中调用VC,另外一种是在VC中调用MATLAB.主要研究VC中调用MATLAB的方法,该类型的方法可以方便快捷地编制需要绘制图形的用户可执行程序.比较了该类型中几种方法的优缺点,并采用VC中调用Matcomc++矩阵库函数方法,给出了一个在VC++6.0和Matcom4.5环境下实现的两者混合编程的实例.%Two kinds of method could realize VC++ and MATLAB hybrid programming. One is calling VC in MATLAB,the other is just on the contrary, calling MATLAB in VC. This article mostly studies calling MATLAB in the VC method, which can realize user exe- cutable program conveniently and quickly. Advantages and disadvantages are compared be- tween these methods, and a hybrid program example in VC++6.0 and Matcom 4. 5 is giv- en, which adopts calling MATLAB C++ matrix in VC method.【总页数】6页(P83-88)【作者】夏欣【作者单位】青岛理工大学理学院,青岛266033【正文语种】中文【中图分类】TP319;TH7【相关文献】1.基于MATCOM转化法的VC与MATLAB混合编程实现汽车I曲线的模拟绘制[J], 任龙辉;肖婵;李腾飞2.VC与Matlab混合编程实现图像处理 [J], 刘子霆;3.基于MATLAB与VC++混合编程实现配电网重构算法 [J], 李国胜;华泽玺;苗轶如4.基于VC与Matlab混合编程实现图像增强处理 [J], 刘大鹏5.VC++与Matlab混合编程实现光场光强的三维显示 [J], 杨入超因版权原因,仅展示原文概要,查看原文内容请购买。
VC与Matlab混合编程的实现

1 引 言 、
MA L ec p t %\xeni ld \p a n
V 60是 Wi o s 面下 计算 机 专 业 人 士 进 C. n w 界 d
行 软 件开 发 时 的一种 强 大工 具 .在 图形 用 户界 面 需要 说 明的是 ,如果 Ma a t b的版本 不 同 , l 这 开发 方 面有 优势 . 码效 率 高 . 而在 科 学计 算 方 里看 到 的路 径就 会有 差 别 . 如 Ma a 6 代 然 例 t b 5和 Ma— l t 面能 力却 略 显不 足 。例如 , 当我们 采 用 V C作 为 开 l 7 a 4的路 径就 会有 所 差别 b 发 工 具 解 决 图 像处 理 和 模 式 识别 领域 的 问题 时 . Se .注 意 %Malb e trk bw n 2 \ . tp 3 t %\xenl \ i3 mi a i 经常需 要 进行 一 些复 杂 的矩 阵计算 例 如计 算 矩 阵 c0o \ v6 r fmsc 0中 的 * i 件 与 你 需 要 调 用 的 函 st .b文 1
12 7
福 建 电
脑
2 1 第 4期 0 2年
V C与 Ma a t b混合 编 程 的 实现 l
黄 红兵
( 建农 林 大 学计 算机 与信 息 学院 福 建 福 州 3 0 0 福 5 0 1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第12期史贵才等:面向对象有限元程序设计及其vc++与Matlab混合编程实现
作者使用本程序成功地对国内某大型水电站地下硐室群进行了围岩稳定性分析,取得了良好的效果,验证了在vc++中嵌入MATLAB进行混合编程所生成的有限元分析程序的有效性、实用性和先进性。
图3给出了使用本程序(EBPFEM)进行该地下硐室群的计算的用户界面。
图3EBPFEM的用户界面
Fig.3
InterfaceofEBPFEM
5结论
(1)随着有限元技术处理问题的复杂性和规模的增加,传统的面向过程编程在大型有限元分析中暴露出了越来越多的缺点和问题,而面向对象编程技术可有效解决这些问题。
(2)面向对象编程方法的多态性和重载机制使得整个问题域的信息响应变得越来越简单。
同时直接的指针操作和内存使用的动态分配,使得大型有限元分析中的速度和效率都有很大的提高。
(3)采用在vc++中嵌入MATLAB进行混台编程易于进行可视化开发工作,其高效的开发效率和可靠性是值得肯定的。
(4)如前所述,面向对象技术应用于有限元有诸多优越性,但是,其作用也不应该被过分夸大。
面向对象技术仅仅是一种程序设计理念和方法的改进,它并不能突破有限元技术本身的瓶颈而使有限元变得“无所不能”。
参考文献
[1】魏泳涛,丁建华,陈君楷面向对象有限元程序设计基本数据类[J】.Ⅱq)tl大学学报(工科版),2001,33(2):17-21
wⅡYong—tao.YUJian-hua.ChenJun—kai.Object-orientedapproachtofiniteelementprogramming:basic
dataclasseslJ]JournalofSiehuanUdiversity(EngineeringScienceEdition),2001,33(2):i7—21.[2】马永其,陈罕,李斯特.面向埘象有限元程序的研究哪计算机工程与应用,2001,9:120一122,
MAYong—qi,CHENHan,uSi—teObject—orientedprogrammingforfiniteelementanalysis[J].ComputerEngineeringandApplication,2001,9:120—122
f3】SanalZ.FiniteeMmeⅡtprogrammingandCIJ]Computer&Structure,1994,51(6):671--686.
[4】FordeBWR,FoschiRO,StiemerSEObject-orientedfinitedementanalysis[J]Computer&StrIlcture.1990.
34(31:355--374
f5]UdoMeissner,JoaquinDiaz,eta1.Object—orientedanalysisofthree
dimensionalgeotechnicalengineeringsystems[AIComputinginCivilandBuildingEnglneering[C]Rootterdarn:BalkemaAA,1995.61—
65.
【61WemerH,MackertMObjectorientedmodalsandtomsintunneldesignandanalysis[A].ComputinginCivilandBuildingEngineering[C].Rootterdam;BalkemaAA.1995107—112.
[7】项阳,平扬,葛修荆面向对象有限元方法在岩土T程中的应用【J]岩土力学,2000,2l(4):346--349
XIANGYang,PINGYang,GEXiu-lull.TheapplicationofobjectorientedFEM(OOFEM)t0geotechnical
engineering[J]RockandSoilMechanics,2000,21(4):
346~349。