基于VC++和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是⼀个可执⾏的⼆进制⽂件。
基于COM接口的VC_与MATLAB混合编程
这种方法可以很灵活的调用 Matlab 来编写应用程序,但要求 读者对 C/C++语言非常熟悉,并且这种模式不能包括所有的 Matlab 函数,尤其是无法充分使用 Matlab 提供的详尽的绘图 函数。 1.3 用 Matlab 自带的 Matlab Compiler
Matlab Compiler 的作用是将 m 文件转化成 C/C++代码 (也就是通常所用的 mcc 命令),这种源代码需要用 C/C++编 译器编译连接成独立应用程序,在将 m 文件转成独立应用程 序的过程中生成的 C/C++文件,原则上是可以被其它的 C/C++ 代码调用的,编译器可以通过设置 mcc 命令的选项,将 m 文 件编译成动态链接库文件、C/C++文件、可执行文件等一系 列文件。到 matlab R21.1 为止,Matlab Compiler 的 m 程序转 换成 C/C++代码功能有很多限制:
[3]ZSP 500 Digital Signal Processor Core, technical manual,
果为参照,不断地修改,为大规模复杂运算的实现提供了时 September 2003
间保障,满足了实时性要求,各种DSP尽管结构和指令集不
[4]ZSP 500 DSP Architecture, 2003
·58·
计算机与信息技术
软件纵横
⑵部分绘图语句无法实现或得不到准确图象,尤其是三 维图象;
⑶当涉及到的复杂函数调用时嵌套的文件数量很多。 因此在不涉及到三维做图以及 m 文件不大的情况下推荐 使用。 1.5 使用 Matlab 的 Combuilde 工具 COM 是 component object module 的简称,它是一种通用 的对象接口,任何语言只要按照这种接口标准,就可以实现 调用它。Matlab6.5 新推出来的 Combuilder 就是把用 Matlab 编写的程序做成 com 组件,供其他语言调用。该方法实现简 单,通用性强,而且几乎可以使用 Matlab 的任何函数(注意: 不支持脚本文件,脚本文件使用时要改为函数文件),因此在 程序较大、调用工具箱函数或调用函数较多时推荐使用,这 也是 Matlab 公司推荐的使用方法。
VisualStudio与Matlab实现混合编程
VisualStudio与Matlab实现混合编程环境:Win10vs2010Matlab2015⾥⾯有很多选做的内容,其中2、3必做1.Matlab环境设置:(选做)我没有做这步,因为打mbuild -setup指令不识别,缺少SDK,但是可以正常调⽤Matlab,这步是其他⽅式调⽤Matlab中的⼀步,使⽤Matlab⽣成DLL⽂件,VS引⽤要建⽴独⽴运⾏的C应⽤程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
Matlab编译器使⽤mbuild命令可以直接将C/C++源代码编译为独⽴运⾏程序,在这些源代码中可以使⽤Matlab提供的接⼝来调⽤Matlab数学库函数。
虽然⽣成的可执⾏程序可以脱离Matlab环境运⾏,但是它需要Matlab C/C++数学库⽂件或者图形库⽂件的⽀持才能运⾏。
但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调⽤,则不仅可以独⽴与Matlab环境,也不需要那两个库函数的⽀持。
在 Matlab 的Command Window 下输⼊命令。
mbuild – setup操作过程如下图:然后输⼊命令mex – setup以类似的⽅法配置编译器。
Matlab 的配置完成。
2.VS环境设置(必做)(1)设置Include 和Library ⽬录项⽬右键->属性->VC++⽬录->包含⽬录:添加<MATLAB>\R2010b\extern\include\win64 我的是:D:\RUANJIAN\Matlab\extern\include\win64<MATLAB>\R2010b\extern\include\ 我的是:D:\RUANJIAN\Matlab\extern\include项⽬右键->属性->VC++⽬录->库⽬录:添加<MATLAB>\R2010b\extern\lib\win32\microsoft 我的是:D:\RUANJIAN\Matlab\extern\lib\win64\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft截图::(2)设置⼯程⽬录: ( 我并没有设置)项⽬右键->属性->C/C++->常规->附件包含⽬录:添加<MATLAB>\R2010b\extern\include\win64<MATLAB>\R2010b\extern\include\项⽬右键->属性->链接器->常规:添加<MATLAB>\R2010b\extern\lib\win32\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft项⽬右键->属性->链接器->输⼊->附件依赖性:添加 (必做)libeng.liblibmat.liblibmex.liblibmx.lib 注:1.lib⽂件包含在<MATLAB>\R2010b\extern\lib\win64\microsoft,可根据需要增减 2.附件依赖性在VS2010前以空格隔开,在VS2010后使⽤;隔开。
Matlab与VC(MFC)混合编程(介绍Matcom与Matlab 引擎两种方式)文库
本文由wolf1sky贡献doc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
Matlab 与 VC 混合编程 1:一、采用 Matcom1、目标1. 测试在 VC 中调用 MatrixC++库,生成矩阵并显示 2. 测试 VC 中调用.m 文件2、步骤2.1 目标 1<1>建立 VC 工程,添加库 v4501v.lib,有两种方法:?向工程中添加文件 v4501v.lib 在 Setting/link 中添加库 v4501v.lib(这样写的前题是 VC 路径设置正确,即在 Options/Directories 中设置,否则请注明详细路径)二者选其一就可以了。
<2> 添加头文件 #include "matlib.h" (这样写的前题是 VC 路径设置正确,即在 Options/Directories 中设置,否则请注明详细路径)建议:最好在工程中把文件 matlib.h 添加进来,方便查看函数详细说明 <3>现在就可以调用 Matrix中的C++函数了,例子如下:// Init matcom initM(MATCOM_VERSION); winaxes(AfxGetMainWnd()->GetSafeHwnd()); Mm a,b; a = (BR(1),2,3,semi,4,5,6,semi,7,8,9); a = transpose(a); b = (BR(1),2,3,semi,4,5,6,semi,7,8,9); m_1.Format("%3f %3f %3f \r\n%3f %3f %3f \r\n%3f %3f %3f \r\n",a.r(1,1),a.r(1,2),a.r(1,3),a.r(2,1),a.r(2,2),a.r(2,3),a.r(3,1),a.r(3,2),a. r(3,3));//m_1 是一个 CEdit 控件 UpdateData(FALSE); exitM();2.2 目标 2<1>首先用 Matlab 调试成功以下两个有依赖关系的.m 文件文件 1:equation.m function y = equation(a,b) y = a * b; 文件 2:CallE.m % function name function [o1,o2] = CallE(x) if (nargin ~= 1) error('arguments must be inputed!'); endif (x == 1) a = reshape(1:9,3,3); elseif (x == 2) a = reshape(11:19,3,3); else error('input error'); end b = magic(3); o1 = equation(a,b); o2 = o1 + 1; <2>将以上两个文件放在同一个目录下,启动 MatCom 编译运行 CallE.m, >> CallE(2) 则在同一目录下生成一个 DEBUG(或者是 Release,在 MatCom 的菜单项 Configuration 中选择)目录下可以找到相应的.cpp 及.h 文件,把它们全部拷贝到 VC 工程目录下,也可以自己建一个文件夹 <3>在 VC 项目中添加这些文件,并在头部添加相应.h 的引用,如下: #include "./matlib/equation.h" #include "./matlib/calle.h" <4>添加调用函数的代码,如下: Mm a,b,c; a = BR(2); 表示输入参数到输出参数的间隔,《MatrixLIB user's 详见calle(a,i_o,b,c); //i_o 是一个间隔符,Guide》m_2.Format("%3f %3f %3f \r\n%3f %3f %3f \r\n%3f \r\n",b.r(1,1),b.r(1,2),b.r(1,3),b.r(2,1),b.r(2,2),b.r(2,3),b.r(3,1),b.r(3,2),b. r(3,3)); %3f %3fUpdateData(FALSE);3、遇到的问题及解决方案<1>当在 VC 工程中添加由 Matcom 转换的 cpp 及 h 文件后,注:如果在编译中出现下列错误:fatal error C1010: unexpected end of file while looking for precompiled headerdirective 解决:进行下列设置:工程->设置-> C/C++ 选择 precompiled headers 选解决:择第一或第二项:自动选择预补偿页眉,如图:<2>使用Matcom 后,生成Debug 版没问题,而生成Release 时链接出错,nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMT.lib(delete.obj) 解决:解决:将"Project 属性" -> "C/C++" -> "代码生成(codegeneration)" -> "运行时库(run-time library)" 项下修改应用程序的默认标准库版本,我修改成 Debug Multithreads 就可以了,原因是安装Matcom 时库为调试版<3>在其它机器上运行出错解决:解决:将 ago4501.dll v4501v.dll glu32.dll opengl32.dll 附带发布即可 <4>关闭程序后进程没有退出解决:解决:添加语句winaxes(m_hWnd);参考文献1、何东健等.《数字图像处理》.西安电子科技大学出版社.20032、邓科.浅析 VC 与matlab 接口编程(一). VC 知识库,41 期3、邓科.浅析 VC 与 matlab 接口编程(二). VC 知识库,42 期4、Matcom 参考手册Matlab 与 VC 混合编程 2:二、通过 Matlab 引擎与 VC 混合编程--飞狼编程宝典--明明知道选择你是一个错误,却为何那么地坚持这个错误……基于 Matlab 引擎的混合编程方式无法脱离 Matlab 环境,却为何还要使用它?根据本人的实践,对于一般应用,如矩阵运算,图像操作等,使用 Matcom 就已经足够,而且能够脱离 Matlab 那个巨大的环境而独立运行,但是,对于很多好用的 Matlab 工具箱,我们却无法直接在 VC 中调用。
VC和matlab混合编程画图实践
VC和Matlab混合编程画图实践2013-03-14【摘要】在DSP软件开发中,基于代码的可移植性的需要,首先要基于VC平台开发出纯C定点版本。
为了对定点代码的精度和性能进行充分测试,需要对其进行定点仿真并与浮点的性能比较。
浮点代码的性能可以很容易的通过Matlab仿真得到,但由于VC与Matlab对仿真结果的保存形式不同,比对结果的过程需要人为完成。
并且VC对定点仿真的结果保存为文本形式,不够直观。
当仿真或测试条目较多时,这一过程将变得重复而繁琐,因此为了将这一过程变得更自动化、更直观,本实践介绍了一种利用VC调用Matlab动态链接库的方法,通过VC直接调用Matlab的方法进行画图,能够更直观、更方便的分析定浮点仿真结果的差异。
【关键词】Matlab Engine动态链接库VC定点仿真Matlab画图一、问题的提出在VC平台软件开发中,需要对实现的定点代码进行定点仿真,观测最后的BER曲线,并与浮点的结果做对比,观察其性能差异。
然而,VC平台的仿真结果只是保存在数组中的结果,不能直观的展示给测试人员,仍需人为的提取分析,这样便造成重复劳动和时间上的浪费,因此需要寻找一种简单易行的方法,实现将VC的仿真结果画图呈现出来。
二、解决思路Matlab作为数据仿真分析的工具十分强大,其包含了非常丰富的数学运算库和与外部工具的接口,众所周知,利用Matlab画图是十分方便的,只需将仿真结果,外加画图的参数传递给Matlab的命令函数,就能非常方便的完成画图,简单易行。
Matlab与VC的接口方式有很多种,如引擎的形式,COM 组件的形式,动态链接库的形式等等,因为动态链接库的形式在之前的实践中已经研究过,并且相对成熟,因此本实践将着重介绍将Matlab的函数编译成动态链接库供VC调用方法,对于引擎的和其他方式略做简单介绍。
三、实践情况3.1 工具与环境准备1)Matlab环境准备:本实践中采用的Matlab版本为R2011b。
基于VC_和MATLAB混合编程绘制三维图形
第 16 卷第 1 期 2 0 08年 2 月 文章编号: 1005- 1228( 20- 17 作者简介: 张 慧( 1980- ) , 女, 江苏徐州人, 在读硕士, 研究方向: 焊接设备及自动化; 杨 峰( 1978- ) , 男, 安徽凤阳人, 讲师, 硕士, 研究 方 向 : 焊 接 质 量控制及装备。
第 16 卷第 1 期
张 慧, 等: 基于 VC++和 MATLAB 混合编程绘制三维图形
0 引言
MATLAB 进行二维、三维图形显示时, 程序语法简 单, 图形精度高, 用 VC++则需要几十行甚至数百行的 程序, 但 VC++容易做出各种用户界面。在 VC++环境 下调用 MATLAB 中的图形显示函数, 将二者结合进行 编程, 则可实现 VC++和 MATLAB 在此功能上的互补 及数据共享和数据可视化。
·30·
电脑与信息技术
2008 年 2 月
z
B a c k wid th(mm)
本 例 中 用 到 的 数 据 minx=- 4, maxx=4, miny=- 4, maxy=4, 所得图形如图 3 所示:
编译器使用了 C\C++库函数, 需要使用 mbuild - setup 和 mex- setup 对编译器进行配置。这两条命令是 自动搜索系统上安装的编译器, 然后对所选择的进行 核对, Matlab 下的环境配置设置一次即可。 2.1.2 mcc 编译 M 文件
编写绘制三维曲面的 M 函数文件, 命名为 tripic- ture.m, 程序如下所示:
Matlab与VC混合编程
浅析VC与matlab接口编程(一)作者:孙科QQ:44760299邮箱:c_dinco@Matcom是mathTools公司推出的一个能将M文件转化成相同功能C++代码的工具。
相比Matlab自带的编译器Compiler,用Matcom转化代码要简单和方便得多。
本文将结合作者编程经验,以VC6.0和Matcom为例,详细介绍如何利用Matcom进行VC与Matlab的联合编程。
Matcom安装安装Matcom前要已求安装VC6.0。
在安装过程中出现选择编译器对话框,选择“是”(图一)。
出现选择是否安装Matlab时,选“否”。
其他选项采用默认设置。
Matcom可以独立于Matlab运行,但需要外部的C++编译器,指定Matlab的位置是为了让编译文件中需要的一些系统函数找到路径用的。
图一安装完成后,启动界面MIDEVA(图二)。
MIDEVA集成开发环境包括命令行窗口、变量列表窗口、命令列表窗口和编译链接信息窗口等几部分,并有详细的帮助文档。
图二Matcom命令输入方法与Matlab相同。
如果安装在中文版操作系统时,输入命令前加一空格。
(如图三)。
图三下面详细介绍如何将m文件编译后放入VC中。
1、启动MIDEVA ,File->New,新建如下Test1.m文件:x=1:0.1:10; y=sin(x); plot(x,y);将文件保存(如图四)。
图四m文件保存的默认位置为:matcom安装目录\matcom45,生成的C++文件保存的默认位置为:matcom安装目录\matcom45\Debug\,本例matcom安装目录为C盘即 C:\matcom45\Debug\,在该目录下将会产生Test1.h、Test1.cpp、Test1.r 、Test1.obj文件。
2、在VC中用MFC Wizard(exe)创建一个基于对话框名为Example的工程。
在面板上添加一个ID为IDC_BUTTON1按扭。
MATLAB与Visual C++混合编程在储层三维建模系统中的应用
MATLAB与Visual C++混合编程在储层三维建模系统中的应用摘要:利用Visual C++与MATLAB进行混合编程,开发了三维储层建模系统。
解决了MATLAB 不能实现端口操作、实时控制和V isual C++处理复杂数值运算效率低的问题,二者功能互补,为三维储层建模的复杂计算及计算结果的可视化提供强大的技术支持。
MATLAB将河流储层建模系统中计算模块转化成V isual C++的代码,并将代码用V isual C++编译器编译连接成独立应用程序。
V isual C++编写的可视化交互操作界面对MATLAB 编译后的动态链接库文件进行调用,实现复杂计算功能。
关键词:MATLAB;V isual C++;混合编程;储层三维建模对河流相进行储层建模,我们通常采用自回避随机游走算法,约定游走粒子不允许到达曾经访问过的位置。
这样得到的建模结果就不会产生与自身相交,形成闭合环的现象,符合古河流沉积规律,但是所形成的游走路径是二维空间中的一条折线,脱离了地质构造形态本身,对建模结果的认识不够直观。
因此我们采用空间插值方法建立三维储层建模,以便观察河流空间分布模式。
空间插值常用于将离散点的测量数据转化为连续的数据曲面,本文采用最近邻点插值法对各小层的顶、底面进行建模。
最近邻点插值法又称泰森多边形法,它将空间分割成不同的多边形区域,每一区域的属性值使用距它最近位置点的属性值。
三维插值计算实现代码如下:%编译命令:mcc -W cpplib:libtestgrid -T link:lib testgrid (生成C++的动态库)%编译命令:mcc -W lib:libtestgrid -T link:lib testgrid (生成C的动态库)function testgrid(filename,step,bView)[x,y,top, bottom] = textread(filename, '%*s %f %f %*s %*s %f %f %*f');x=x/1000.0;y=y/1000.0;step = step / 1000.0;mid = (top + bottom)/2;max_x = max(x)+0.2;min_x = min(x)-0.2;xi =(min_x:step:max_x);max_y = max(y)+0.2;min_y = min(y)-0.2;yi=(min_y:step:max_y);[xx,yy]=meshgrid(xi,yi);if (bView)zz_top=griddata(x,y,-top,xx,yy,'nearest');zz_bottom=griddata(x,y,-bottom,xx,yy,'nearest');figure('NumberTitle','off','Name','小层构造模型');mesh(xx,yy,zz_top),hold on;mesh(xx,yy,zz_bottom);plot3(x,y,-bottom,'r.'), hold off;xlabel('X(Km)');ylabel('y(Km)');zlabel('z(m)');title('小层构造模型','FontName','隶书','FontSize',20) 2混合编程2.1实现混合编程的环境配置要成功地实现混合编程,达到混合编程的要求并最终作为独立的应用程序发布, 首先要对MATLAB 及V isual C+ + 进行环境的配置。
VC_与Matlab混合编程实现光场光强的三维显示
Computer Knowledge and Technology 电脑知识与技术 第8 卷第8 期 (2012 年3 月) ISSN 1009-3044 Computer Knowledge and Technology 电脑知识与技术Vol.8, No.8, March 2012. E-mail: *************.cn Tel:+86-551-5690963 5690964 VC++与 Matla b 混合编程实现光场光强的三维显示杨入超(铜陵学院 电气工程系,安徽 铜陵 244000)摘要:基于V C ++开发环境和Matlab 引擎函数,实现了激光衍射光场光强的三维动态显示。
给出了实现过程和实验结果并进行了讨 论。
关键词:VC++;Matlab ;引擎函数库;三维显示;衍射中图分类号:TP391文献标识码:B 文章编号:1009-3044(2012)08-1906-03 The Realization of Three Dimension Display of Optical Field by Mixed Programming of VC++ and MatlabYANG Ru-chao(School of Electrical Engineering, Tongling College, Tongling 244000, China)Abstract: Three dimension dynamic display of laser diffraction light intensity is realized by the method based on the development environ ⁃ ment of VC++ and engine functions of Matlab in the paper. The realization steps and the result are presented and the result is discu ss ed.Key words: VC++; Matlab; engine functions library; three dimension display; diffraction 科研与工程实际中常常需要实时测量光场的光强分布规律,目前市场上尚无这方面的测量设备,本文结合实验室已有的设备 进行了进一步开发,开发中采用了面阵CC D 技术以及V C++与Matlab 混合编程技术。
vc和matlab的混合编程-Silence的日志-网易博客
vc和matlab的混合编程-Silence的日志-网易博客vc和matlab的混合编程技术 2008-10-29 23:14:29 阅读60 评论0 字号:大小订阅matlab真的是一个好东西,它的介绍我就不说啦,自己google 去,matlab在数学处理、数字图像方面的研究有很好的应用,只是他在与其他例如vc,vb,java的接合上显得比较的困难,似乎大家都在探讨这方面的问题,经过这些天的猛看猛试验,最终在matlab的COM接合上实现突破,并且正如matlab推荐的那样,真的非常的方便和通用,几乎可以处理所有的函数,包括图形图像的处理函数。
一般来说,vc调用matlab混合编程有以下几个途径:一、通过Matlab Engine方式Matlab Engine是指一组Matlab提供的接口函数,支持C语言, Matlab Engine采用C/S(客户机/服务器)模式,Matlab作为后台服务器,而C程序作为前台客户机,通过Windows的动态控件与服务器通信,向Matlab Engine传递命令和数据信息,从Matlab Engine接受数据信息。
用户可以在前台应用程序中调用这些接口函数,实现对Matlab Engine的控制。
采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,而且执行效率低,因此在实际应用中不采用这种方法,在软件开发中也不可行,我认为适合个人使用或做演示用,因此不打算介绍。
二、直接调用Matlab的C/C++数学函数库Matlab中提供了可以供C/C++语言调用的C/C++数学函数库,其中包含了大量用C\C++语言重新编写的Matlab数学函数,这些函数涉及到线形代数、数值分析、傅立叶变换、多项式计算、解微分方程等,并且函数库中提供了大量各种矩阵操作函数,在VC中可以直接使用这些函数,通过这些函数可以在VC中方便的实现在Matlab中矩阵运算功能。
VS(VC)与Matlab联合编程步骤
联合编程的操作步骤首先,我先说一下我所安装的环境,我的电脑是Win7(X64)的,我安装的Matlab是Matlab R2010b和VS2010,还有Matcom4.5我Matlab的安装目录:C:\Program Files\MATLAB我VS的安装目录:F:\Program Files (x86)\Microsoft Visual Studio 10.0一、Matlab环境配置在Matlab的Command Windows下输入命令:mbuild -setup然后输入命令:mex–setup 方法同上mbuild–setup一样。
在Matlab中编写想要实现的.m文件。
我以最简单的.m文件为例:function [c]=Myadd(a,b)c=a+b;在命令窗口编写:会在当前目录下生成如下图中显示的文件:其中重点会用到的是.cpp、.h、,dll、.lib文件。
在头文件的最后,你可以看到下面的内容:externLIB_myadd_CPP_API void MW_CALL_CONV myadd(intnargout, mwArray& c, constmwArray& a, constmwArray& b);这就是myadd的C函数的声明。
nargout表示输出变量的个数,其他就是对应了m函数的几个变量。
二、Matcom设置准备工作在Matcom中编写函数文件:保存后,点击compile to DLL,生成DLL文件默认在matcom安装目录debug 文件夹下面。
会生成如下图所示的文件:主要用到的还是.dll、.h、.lib等文件。
不过在VS中调用时,需要将matcom安装目录lib文件夹下的matlib.h和v4501.lib拷贝到工程文件夹下。
并且要将翻译生产的文件(.dll、.h、.lib等文件)也复制粘贴到工程目录下。
且在stdafx.h中要包含matlib.h。
MATLAB与VC混合编程.
MATLAB 与 VC 混合编程SCIE摘要:MATLAB 提供了很丰富的编程接口,可以通过这些接口使用其它语言来编写模块集成到 MATLAB 程序中,也可以在其它程序设计语言中调用 MATLAB 。
尽管如此,在某些情况下可能仍然不能满足某些特殊的要求, 本文从实际应用出发, 介绍了 MATLAB 与 VC 混合编程的一些方法。
需要特别说明的是:本文内容是针对MATLAB6.5和 VC6.0的,并不适应于其它版本的 MATLAB 。
关键词:混合编程 MATLAB VC 窗口嵌入一、 VC中使用编译得到的 C++源程序文件通过 MATLAB 的编译器我们可以将 m 代码编译为独立的可执行程序,从而达到脱离 MATLAB 、在未安装 MATLAB 的计算机上发布的目的。
但是这样做仍然不能满足如下要求: MATLAB设计的图形用户界面功能还不够强大,不支持表格、目录树以及分组单选按钮等控件;当在一个 GUI 中放置过多的控件时,速度会比较慢。
整个软件并不是以 MATLAB 为主开发的,需要把 MATLAB 编写的代码融合到软件主体中,而不是生成独立的程序。
需要修改 MALTAB 编译器自动生成的代码, 或在其中添加代码以实现特定的功能。
将 m 文件编译生成 C 或者 C ++代码,在 VC 中使用这些代码,就可以解决以上几个或者更多的问题。
在此之前,需要对 VC 的开发环境进行设置,添加MATLAB 的 Include 目录和 Library 目录,操作如下:启动 VC ,点击菜单 Tools-Options ,出现如下对话框:图表 1设置 Include 目录¾在 Show directories for下方的下拉框中选择 Include files,在 Directories 下方列表框的空白一行或者单击 Directories 右方的左起第一个按钮, 添加如下两个目录: $matlabroot\extern\include\cpp$matlabroot\extern\include¾在 Show directories for下方的下拉框中选择 Include files,在 Directories 下方列表框的空白一行或者单击 Directories 右方的左起第一个按钮, 添加如下两个目录: $matlabroot\extern\include\cpp$matlabroot\extern\include其中 $matlabroot为 MATLAB 的安装目录,如图表 2所示。
VisualC_与MATLAB混合编程实现图象三维重建_孙慧
完整信息, 而特征匹配和三维坐标的计算只能得到离散特征点
的视差, 需要根据离散点处的表面信息对三维表面重建, 恢复
三维信息。
MATLAB是针 对 数值 计 算 的交 互 式 软件, 以 其 强 大 的 数 据
处理和丰富的工具箱使得编程极为简单. 极少的代码即可实现
meshgrid(x11,y11);
S=zeros(length(x11),length(x11));
for i=1:length(xyzxyz1)
rr=xyzxyz1(1,i)- xmin+1;
cc=xyzxyz1(2,i)- ymin+1;
S(rr,cc)=xyzxyz1(3,i);
End %给出任意一个初始近似表面 S
图像处理 文章编号:1008- 0570(2007)06- 3- 0294- 03
中 文 核 心 期 刊 《微 计 算 机 信 息 》( 管 控 一 体 化 )2007 年 第 23 卷 第 6-3 期
Visu al C++与 MATLAB 混合编程实现图象三维重建
Th re e - d im e n s io n a l Re co n s tru ctio n Us in g Hyb rid Pro g ra m m in g Be tw e e n Ma tla b a n d VC++
4 Matlab 与 VC ++ 混 合 编 程 实 现 三 维重建
具体的技术 解 决 途径 有 很 多, 比 如 在 VC++下可 以 通 过直 接 对 OpenGL 或 Direct3D 进 行 编 程 实 现 , 但 由 于 此 类 应 用 需 要 大 量 的 科 学 计 算 , 使 用 具 有 强 大 的 矩 阵 运 算 、数 据 处 理 和 图 形 显示功能的 Matlab 进行开发比较合适, 其 输 出结 果 可 视化 , 编 程效率极高, 然而其边解释边执行, 运算效率较低, 实现相同功 能的代码跟其他编程平台相比运行时间相对较长, 且不适合作 为通用的编程平台。因此, 为整体效率考虑, 采取具有很高编程 效率的通用编程平台 VC++与 Matlab 混合编程的方式将有助于 发挥 Matlab 和 VC 的各自优势。
基于MATLAB与VC的鱼雷弹道三维可视化的实现
K e y Wo r d s MATI AB ,VC, mi x e d p r o g r a mmi n g ,3 D g r a p h i c s o f t o r p e d o t r  ̄e c t o r y
Cl a s s Nu mb er TP3 9 】 . 9
z i n g p a r a me t e r s .Us i n g t h e c o n r c o mp o n e n t t e c h n o l o g y ,3 d i me n s i o n t r a j e c t o r y i ma g e wi n d o w f r o m MATI A B e mb e d d e d i n t o VC o p e r a t i o n
TP 3 9 1 . 9 中 图分 类 号
Vi s u a l i z a t i o n o n t h e T o r p e d o Tr a j e c t o r y B a s e d o n MA T L A B a n d VC
CHEN Lon g YUAN Bi n g c he n g XI E Yo n g ZHANG Zo n g b o LI Ru i l i a ng
是需要特定的水域 , 并在水 下布放 水声 弹道测 量系统 。本 文 以鱼雷实航 内测记录器 采集记 录 的相关数 据为基 础 , 综 合应用计算机技术 , 设计 弹道可 视化软 件 。通过 对鱼雷 航 行时记录在存储器上 的相关参 数 回放 到计算 机上 , 经分 析
VC进行参数处理并生成鱼雷弹道的坐标数据 。运用 C OM 组件技术 , 将 MATI AB生成的鱼雷三维弹道图像窗口嵌入到 V C交互操作界面 中, 生成脱离 MAT1 AB环境 的独立应用程序 , 为实现鱼雷航行弹道的可视化提供新 的技术途径。
基于VC++与Matlab混合编程的图像处理
基于VC++与Matlab混合编程的图像处理(2007-8-5 10:51:00)【收藏】【评论】【打印】【关闭】标签:混合编程图像处理VC++Matlab摘要:本文主要讨论了VC++与Matlab混合编程的两种常规方式,给出了利用Matlab数学函数库混合编程的实现方法,指出了常规方式存在不足的同时,提出了另外两种方法,实现了利用Matlab数学函数库和编译器结合VC++混合编程的新方法,充分发挥了VC++有效运算速率与Matlab强大矩阵运算的优点。
实验结果说明本文所提方案可行,适用于图像处理。
关键词:Matlab; VC++;混合编程;数学函数库;编译器1.引言Matlab是Mathworks公司推出的一套工程计算及数值分析软件。
由于功能强大、易使用,得到了广泛应用,特别是在图像信号处理,语音信号处理,信号分析等领域充分展示了其强大的矩阵运算功能。
虽然Matlab是一个完全独立的编程和数据运算的集成环境,但是对于循环处理、图形界面、算法隐藏及系统集成等方面有所欠缺。
VC++是一种面向对象的可视化编程语言,代码效率高,便于用户进行交互处理,但利用其基本数学函数库开发子程序与数值算法时,往往比较繁琐,且需反复调试以确保其准确性。
VC++与Matlab混合编程,可有效地发挥各自优势,为科学研究和工程开发提供强大的技术支持。
本文所有讨论均基于Windows操作平台下的MSVC++6.0编译环境和Matlab6.5环境。
2.两种常规混合编程方式传统的VC++调用Matlab的方法有:利用Matlab引擎、利用Matlab编译器、利用Matcom软件编译、调用Matlab数学函数库、及调用Matcom数学函数库。
这其中利用Matlab引擎不能脱离Matlab环境,且运行程序较慢;关于Matlab 编译器下文将进行详细分析;Matcom软件对Matlab语句支持不够,且其开发公司已被Mathworks收购,自发布4.5版本以后已停止开发;Matlab和Matcom所封装的数学函数库提供了大量的实用函数,可以完全脱离Matlab环境使用,是较为常用的混合编程方式。
基于VC++和MATLAB混合编程绘制三维图形
基于VC++和MATLAB混合编程绘制三维图形
张慧;杨峰
【期刊名称】《电脑与信息技术》
【年(卷),期】2008(016)001
【摘要】文章介绍了VC++环境下调用MATLAB实现绘制三维图形的两种方法:利用MATLAB编译器和MATLAB引擎,并用实例证明这两种方法可实现VC++的用户界面与MATLAB的强大图形功能的交互.分析了这两种方法的优缺点,对各自的接口环境配置进行了对比,详细说明了两种方法的具体步骤,提出了各自适合的应用时机.
【总页数】3页(P28-30)
【作者】张慧;杨峰
【作者单位】江苏科技大学材料科学与工程学院先进焊接技术省级重点实验室,江苏镇江,212003;江苏科技大学材料科学与工程学院先进焊接技术省级重点实验室,江苏镇江,212003
【正文语种】中文
【中图分类】TP311.11
【相关文献】
1.VC++与OpenGL混合编程实现三维图形处理 [J], 吴逊
2.基于VC++与MATLAB混合编程离散点的等高线的绘制 [J], 张华清;张立平;赵小超
3.VC++和Matlab混合编程实现索道工程图的参数化绘制 [J], 左来;朱洪前
4.VC++与 Matlab混合编程实现卫星遥感影像的三维显示 [J], 郎锐
5.VC++与Matlab混合编程实现光场光强的三维显示 [J], 杨入超
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
·30-电脑与信息技术2008年2月
本例中用到的数据minx=-4,maxx=4,rainy=一4,maxy=4,所得图形如图3所示:
圈3利用MATLAB编译器绘图结果
2.2MATLAB引擎
从编程复杂度的角度来说,最简单的途径就当属利用MATLAB的引擎功能闭。
与其它各种接口方式相比,引擎所提供的MATLAB功能支持是最全面的。
2.2.1VC环境设置
用MFCAppWizard(exe)建立一个应用程序,并作如下设置:
(1)通过菜单Tools/Options…,打开设置属性页,进入Directories页面,在目录下拉列表框中选择Includefiles,添加路径D:WIATLAB6p5\extem\include再在下拉框中选择Libraryfiles,添加路径D:、MA’ILAB6p5、extenluib\win32\IIlicrosofc\lIlsvc60
(2)选择菜单Project/Settings…,打开工程设置属性页,进入Link页面,在Object/librarymodules编辑框中,添加文件名libmx.1iblibmat.1iblibeng.1ib,以空格隔开。
2.2.2VC++中程序说明
调用命令engOpen打开引擎,然后将mxArray转换成在MATLAB中可操作的形式。
具体方法是:在MATLAB中将一个自定义的数据结构复制到mx.Array中,后将此矩阵放人MATLAB计算引擎的工作区中,把命令以字符串的形式传递给函数engEvalString进行执行。
使用引擎,计算程序中必须添加头文件#include“en6ne.h”,程序开始后需要打开引擎,运算完成后要释放内存并关闭引擎。
本例绘制的是一个TIG焊焊接质量神经网络中输出背面熔深(BackWidth)与两个输入参数电流Cur-rent)、清洁度(Cleaning)之间的变化曲线。
已知两个输入参数的最小值与最大值(minx=80,maxx=100,miny=30,maxy=60),采样个数取为50,即共有51个数。
X【5H,y【51】中存储了采样后的两个输入变量值,数组matdatai]中存储的是其余参数不变时,电流每变化1次,清洁度变化51次后,神经网络运算出的背面熔深的结果。
主要程序代码部分:
倒建矩阵并命名赋值
mxmatdata=mxCreateDoubleMatrix(51,51,mxREAL);
xx=mxCreateDoubleMatrix(51,1,mxREAL);
yy=mxCreateDoubleMatrix(51,1,mxREAL);
memcpy(mxGetPr(mxmatdata),matdata,51451。
sizeddou-ble));
memcpy(mxGet_Pr(xx),x,51*sizeof(double));
memcpy(mxGetPr(yy),Y,51*sizeof(double));
鸺变量写到matlab工作空间并命名
ensPutVariable(ep,"mxmatdata”,atxmatdata);
engPutVariable(ep,"】【】【”,xx);
ell【gPutVariable(ep,"yy”,yy).
engEvaIString(ep,"【)【,Y]=meshgrid(xx,)ry);”);
en#valString(ep,"mesh(X,Y,mxmatdata);”);
程序运行后得到的图形如图4所示:
图4利用MAlrIAB引擎绘图结果
3结论
本文通过两个实例把VC++与MATLAB的数值计算、图形显示功能进行了结合,既保持了VC++的良好用户界面和高执行效率,又保持了MATLAB的优良算法,使VC++和MArlLAB各自的优势能够得到充分发挥。
当VC与MATLAB互传的参数比较简单或无参数传递时,使用MATLAB编译器实现相对简单方便,且可以脱离MATLAB环境运行,但图形不方便存储;当需要互传大量数据,则使用MATLAB引擎更容易实现,图形方便存储,但不能脱离MATLAB环境。
参考文献:
【l】1李天昀,葛临东.综述MATI.AB与vc++的交互编程叽计算机仿真,2004,21(9):193—196.
【2】何强,何英.MATLAB扩展编程[MI.北京:清华大学出版社,2002.【31柏晟.VC++与MATLAB混合编程的方法研究与实现忉.电脑开发与应用,2006,19(4):24-27.
【4】潘爱民,王国印.Visualc++技术内幕【M】.北京:清华大学出版社,1998.
【51飞思科技产品研发中心.MATLAB6.5应用接口编程【M】.北京:电子工业出版社。
2003.
【61周灵.基于COM的vC调用Madab的方法及实现【J】.中国科技信息,2006,24:131—133.
忉张志涌.精通MATLAB6.5版【明.北京:北京航空航天大学出版社,2003.
18】张威.MATLAB外部接121编程【M】.西安:西安电子科技大学出版社。
2004.
基于VC++和MATLAB混合编程绘制三维图形
作者:张慧, 杨峰, ZHANG Hui, YANG Feng
作者单位:江苏科技大学材料科学与工程学院先进焊接技术省级重点实验室,江苏镇江,212003刊名:
电脑与信息技术
英文刊名:COMPUTER AND INFORMATION TECHNOLOGY
年,卷(期):2008,16(1)
被引用次数:1次
1.张威MATLAB外部接口编程 2004
2.张志涌精通MATL AB 6.5版 2003
3.周灵基于COM的VC调用Matlab的方法及实现[期刊论文]-中国科技信息 2006(24)
4.飞思科技产品研发中心MATLAB6.5应用接口编程 2003
5.潘爱民;王国印Visual C++技术内幕 1998
6.柏晟VC++与MATLAB混合编程的方法研究与实现[期刊论文]-电脑开发与应用 2006(04)
7.何强;何英MATLAB扩展编程 2002
8.李天昀;葛临东综述MATLAB与VC++的交互编程[期刊论文]-计算机仿真 2004(09)
1.沈颖.宋文强基于VC++和Matlab的图像处理比较研究[期刊论文]-电脑知识与技术 2009(16)
本文链接:/Periodical_dnyxxjs200801010.aspx。