Matlab与VisualC_混合编程的实现

合集下载

Matlab引擎实现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的内建函数了。

MATLAB与C_VisualC_混合编程的实现

MATLAB与C_VisualC_混合编程的实现

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

VC和MATlAB混编(笔记)

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文件,这里采用与上例相同的函数,注意:不能是脚本文件。

MATLAB与VisualStudio系列语言混合编程的方法[1]

MATLAB与VisualStudio系列语言混合编程的方法[1]

!’1 利 用 "#$%#& 引 擎 调 用 !"#$"% 引 擎 采 用 的 是 客 户 和 服 务 器 计 算 方 式 。 工
作原理为: !"#$"% 引 擎 作 为 服 务 端 , 16 的 程 序 作 为 前 台 客 户 机 向 !"#$"% 引 擎 传 递 命 令 和 数 据 信 息 , 并 从
@.A !&’3&B "- CBD=/’ 4=’ !&’3&BE6+=&’=CBD=/’FG!&’3&BH"II3./&’.*7GJ
+&Y 、 =7XV2’"++&Y 、 =7XL<&-’+.7X 、 =7XC2’V2’%200=+ 、 =7XU 63*-= 。这 几 个 函 数 在实 现 与 客 户 机 的 交 互 时 用 到 。
应用时, 在 编 译 16 程 序 前 , 要 将 : 个 动 态链接 库
3.B=7XH533 和 3.BAMH533 生 成 静 态 链 接 库 3.B=7XH3.B 和 3.BU AMH3.B 。 使 用 命 令 如 下 :
3.B Z 5=0 : =: [!&’3&B[=M’=+7[.7/325=[ ! H5=0 Z A&/(.7= : .M\] Z *2’ : ! H3.B 。
!
程 序 不 脱 离 "#$%#& 环 境 运 行
在 !"#$"% 中 编 制 的 !"#$"% 是 一 种 解 释 性 语 言 ,
程序源代码为 ! 文件。 在没有接口的情况下, 程 序 不 能脱 离 !"#$"% 环 境 运 行 。 此时, 在 1.-2&3 4’25.* 系 列 语 言 中 对 !"#$"% 实 现 调 用 有 : 种 方 法 : 创 建 "/’.<=> 对 象 和 利 用 !"#$"% 引 擎 。

Matlab与VC(MFC)混合编程(介绍Matcom与Matlab 引擎两种方式)文库

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 中调用。

如何用VisualC++和MATLAB联合开发软件

如何用VisualC++和MATLAB联合开发软件
5)e g t r y n PuAra
种 高 性 能 的 数 值 计 算 和 和 可 视 化 软 件 , 全 称 为 其
Mar aoaoy 亦 称 矩 阵 实 验 室 , 在 数 值 分 析 、 t xL b rtr, i 它 信
作 用 : 应 用 程 序 中 向 M al n i 从 t b e gn a e发 送 一 个 Mal t b矩 阵 , 于 数 据 交 换 。 a 用
维普资讯
20 0 2年 第 4期




1 3 文 章 编 号 :0 5—3 5 (0 2 0 10 7 1 2 0 ) 4—0 1 0 3—0 3
如 何 用 Vi a C+ +和 MAT AB联 合 开 发 软 件 s l u L
H + wi h M a l b t v l p S f wa e b m ni s lC t ta
作 用 : 建 字 符 缓 冲 区 以 获 取 Malb文 本 输 出 。 创 t a
作 用 : 闭 Malbe gn 。 关 t n ie a
3 n GeAra )e g t ry
中 图分 类 号: P 1 .2 T 3 1 5
文 献标识 码 : A
作 用 : Mal n ie中 获 得 一 个 Mal 从 t be gn a t b矩 阵 , a
vi a C + +是 由 M i oot 司 推 出 的 可 视 化 编 sl u c sf 公 r
2)e g ls n C oe
Ke r s M a l b 1; a lb e g n Vi u + + 6. M a — y wo d : ta 6. M ta n i e; s a C l 0; t

VC和matlab混合编程画图实践

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混合编程2

VC和Matlab混合编程2

Matlab 作为当今世界上应用最为广泛的数学软件,具有非常强大的数值计算、数据分析处理、系统分析、图形显示甚至符号运算的功能。

已经在如生物工程,图像处理,语音处理,雷达探空,声纳探水,地震探地,以及控制论,系统论等各个领域得到广泛的应用。

它是一个完整的数学平台,在这个平台上,用户只需寥寥数语就可以完成十分复杂的功能,大大提高了工程分析计算、图像处理的效率。

但是Matlab 强大的功能只能在它所提供的平台上才能使用,即用户必须在安装Matlab 系统的机器上才能执行*.m 文件。

这样当用户需要将在Matlab 下已开发完毕的复杂算法应用到高级语言开发环境下时就带来了问题,是将现成的东西集成高级语言开发的程序中呢?还是用高级语言再重新实现一遍?显然大家所期望的是减少工作量,最好能将Matlab下开发好的程序或函数直接应用到高级语言开发的程序中,这就是Matlab与高级语言的混合编程问题。

VC++是当前Windows 下的主要编程语言之一,它能方便地形成应用软件中所需要的各种用户界面和工具并直接与系统及底层硬件交换数据。

用VC++开发的系统具有容易维护升级、界面友好、代码效率高、执行速度快等一系列优点,因此已成为目前应用软件开发中广泛采用的主要工具之一。

因此,如何将Matlab与VC++进行有效的混合编程广受工程科研人员的关注。

解决这个问题,不仅能更好地发挥Matlab 强大的功能,还能快速地进行软件开发,尤其是当软件开发中需要实现复杂的数学算法、图形处理时尤为迫切。

研究VC++与Matlab的混合编程具有很大的实际意义。

MATLAB 与Visual C++结合的方法有多种,但其实用程度与范围不同。

目前主要有以下三种方式。

1. 通过Matlab引擎(Engine)采用客户机/服务器(Client/Service)的计算模式,通过windows的ActiveX通道和MATLAB进行结合。

MATLAB引擎采用客户机和服务器计算方式,提供了一组Matlab API函数,用户不必关心Matlab引擎是如何实现的,只要调用这些函数即可。

matlab和VC混合编程综述

matlab和VC混合编程综述

程序中使用MATLAB编译产生的DLL (VS2005, MATLAB 7.5, mwArray)2007-12-16 14:52:39| 分类:MatLab/Maple/Mat|字号订阅from: /forum/thread-801187-1-1.html程序中使用MATLAB编译产生的DLL (VS2005, MATLAB7.5, mwArray)最近有几个帖子都在讨论有关在C++程序中使用MATLAB编译产生的动态链接库DLL。

本来想用原来帖子中给出的m代码作为例子,无奈那段代码其实无法执行。

为了避免分散注意力,也为了更好地讨论问题,于是决定还是另外新开一个主题,以简单的例子,和大家一起讨论如何在C++程序中使用matlab编译产生的DLL。

同时MATLAB最新版本R2007b刚刚发布不久,其中包含编译器4.7版,有了一些新的特性,于是也借这个例子来验证一下相关的技术有没有发生大的变化。

最近讨论的问题是关于在C++程序中调用MATLAB编译产生的动态链接库。

具体的问题是在调用DLL中函数时传递参数。

我们知道,MATLAB可以把m代码编译成两种DLL,分别是C语言接口和C++语言接口的DLL。

论坛上的问题是关于调用C++接口的DLL中的函数,所以这里我们就以这种DLL为例来介绍。

在C++接口的DLL中,函数的输入、输出参数都是mwArray对象。

所以问题归结为如何在C++程序中使用mwArray。

这个问题本来可以只用一个简单的C++程序来练习,而不需要MATLAB编译的DLL。

不过为了模拟实际情况,选择以一个更为接近实际的m代码作为例子。

在这个例子中,输入输出都是矩阵,至于标量,它也是一个一行、一列的矩阵。

实验环境:Windows 2003 Std Server with SP2 (En),MATLAB R2007b,Visual Studio 2005。

MATLAB安装路径:h:MATLABR2007b。

VC与matlab混编

VC与matlab混编

VC++与Matlab混合编程之引擎操作详解(转)编程2010-10-23 23:27:34 阅读0 评论0 字号:大中小订阅Visual C++是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快。

但在科学计算方面函数库显得不够丰富、读取、显示数据图形不方便。

Matlab是一款将数值分析、矩阵计算、信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,适合科学研究、工程设计等众多学科领域使用的一种简洁、高效的编程工具。

不过由于Matlab使用的是解释性语言,大大限制了它的执行速度和应用场合。

基于VC和Matlab混合编程是很多熟悉VC++编程而又需要进行科学计算、数据仿真的科研人员常用的一种方式,其中最简单也最直接的方法就是调用Matlab引擎。

本文以下部分将详细介绍通过VC++6.0调用Matlab6.5引擎来达到VC++与Matlab数据共享编程的方法。

1. 什么是Matlab引擎所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持C/C++、Fortran等语言,通过这些接口函数,用户可以在其它编程环境中实现对Matlab的控制。

可以主要功能有:★打开/关闭一个Matlab对话;★向Matlab环境发送命令字符串;★从Matlab环境中读取数据;★向Matlab环境中写入数据。

与其它各种接口相比,引擎所提供的Matlab功能支持是最全面的。

通过引擎方式,应用程序会打开一个新的Matlab进程,可以控制它完成任何计算和绘图操作。

对所有的数据结构提供100%的支持。

同时,引擎方式打开的Matlab进程会在任务栏显示自己的图标,打开该窗口,可以观察主程序通过engine方式控制Matlab运行的流程,并可在其中输入任何Matlab命令。

实际上,通过引擎方式建立的对话,是将Matlab以ActiveX控件方式启动的。

在Matlab初次安装时,会自动执行一次:matlab /regserver将自己在系统的控件库中注册。

VS(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混合编程.

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所示。

VC+matlab联合编译

VC+matlab联合编译

VS2005如何调用Matlab7定义的.m文件中的函数以一个简单的例子来说明一下如果在VC中调用matlab中定义的.m文件. 与Matlab6.5稍有不同。

(一)先建立matlab的m文件这里为了简单起见,我在matlab中定义了一个求和函数,其m文件如下:function y = add_zh(a,b)y=a+b保存为myadd.m(二)对matlab编译环境进行设置为操作系统添加环境变量:在环境变量(我的电脑->右键->高级)path中加入<MATLAB7_root>\bin\win32打开matlab,在命令行状态下键入:mex -setup然后出现如下提示:--------------------------------------------------------------------------------------Select a compiler:[1] Intel C++ 9.1 (with Microsoft Visual C++ 2005 SP1 linker)[2] Intel Visual Fortran 10.1 (with Microsoft Visual C++ 2005 SP1 linker)[3] Intel Visual Fortran 9.1 (with Microsoft Visual C++ 2005 SP1 linker)[4] Lcc-win32 C 2.4.1[5] Microsoft Visual C++ 6.0[6] Microsoft Visual C++ .NET 2003[7] Microsoft Visual C++ 2005 SP1[8] Microsoft Visual C++ 2008 Express[9] Microsoft Visual C++ 2008 SP1[10] Open WATCOM C++[0] NoneCompiler:--------------------------------------------------------------------------------------这里我们选择'7’。

matlab与vc混合编程(绝对无误)

matlab与vc混合编程(绝对无误)

matlab与vc混合编程1、环境设置在桌面上右键单击“我的电脑”图标出现以下菜单单击“属性”菜单项,出现“系统特性”对话框,单击“高级”选项卡,如下图所示在上图中,单击“环境变量”按钮,出现“环境变量”对话框,添加系统变量 matlab 值为 D:\MATLAB 即 matlab 的安装路径,如下图所示在环境变量 path 中加入 D:\MATLAB\bin\win32 ,如下图所示按“确定”完成设置后,重启计算机或注销当前用户,即可应用新设置。

2、matlab 编译器设置(1) mex 命令设置(a) 运行 matlab ,在 matlab 的命令窗口 (Command Window) 键入“ mex -setup ”命令后,按回车键,安装 matlab 编译器;(b) 命令窗口出现如下提示mex -setupPlease choose your compiler for building external interface (MEX) files:Would you like mex to locate installed compilers [y]/n?此时键入”y”,按回车;(c) 命令窗口出现如下提示Select a compiler:[1] Digital Visual Fortran version 6.0 in C:\Program Files\Microsoft Visual Studio[2] Lcc C version 2.4.1 in D:\MATLAB\sys\lcc[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio[4] Open WATCOM C/C++ version 1.3 in D:\Maple11[0] None此时键入”3”,按回车;选择 Microsoft Visual C++6.0 的编译器(d) 命令窗口出现如下提示Please verify your choices:Compiler: Microsoft Visual C/C++ 6.0Location: C:\Program Files\Microsoft Visual StudioAre these correct?([y]/n):此时键入”y”,按回车;确认选择 Microsoft Visual C++6.0 的编译器(2) mbuild 命令设置(a) 运行 matlab ,在 matlab 的命令窗口 (Command Window) 键入“ mbuild -setup ”命令后,按回车键,安装 matlab 编译器;(b) 命令窗口出现如下提示mbuild -setupPlease choose your compiler for building standalone MA TLAB applications:Would you like mbuild to locate installed compilers [y]/n?此时键入”y”,按回车;(c) 命令窗口出现如下提示Select a compiler:[1] Lcc C version 2.4.1 in D:\MATLAB\sys\lcc[2] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Stu dio[0] None此时键入”2”,按回车;选择 Microsoft Visual C++6.0 的编译器(d) 命令窗口出现如下提示Please verify your choices:Compiler: Microsoft Visual C/C++ 6.0Location: C:\Program Files\Microsoft Visual StudioAre these correct?([y]/n):此时键入”y”,按回车,确认选择 Microsoft Visual C++6.0 的编译器,编译器设置完成。

【文件】Matlab与C混合编程的方法研究与实现毕业论文

【文件】Matlab与C混合编程的方法研究与实现毕业论文

【关键字】文件Matlab与C混合编程的方法研究与实现摘要:文章探讨了MA TLAB与VC++的优缺点,介绍了VC++与Matlab混合编程的几种方法。

通过二者的结合,既有效地利用了MA TLAB强大的数值计算能力和众多的函数,大大减少程序设计的工作量,又继承了VC++良好的程序界面,证明是一种很好的程序设计方法。

具体说明了如何应用Matlab引擎实现混合编程以及如何利用MATCOM进行MATLAB和VC++混合编程,并将两种方法用于数字图像处理。

关键词:MATLAB;VC++;MA TCOM;引擎;混合编程;图像处理一、引言1、数字图像处理简介:图像技术由高到低分为三个层次:图像处理、图像分析和图像理解。

图像处理是比较底层的操作,它主要在图像像素级上进行处理,处理的数据量非常大。

数字图像处理最基本的目的就是改善图像,主要是按需要进行适当的变换突出某些有用的信息,去除或消弱无用的信息,如改变图像的对比度,去除噪声或强调边缘的处理等,其基本方法有:直方图修正、灰度变换、图像的频域特性、图像平滑、图像锐化等。

直方图是图像的重要统计特征,是表示数字图像中每一灰度级与该灰度级出现的频率数间的统计关系。

直方图能给出该图像的大致描述,如灰度范围、灰度级的分布、整幅图像的平均亮度等,但它不能完整地描述一幅图像。

通常用横坐标表示灰度级,纵坐标表示频数。

通常一幅均匀量化的自然图像由于其灰度直方图分布集中在较窄的低值灰度区间,引起图像的细节看不清楚,为使图像变得清晰,我们可以通过变换使图像的灰度范围拉开或使灰度分布在动态范围内趋于均匀化,从而增加反差,使图像的细节清晰,达到图像增强的目的。

灰度变换是图像增强的一种重要手段,它可以使图像动态范围加大,使图像对比度扩展,图像更加清晰,特征更加明显。

灰度变换可分为线性、分段线性、非线性以及其他的灰度变换。

线性灰度变换实际上使曝光不充分的图像中黑的部分更黑,白的部分更白,从而提高对比度。

Matlab和VisualC++的混合编程

Matlab和VisualC++的混合编程

Matlab和VisualC++的混合编程Matlab和Visual C++的混合编程Matlab和Visual C++的混合编程(信息工程学院,计算机系,计算机科学与技术专业陈健)(学号:2022年__)内容提要:在对如今领导潮流的两个强大的可视化开发工具Microsoft Visual C++和Matlab间的混合编程作了大量的尝试的基础上,本文总结出5种行之有效的应用于数字图像处理软件开发的集成途径;对它们各自的优点和不足作了详细的阐述;并对未来两个软件的进一步联合提出了一些粗浅的意见和希望。

关键词:编程,混合编程,Matlab Visual C++教师点评:Matlab是功能强大的高性能数值计算和可视化软件系统,具有较好的数值分析、信号处理、图形和图像处理等方面的功能。

本论文将VC++与Matlab结合起来,实现混合编程,既发挥VC++在图像的各种处理中编程灵活、执行快捷的特点,又发挥Matlab在数值分析、信号处理及图形和图像等方面简单易用的优势,使整个系统既简洁又高效。

该论文概念清楚,观点合理,编程工作量较大,是一篇优秀的本科论文。

(点评教师:蔡茂国,教授)一、混合编程的原因与优势Matlab(Matrix Laboratory,矩阵实验室)是一种高性能的数值计算和可视化软件的开发软件,在数值分析、信号处理、系统辨识、特殊函数和图形等方面具有广泛的应用。

由于Matlab用的是一种脚本语言,其执行是逐行解释的,而且为了加强通用性,程序中所有的变量都用矩阵数组MxArray来实现,所以,在实现一些复杂的算法时,程序执行效率低。

虽然Mathworks公司已经在竭力提高m脚本文件(script files)的运算速度,但仍然不能和实现同样功能的可执行程序相比,而且m脚本文件不能脱离Matlab环境运行的,也制约了Matlab程序的可移植性和通用性。

C++是新一代面向对象(OOP)高级程序设计语言,由于它建立在C 的基础之上,使之成为最流行的OOP语言。

Visual-C#与Matlab混合编程示例(含代码)

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 文件。

用mex文件实现VC和Matlab的混合编程

用mex文件实现VC和Matlab的混合编程

用mex文件实现VC和Matlab的混合编程一个mex程序实际上就是一个特别的DLL,它的输出函数为mexFunction。

那么在VC中就可以用Project wizard建立一个DLL工程,并为指定输出为mexFunction.1. 建立新的DLL工程启动VC,选择菜单File/New,在Projects页面中选择MFC AppWizard(DLL),输入路径名和工程名,并单击OK按钮。

2. 选用静态链接的MFC类库在接下来的对话框中,选择使用静态链接MFC的DLL。

这是因为,MATLAB 使用了特殊片本的DLL文件mfc42.dll,并且放置在其程序中目录中,MATLAB 必须使用自带的mfc42.dll文件,而这个文件与Windows系统目录中的相应文件是不兼容的,、用其中一个替换另一个,将会导致Windows系统工作不正,或MATLAB工作的不正常,严重时甚至造成MATLAB非法操作而异常退出。

而用静态链接就不会出现这个问题。

3. 设定输出函数AppWizard将会自动生成如下几个文件:A. Mextest.cppB. Mextest.defC. Mextest.rcD. StdAfx.cpp (前三个的名字与项目文件名有关)需要在mextest.def中指定该DLL文件的输出函数,也就是mexFunction。

为此VC的Workspace栏中,单击“FileView”属性页,展开“Sourse File”栏,打开文件mextest.def,将其内容进行编辑,在“Exports”后面加入mexFunction 一行。

下面是编辑后的mextest.def文件的内容:;mestest.def : Declares the module parameters for the DLL.LIBRARY “mextest”DESCRIPTION …mextest Windows Dynamic Link Library‟EXPORTS; Explicit exports can go heremexFunction4. 环境设置由于在编译和链接mex程序时,需要链接MATLAB提供的若干头文件,因此应该对这些文件的搜索路径进行指定。

Matlab与Visual C++混合编程处理全站仪数据的方法

Matlab与Visual C++混合编程处理全站仪数据的方法

Matlab与Visual C++混合编程处理全站仪数据的方法胡加星;刘立龙;刘靖晔【期刊名称】《地理空间信息》【年(卷),期】2011(009)003【摘要】During the indoor work data checking, we often compared the point's field work coordinate with its indoor work coordinate. So we could find if there be some points were artificial, or some points had been moved. At the same time, the processed data could direct provide the three dimension coordinate, it was helpful for the next measure work. This article took the South total station instrument for example, based on matlab and Visual C++ mixing programming to generate the directly executable file, which could separate from the MTALAB en-vironment.then gave the code and the images of the result.%内业数据检核中经常要对点的外业实测坐标与内业成图后的坐标进行比较,以此来发现是否出现造点或是点位挪动的情况.同时经处理后的观测数据能直观地得到外业人员想要的三维坐标,可方便地进行下一步的测量工作.以南方全站仪为例,利用Matlab 与visual C++混合编程生成可脱离Matlab环境直接运行的可执行文件,并给出相关代码及成果图像.【总页数】3页(P175-177)【作者】胡加星;刘立龙;刘靖晔【作者单位】桂林理工大学土木与建筑工程学院,广西桂林541004;桂林理工大学土木与建筑工程学院,广西桂林541004;桂林理工大学土木与建筑工程学院,广西桂林541004【正文语种】中文【中图分类】P208【相关文献】1.Visual C++与Matlab混合编程方法的对比分析研究 [J], 罗朝明;胡顺超;邓日晓;陶扬威;吴祥营2.Visual C++与Matlab混合编程方法在图像处理中的应用 [J], 王忠3.Visual C++与Matlab混合编程方法研究 [J], 毛文;孙伟嵩4.基于MATCOM的Visual C++与Matlab混合编程方法 [J], 郦丹芸5.Visual C++与Matlab混合编程方法在图像处理中的应用 [J], 刘馨月; 吕英华; 周晓锋因版权原因,仅展示原文概要,查看原文内容请购买。

Matlab与Visual C++混合编程的实现

Matlab与Visual C++混合编程的实现

Matlab与Visual C++混合编程的实现
蒋礼;徐义贤
【期刊名称】《计算机技术与发展》
【年(卷),期】2003(013)009
【摘要】从不同角度分析和研究了Visual C++与工程计算语言Matlab的接口技术.为工程设计人员提供了比较全面的Visual C++与Matlab的混合编程方法,并给出了各种方法的优缺点.通过二者的结合,既有效地利用了M atlab强大的数值计算能力和众多的函数,大大减少程序设计的工作量,又继承了Visual C++良好的程序界面,证明是一种很好的程序设计方法.
【总页数】5页(P81-85)
【作者】蒋礼;徐义贤
【作者单位】中国地质大学,地球物理系,湖北,武汉,430074;中国地质大学,地球物理系,湖北,武汉,430074
【正文语种】中文
【中图分类】TP311.52
【相关文献】
1.利用Matcom实现Visual C++与Matlab的混合编程 [J], 张爱丽;陈逢胜
2.利用Matcom实现Visual C++与Matlab的混合编程 [J], 张爱丽;陈逢胜
3.MATLAB与C/Visual C++混合编程的实现 [J], 陶红;袁金荣
4.Visual C++与MATLAB混合编程实现图象三维重建 [J], 孙慧;李莉
5.利用Matcom实现Visual C++与Matlab的混合编程 [J], 张爱丽;陈逢胜
因版权原因,仅展示原文概要,查看原文内容请购买。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
libmmfile. lib libmcc. lib libmatlb. lib libmx. lib libmat .
lib 将它们放入你的项目连接选项 :
Project - > Setting - > Link
Category : Input
Object/ liberary modules : 添加 :libmatpm. lib libmmfile. lib libmcc. lib libmatlb. lib
(1) 设置项目编译选项 。 首先建立一个新的项目 ,或者打开一个已有的项目 , 然后选择菜单 :
Pro. ect - > Settings - > C/ C + + ①Categery : Preprocessor
Preprocessor definitions ; 添加 :MSVC , IBMPC ,MSWIND ②Categery : Precompiled Headers 选择 :Automatic use of precompiled headers
C + + 源码 (1) 首先应设置 Matcom 所对应的编译器类型 、数据 类型 。 (2) 将你所需要的. M 文件翻译成 C 源码 。 (3) Visual C + + 环境设置 。 在 Visual C + + 的“Project - > Settings - > C , C + + - > Preprocessor - > Additional include subdirectories”中 填入当前 Matcom 所处的路径 (如“c : \ matcom \ ”) 。 在 Visual C + + 中的工程窗口处“Project - > Add to Project - > Files”. 加入 mlibvc0. lib 库文件 。 (4) 修改 C + + 源代码 。 注意 : ①在头文件处应包含 matlib. h 。
· 8 2 · 微 机 发 展 第 13 卷
可将. cpp 和. h 文件加到 VC 的工程项目中和工程项目一 起编译即可 。也可以用 MCC 编译器编译为 stand - alone 程序 ,使其独立运行 。
下面介绍将 MCC 生成的 C + + 程序嵌入到 VC 时 ,应 对 VC 编译环境所作的处理 。
第ห้องสมุดไป่ตู้
13 卷 第 9 2003 年 9 月

Micro微com p机ute r 发Dev e展lopment
VoSle. p1.3
No . 2003
9
Matlab 与 Visual C + + 混合编程的实现
蒋 礼 , 徐义贤
(中国地质大学 地球物理系 ,湖北 武汉 430074)
# define ML IB 0 # include“matlib. h. ” ②在 类 成 员 函 数 CMfcApp : : Init Instance 中 调 用. InitM 启动对 Matlab 函数的调用 。
BOOL CEcgstarApp : : Init Instance ()
{ TRACE0 (“initM \ n”) ; initM (stin ,stout ,sterr) ; ……
C : \ matlab \ extern \ lib
C : \ matlab \ extern \ include (4) 编写程序 。 MCC 命令生成的 CPP 文件和自己手工编写的 CPP 文件 ,其项目设置是完全相同的 ,程序语法原则上也是一 样的 ,只是 MCC 生成的 CPP 文件有大量用于解释的代 码。 ①添加自己编写的程序模块 : 用下面文件头 # include“stdafx. h” # include“matlab. hpp”
Implementation of Programming by Combining Matlab with Visual C + +
J IAN G Li , XU Yi2xian
(Dept . of Geophysics , China University of Geosciences , Wuhan 430074 , China)
经过多次实践 ,总结出下列几种接口方法 。调试环境 为 Matlab 6. 0 和 VC + + 6. 0 开发平台 ,并且假定 Matlab 安装在 c : \ matlab 目录下 。
2 Matlab 和 VC + + 混合编程的具体实现 2. 1 运用 MCC 将 Matlab 的代码编译为 VC 编译器能识
Abstract :Analyzes and discusses t he interface technology for Visual C + + and engineering language Matlab from different points of view. Provides several met hods of mixing programming and t heir strongpoint and shortcoming for engineering designer. By mixing bot h of t hem , can use powerful calculating abilit y and many functions of Matlab to reduce time of programming design by a long way ,and inherit VC’s beautiful interface. So it is a better met hod of programming design. Key words :Matlab language ; Visual C + + language ; combined programming
libmx. lib libmat . lib (3) 设置编译环境 。
Tools - > Options - > Directories Include files 添加 :
C : \ matlab \ extern \ include
C : \ matlab \ extern \ include \ cpp Library files 添加 :
然后 ,按 C + + MathLib 文档要求的格式书写程序 。 ②嵌入 mcc 生成的文件 : 在 Matlab 下用下面格式的命令生成 cpp 文件 ,假定 要编译的函数名为 Function - Name :
mcc - t - L Cpp Function - Name 得到 : Function - Name. hpp ,Function - Name. cpp 将 Function - Name. cpp 加入项目 ,不做任何改动 。最 后进行编译就可以了 。 2. 2 运用 Matcom 将 Matlab 的源代码译成同等功能的
} ③在类构造函数 CMfcApp : :CMfcApp . 中不要调用任 何 Matlab 函数 。 ④在类构造函数 CMfcApp : : ~ CmfcApp 中调用 ex2 itM 结 束 对 Matlab 函 数 的 调 用 。 CEcgstarApp : : ~ CEcgstarApp () { exitM () ; } 。 ⑤在程序中合适的位置插入经 Matcom 翻译过后的 C + + 源码 。 ⑥编译工程文件 ,就可得到所需的结果 。 2. 3 运用 Matcom 将 Matlab 的函数编译为可独立执行 的动态链接库 用 Matcom (MIDFVA) 或 MCC 将 Matlab 工具箱中的 函数编译为 DLL 文件 ,然后放在工程项目的同一个路径 下或系统下 。这样一来 ,工程项目就可以直接调用该函 数 。这种方法的好处是 Matlab 所编的函数不需要和 VC 的代码一起编译 ,适合做一些自定义的函数来扩展 VC 所 编的应用程序的功能 。
摘 要 :从不同角度分析和研究了 Visual C + + 与工程计算语言 Matlab 的接口技术 。为工程设计人员提供了比较全面的 Visual C + + 与 Matlab 的混合编程方法 ,并给出了各种方法的优缺点 。通过二者的结合 ,既有效地利用了 M atlab 强大的数 值计算能力和众多的函数 ,大大减少程序设计的工作量 ,又继承了 Visual C + + 良好的程序界面 ,证明是一种很好的程序设 计方法 。 关键词 :Matlab 语言 ;Visual C + + 语言 ;混合编程 中图分类号 : TP311152 文献标识码 :A 文章编号 : 1005 - 3751 (2003) 09 - 0081 - 05
Matlab 是一个高度集成的系统 ,集科学计算 、图像处 理 、声音处理于一体 ,具有极高的编程效率 。近年来 ,Mat2 lab 已经从最初的“矩阵实验室”,渗透到科学与工程计算 的多个领域 ,在自动控制 、信号处理 、神经网络 、模糊逻辑 、 小波分析等多个方向 ,都有着广泛的应用 。VC + + 是一种 新颖的可视化编程语言 。在工程应用中 ,一般用 VC + + 语言编写应用程序 ,实现交互界面 、数据采集和端口操作 等 ,但 VC + + 在数值处理分析和算法工具等方面 ,其效率 远远低于 Matlab 语言 。在准确方便地绘制数据图形方 面 ,Matlab 语言更具有无可比拟的优势 。此外 , Matlab 还 提供功能强大的工具箱 。但 Matlab 的缺点是不能实现端 口操作和实时控制 。因此 ,若能将两者结合运用 ,实现优 势互补 ,将获得极大的效益 。
相关文档
最新文档