Matlab与VC的接口设计
VC++调用MatLab数学库接口设计
( . h 4 hR s r s t e f C T 跏i z a g 1 T e5 t e a hI tu E C, j h n e c n i to i u a O o8 , i ; 5o 1 n a 2 H bi n e i cn m c T d , h i h a gH bi 5 0 1 C i ) . e i r t o oo i e U v s y fE s& r e S i zu n e 0 6 。 hn a j a e0 a
M t b库文 件 的发 布 等 内容 。 aa L 关 键词 V +; a a 态 库 ; 号 处 理 函数 C+ M t b动 L 信 中图 分 类 号 T 94 N 1 文 献 标 识 码 A
The M eh d o t o fVC ++ CalM a La a h Li l t b M t b
0 引 言
M ta a b的信 号 处 理 工 具 箱 提 供 了经 典 信 号 处 L
理 的大部分 方法 , 于 电子对 抗 专 业 的研 究 人 员 来 对 说是 一个非 常优 秀 的 算 法研 究 和 辅 助设 计 的工 具 。 但是 安 装 M ta a b对 计 算 机 的 配 置 要 求 较 高 , L 且 M ta aLb为解 释性语 言 , 以工 程 上一 般 不 用 M ta 所 a b L
维普资讯
专 题 技 术 与工 程 应 用
V C+ +调 用 MaL b数 学 库接 口设 计 ta
王 俊 蕊 刘 力 军 ,
( .中国电子科 技集 团公 司第 5 1 4研 究所 , 河北 石 家庄 00 8 ; 50 1
2 河北经 贸 大学 , . 河北 石 家庄 0 0 6 ) 50 1
浅析VC与matlab接口编程(一)
浅析VC与matlab接口编程(一)作者:孙科除了使用MATCOM之外,matlab与vc的混合编程还有其他的几种方法:1 通过matlab engine方式。
此种方法需要在机器上安装matlab软件,而且执行效率低,因此在实际应用中不常采用这种方法,在软件开发中也不可行,比较适合个人使用或做演示用。
2 直接调用matlab的c/c++数学函数库。
vc中可以直接使用matlab提供的c/c++数学函数,此方法需要对c/c++语言非常熟悉。
3 用matlab自带的matlab compiler.此种方法有很多限制:(1)不能转换脚本m文件,只能转换m函数;(2)不能使用matlab对象;(3)不能用input或者eval操作matlab空间变量;(4)不能动态的命名变量,然后用load或者save命令来操作,不能对使用load指令装载普通文本文件的m文件操作;(5)不能处理具有嵌套调用其他m文件的m文件;(6)不能使用matlab内联函数(7)不能对使用了java接口的matlab代码文件使用4 使用matlab的combuild工具:该方法简单,通用性强,几乎可以使用matlab的任何函数,因此在程序较大,调用函数较多时使用起来效果很好,此方法也是mathworks公司推荐的使用方法;5 使用matcom工具。
相比其他方法而言,有下列优点:(1)转换过程简单,容易实现;(2)可以方便的生成dll和exe文件;(3)不仅可以转换独立的脚本文件,也可以转换嵌套的脚本文件;(4)设置环境后,可以使用matlab工具箱函数;其缺点是:(1)对struct等类的支持有缺陷;(2)部分绘图语句无法实现或得不到准确的图像,尤其是三维图像。
在不涉及到三维作图以及m文件不大的情况下,使用效果很好。
Matcom是mathTools公司推出的一个能将M文件转化成相同功能C++代码的工具。
相比Matlab自带的编译器Compiler,用Matcom转化代码要简单和方便得多。
MATLAB与VC混合编程配置设置
MATLAB与VC混合编程相关配置的设置MATLAB与VC的混合编程中,需要对电脑的“环境变量”和VC的“环境配置”进行设置,然后才可以进行程序的调用。
(1)电脑中“环境变量”的设置:对于win10系统控制面板→系统→高级系统设置→环境变量→系统变量→path中添加D:\softwares\MATLAB\ bin\win64,该路径是MATLAB中dll文件的路径,在path 中添加该路径的目的是让VC在运营时能够读取dll文件。
否则VC在运行时可能会出现“计算机丢失**.dll文件”的情况。
对于win7系统的“环境变量”设置,同样是在path中进行的。
(2)VC的环境配置首先需要建立一个新项目,如MyAdd.cpp。
项目→MyAdd属性→VC++目录→包含目录→D:\softwares\MATLAB \extern\include;项目→MyAdd属性→VC++目录→库目录→D:\softwares\MATLAB\installation document\extern\lib\win64\microsoft。
C/C++→常规→附加包含目录→D:\softwares\MATLAB \extern\include;C/C++→常规→调试信息格式→程序数据库(/Zi);链接器→常规→启用增量链接→是(/INCREMENTAL);链接器→常规→附加库目录→D:\softwares\MATLAB\ extern\lib\win64\microsoft;链接器→输入→附加依赖项→libMyAdd.lib,mclmcrrt.lib,libmx.lib,libmat.lib,mclmcr.lib。
其中在输入时这些lib之间用回车换行。
上述步骤的工作界面如下所示:需要注意:在进行VC与MATLAB混合编程的过程中,用到的环境是32位还是64位,在这里需要是相同的编程环境才可以相互调用,如:上图中如果是x32,则需要点击“配置管理器”进行重新设置。
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)
matlab与VC之间的通讯连接
1.首先配置vc++编译环境:tools---options
2.配置工程的lib文件:project—settings
3.修改mdl文件:
将AB的值输出到workspace
将simout和simout1的save format都改成array,设置完了不要忘了点击apply Simulation—configuration parameters
设置完了不要忘了点击apply,设置了initial state和final state 运行原来的mdl文件会出错,没关系,想要在matlab里运行,直接改回去就行了
4.程序代码说明:#include "engine.h"
示范程序,每次运行间隔1秒,第二秒从第一秒的最后状态开始运行,从0到8只运行循环9次因为simulink仿真每次都是在10秒之内,也可以试试让循环运行10次看看
时间间隔有点长,看了matlab里面的单独运行原始的mdl,运行时暂停workspa里的数据基本上总共运行了1000次左右,整个程序运行不到10秒,所以建议时间间隔为0.03秒,循环10/0.03≈340或者350次
5.程序界面说明:
点击button1,但是注意程序运行有点卡,程序源码里设置每次循环完事都会弹出一个消息框,只有点击了消息框的确定,程序才会继续运行,同时此次循环最后的A和B的值显示在AB对应的框里。
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配置方法
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++接口技术的实现方法
6科技资讯科技资讯S I N &T NOLOGY I NFORM TI ON2008N O .01SC I ENC E &TEC HN OLO GY I NFO RM ATI O NI T 技术M AT LAB 是M a t h W or ks 公司推出的一套功能非常强大的商业数学软件,从信号处理、语音处理、数据采集、数值运算、图像处理、到电子仿真、金融分析等等,几乎在各个工业领域,他都已经得到了广泛应用,同时也取得了巨大的成功。
M AT LAB 是一种编程效率极高的编程语言,解决同样的数值计算问题,使用M ATL AB 要比使用BASI C,F ORT RAN,C 等语言编程效率要高几倍[1]。
但是,由于M ATL AB 是用一种脚本语言,他的解释是逐行执行的,程序中所有的变量都是用M xAr r a y 来实现的,所以为了保证通用性,它的执行效率非常低,这就是我们常常看到的:在开发一些复杂的算法时,通常会发现程序执行得特别慢,虽然M a t hwor ks 公司已经在竭力提高m 脚本文件(scr i pt f i l es)的运算速度,但目前为止效果仍然不能和实现同样功能的可执行程序相比。
而且m 脚本文件是不能脱离M AT LAB 这个应用程序环境,这就大大制约了程序的可移植性和通用性[2]。
同时,由于M ATL AB 的m 文件是ASC Ⅱ文件,任何人都可以打开显示代码并对其进行修改,不利于隐藏算法和保护开发者的劳动成果。
V i sua l C ++自从诞生以来一直就是W i n-dows 环境下开发应用软件的主流平台,因为Vi s ua l C++与W i ndows 操作系统同出自M i cr osof t 公司,它具有得天独厚的优势。
V i -s ua l C++集成了功能强大的编辑器、编译器、链接器、调试器、A ppW i zar d ,C l ass W i zar d,AppSt udi o 等多种多样的可视化编程工具,可以很容易的实现菜单、工具条等,具有很强大的图形界面编程能力,用它写出来的界面友好、而且最后可以生成脱离V i sual C++环境而独立运行的应用程序。
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 文件。
VC与MATLAB接口编程方法与实现
VC++与MATLAB接口编程方法与实现摘要本文简介了VC++和MATLAB特点,探讨了MATLAB与VC++接口编程的三种方法,并详细论述了MCC和COM组件接口编程的方法和实现过程。
研究表明:采用VC++和MATLAB 接口编程方法降低了编程难度,较好地发挥了两者各自的优势。
关键词 MATLAB;VC++;MCC;COM;接口编程MATLAB是美国MathWorks公司研制开发的一种科学计算软件,它将高性能的数值计算、符号计算和可视化集成在一起,并提供了大量的内置函数以及功能丰富的工具箱,使用方便,编程效率高。
然而,MATLAB是一种解释性语言,运行效率低,不适合作为通用的编程平台。
VC++是Microsoft公司推出的一个基于Windows平台的可视化的集成开发环境,在运行速度、功能性以及应用程序界面开发方面功能强大,但在数值计算和图形绘制方面,VC++并不具备太多优势。
因此,采用MATLAB进行核心程序的开发,用VC++制作出友好的程序界面,然后将两者结合起来,可以较大地提高编程效率。
1 VC++与MATLAB接口方法概述1.1 MATLAB引擎方式MATLAB引擎采用客户机/服务器(Client/Server) 的方式,提供了一组MATAB API函数,通过调用这些函数实现以用程序进程之间的数据传递。
在运用中,让VC++程序作为前端客户机,它向MATLAB引擎传递命令和数据,并从MATLAB 引擎接受数据信息,实现动态通讯。
1.2 MATLAB编译器(MCC)MCC是MATLAB中经过优化的编译器。
使用MCC,用户可以将MATLAB数学库、图形库和界面的MATLAB程序转化为独立于MATLAB的EXE应用程序和DLL动态连接库,在VC中编写程序界面并加载调用动态连接库,实现两者之间的连接。
1.3 COM组件组件对象模型(简称MCR)是以组件为发布单元的对象模型。
它提供一种可以共享二进制代码的工业标准,允许任何符合标准的程序访问,所以COM作为不同语言之间的协作开发是非常方便的。
5第五章 VC与matlab接口
利用编译器将m文件转换成对应的C\C++文件,并在VC中调用
首先要保证编译器设置正确,编译器的设置可以参考前面两节的内容。 如果以前已经进行了配置就不需要这一步。 1、在MATLAB中编写如下函数: function [x]=gjfcz(A,b) %A=[-1.5 1 2; 4 2 3 ; -3 2 8] %b=[3;5;6] x=A\b 保存名为gjfcz.m,该函数的功能为求解线形方程组。 2、在MATLAB的命令窗口输入以下命令:mcc -m gjfcz.m 该命令用来生成对应的C文件和可执行程序。在MATLAB工作目录下(一 般是MATLAB\work)将会生成如下文件:gjfcz.exe,gjfcz.c,gjfcz.h, gjfcz_main.c,其中gjfcz.c,gjfcz.h是我们需要的文件。
5.将第四步拷贝的四个文件加入到VC工程中:工程->添加工 程->文件,选择刚才拷贝到Example2目录下的四个文件。完成 后如图
22
5、在ExamleDlg.cpp中加入如下代码: #include "matlib.h" #include "Test1.h" 6、在void CExamleDlg::OnButton1()中分别添加一个初始化类 库调用函数”initM(MATCOM_VERSION)”和一个结束类库调用 函数”exitM()”
14
Matcom 简介
这是个第三方控件,很小(8M多),原本属于mathtool公司,后 来被Mathworks公司合并了,使用该工具可以将m脚本文 件和m函数转化成相同功能的C\C++文件,相比其它方法 使用matcom具有如下优点: 1. 转换过程简单(由matcom工具自动实现),容易实现; 2. 可以方便的生成动态链接库文件(dll)和可执行文件(exe); 3. 不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件; 4. 设置环境后,可以使用Matlab的工具箱函数; 但matcom也有以下不足: 1. 对struct等类的支持有缺陷,对class数据类型; 2. 部分绘图语句无法实现或得不到准确图象,尤其是三维图 象;
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所示。
Matlab和Visual C++接口中编译环境的配置
«上一篇: 使用VC和MA TCOM结合开发应用程序心得笔记下一篇: [转帖]MATLAB 与C 语言的接口(多篇) »Matlab和Visual C++接口中编译环境的配置Usernameg @ 2004-06-02 10:09原作者姓名三剑侠正文Matlab是美国MathWorks公司推出的一种以矩阵为基本编程单位的高效数值计算语言,是一个集科学计算、图像处理、声音处理于一体的高度集成系统。
Matlab为用户提供了丰富的Windows图形界面设计方法,使用户能够在利用其强大数值计算功能的同时设计出友好的图形界面。
在编程效率、可读性、可移植性和可扩充性上,Matlab远远优于其它高级编程语言。
由于利用Matlab能够设计出功能强大、界面优美、性能稳定的高质量程序,它受到了越来越多用户的欢迎,成为了当今国际上最流行的控制系统计算机辅助设计的软件。
然而作为一种以解释方式运行的高级计算机语言,Matlab程序的执行效率较低。
为了解决这一问题,MathWorks公司提供了Matlab和C的接口,通过接口,用户就能在C程序中调用Matlab中的函数,从而实现既能拥有Matlab强大的数值计算功能又能享受高度执行效率的愿望[2]。
MathWorks公司提供的Matlab和C的接口方式共有3种:(1)将Matlab程序编译成MEX文件、C或C++文件;(2)在C、C++程序中利用Matlab Engine调用Matlab 函数;(3)在C、C++程序中利用Matlab C Math Library或Matlab C++Math Library调用Matlab函数。
其中通过方式(1)、(2)生成的程序只有在安装了Matlab系统上才能正常运行,而由方式(3)生成的程序则没有这样的要求,它能够以独立执行程序的形式运行,即使在客户没有安装Matlab系统下。
方式(3)唯一的缺点就是不能利用Matlab中丰富的图形句柄处理函数,但是对于Visual C++等开发工具而言,这不是一个很严重的问题。
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 的编译器,编译器设置完成。
浅析VC与Matlab联合编程(二)
::首页>> 文档中心>> 在线杂志>> 其它[ 在线杂志第42期][ 原创文档本文适合中级读者已阅读231次]浅析VC与Matlab联合编程(二)作者:邓科下载源代码在“浅析VC与Matlab联合编程(一)”中简单介绍了VC与matcom的接口编程,实现本功能,要真正熟练使用接口编程,还要对函数调用有一定了解。
本文通过一个实例,较详细的介编译后的函数。
首先新建一个函数huatu.m,该函数的功能是:接受用户输入的左端点值和右端点值两个输图形。
函数还将生成两个随机数,作为一个点的坐标在图中打印出来(绿点),用来说明如何在步骤如下:1.建立一个名为Example2基于对话框的MFC(exe)工程。
2.在matcom中新建一个名为huatu.m文件,如图1;图13.在matcom命令窗口中运行该函数,如图2;图24.将生成的huatu.h、huatu.cpp(默认位置为安装目录:\matcom45\samples\Debug)和ma 为安装目录:\matcom45\lib)四个文件拷贝到建立的工程Example2目录下。
5.将第四步拷贝的四个文件加入到VC工程中:工程->添加工程->文件,选择刚才拷贝到Exa 成后如图3;图36.在Example2dlg.cpp中添加头文件:(如图4所示)#include "matlib.h"#include "huatu.h"图47.为工程建立界面:添加一个Button按扭控件;添加四个Edit box控件,用于显示数据;添加显示文字,一个显示图形,将显示图形的Static text的ID设置为ID_PIC。
其他所有控件属性保适当调整显示图形Static text控件的边缘)。
如图5所示图58.按Ctrl+W为控件添加变量。
如图6所示图69.为Button1按钮添加响应代码。
如图7所示图710.运行程序,输入左端点和右端点,点击”画图”按钮,结果如图8所示。
Matlab与C_C_语言接口的方法.pdf
第20卷第4期佳木斯大学学报(自然科学版)Vol.20No.4 2002年12月Journa l of J i am usi Un iversity(Na tura l Sc ience Ed ition)D ec.2002文章编号:1008-1402(200204)-0428-05M atlab与C C++语言接口的方法①王洪东, 樊廷栋, 闫振林(黑龙江省理工学校,黑龙江佳木斯154002)摘 要: 通过M atlab与C C++语言的混合编程,将M atlab的代码编译成V C可识别的代码,并成为可独立执行的动态链接库,从而实现了在V C中直接书写M atlab语言,驱动M atlab运行,该方法可以提高M atlab的速度和安全.关键词: M atlab;接口;V C;C语言中图分类号: T P312 文献标识码: A0 引 言作为一种汇编语言和可视化工具,M A TLAB具有较强的功能,它可以解决工程设计的许多问题. M A TLAB具有使用方便、功能较强、界面友好、开放性强等特点,因而深受用户欢迎.近年来,随着M A TLAB版本的不断升级,它所包含的应用工具箱的功能越来越强大,已经由最初的偏重于自动控制领域向信号处理、图像处理以及工程问题等领域不断发展,并很快成为应用学科中的计算机辅助分析、仿真、教学等不可缺少的基础软件.[1]1 M atlab介绍M atlab是当今世界上使用最广泛的数学软件,它具有较强的数值计算、数据处理、系统分析、图形显示、甚至一个完整的数学平台符号运算.在这个平台上,只需寥寥数语就可以完成十分复杂的功能,大大提高了工程分析与计算的效率.另外由于M atlab的广泛使用,出现了为各领域专门使用的工具箱(即在某一研究领域常用数学工具的函数包),这些工具箱的出现更加促进了M atlab的流行.M atlab的最大特点是其基本数据单位是矩阵,矩阵是M atlab的核心,M atlab中所有的数据都是以矩阵形式存储的,而且每个元素都被看成复数.M atlab提供了矩阵运算,使得用户可以以多种形式快速地操作数据.此外,M atlab还提供了类似其它计算机编程语言的编程特征,它的指令表达形式和数学、工程中常用的形式十分相似.M atlab的另一个特点是编译语言紧凑、库函数非常丰富.M atlab经过多年的发展,目前已经开发了一系列的产品,包括M atlab的“主包”和几十个可选的“工具包”(Too lbox),主包中有几百个核心函数.工具包可分为两类:功能性工具包和学科性工具包.功能性工具包主要用来扩充M atlab的符号计算功能、图形处理功能、文字处理等.而学科性工具包是指那些专业性比较强的工具包,通常只适用于某些特定的专业,如控制工具包(Con tro l Too lbox)、信号处理工具包(Signal P rocessing Too lbox)、通信工具包(Comm un icati on Too lbox)等.这些工具包使用户不用再编写自己学科范围内的基础程序,避开了非常复杂而又繁索的子程序编写.[2]M atlab的第三个特点是具有强大的图形功能.利用M atlab可以很方便的实现计算结果的可视化,而且可以很方便地修改和编缉图形界面,使用起来非常方便.这一点是其他用于科学计算的编程语言,例如C语言、FOR TRAN语言等所无法比拟的.此外,M atlab还具有程序缩写方便、程序的可移植性好、开放性①收稿日期:2002-09-10作者简介:王洪东(1968-),男,黑龙江伊春人,黑龙江省理工学校讲师.等特点.2 M A TLAB 与V C ++或C 的混合编程M A TLAB 提供了C C ++数学库,其中的V C ++数学库和C ++数学库功能很强,使用它可以用类M atlab 的语法编写C ++程序,十分方便.虽然速度上仍然比普通的C C ++程序慢,但由此换来的高开发效率和可靠性往往是值得的.在V C 的集成开发环境里使用M atlab ,可以利用M atlab 的数学库将M atlab 的程序编译为编译器所能识别的源代码嵌入V C 的环境.熟悉M atlab C 或C ++数学库的人也可用C 或C ++的语法在V C 环境里直接编写程序.不过,M atlab 的数学库在开发时似乎倾向于编译独立的可执行程序,把V C 只作为一个编译和连接的工具,而没有过多地考虑在V C 的集成环境下进行开发,这给混合编程带来了很大的不便.为了解决此问题,经过多次实践,总结出下列接口方法.使M atlab 能在V C 的集成环境中进行开发,需求调试环境为M atlab 5.3和V C ++6.0开发平台,并且假定M atlab 安装在c : m atlab ex tern include 目录下.2.1 将M atlab 的代码编译为V C 编译器能识别的代码用M atlab 内部的编译器M CC 将M atlab 工具箱中的函数转换成C 编译器或C ++编译器所能识别的源代码,即将.m 文件转换成.cpp 文件和它的头文件(.h 文件).转换之后,可将.cpp 文件和.h 文件加到V C 的工程项目中和工程项目一起编译即可.也可以用M CC 编译器编译为stand -alone 程序,使其独立运行.下面介绍将M CC 生成的C ++程序嵌入到V C 时,应对V C 编译环境所作的处理.1) 设置项目编译选项 首先建立一个新的项目,或者打开一个已有的项目,然后选择菜单: P ro ject ->Settings ->C c++ 1. Catego ry :P rep rocesso r P rep rocesso r defin iti on s : 添加:M SV C ,I BM PC ,M S W I ND 2. Catego ry :P recom p iled H eaders 选择:A u tom atic u se of p recom p iled headers T h rough header :stdafx .h2) 设置项目连接选项 首先要把M atlab 的几个函数定义文件(3def )生成相应的库文件(3.lib ): libmm file .def libm cc .def libm atlb .def libm x .def libm at .def 它们位于目录c : m atlab ex tern include 用V C 下的DO S 命令lib 导出库文件: libmm file .lib libm cc .lib libm atlb .lib libm x .lib libm at .lib 将它们放入你的项目连接选项: P ro ject ->Settings ->L ink Catego ry :Inpu t O b ject lib rary m odu les : 添加:libm atpm .lib libmm file .lib libm cc .lib libm atlb .lib libm x .lib libm at .lib3) 设置编译环境 Too ls ->Op ti on s ->D irecto ries Includee files 添加:924第4期 王洪东等:M atlab 与C C ++语言接口的方法034 佳木斯大学学报(自然科学版) 2002年 C: m atlab ex tern includee C: m atlab ex tern includee cpp L ib rary files添加: C: m atlab ex tern lib C: m atlab ex tern lib4) 编写程序M CC命令生成的CPP文件和自己手工编写的CPP文件,其项目设置是完全相同的,程序语法原则上也是一样的,只是M CC生成的CPP文件有大量用于解释的代码.(1).添加自己编写的程序模块用下面的文件头:#Include"stdafx..h"#Include"m atlab.hpp"然后,按照C++M ath lib文档要求的格式书写程序.(2).嵌入m cc生成的文件在M atlab下用下面格式的命令生成cpp文件,假定要编译的函数名为Functi on N am e:m cc-t-L Cpp Functi on N am e得到:Functi on N am e.hpp,Functi on N am e.cpp将Functi on N am e.hpp加入项目,不做任何改动.最后进行编译就可以了.2.2 将M atlab的函数编译为可独立执行的动态链接库用M atcom(M I D EVA)或M CC将M atlab工具箱中的函数编译为DLL文件,然后放在工程项目的同一个路径下或系统下.这样一来,工程项目就可以直接调用该函数.这种方法的好处是M atlab所编译的函数不需要和V C的代码一起编译.适合做一些自定义的函数来扩展V C所编的应用程序的功能.对于编译为DLL文件的方法,在M atcom环境里的文件菜单直接给出了编译为动态链接库的菜单项.只要点击该命令,系统会自动给出1个对话框,要求给出要编译的M atcom文件(或M atlab文件)的路径.也可以在M atlab环境里用命令:m cc-x Functi on N am e(假定所要编译的M atlab或M atcom函数的名称为(Functi on_N am e),该命令会启动M CC编译器,将函数自动编译为动态链接库函数.2.3 V C中直接书写类M atlab和M atcom语言1) 在V C的程序里直接书写类M atcom语句[3] 按照m atcom的语法,在V C中直接书写类m atcom语句(与m atcom很相似).例如: vo id testcom(vo id) { In it M(M A TCOM V ER S I ON); 初始化M atcom进程 M m x,s,c; 定义变量,M m为M atcom的矩阵类 X=co lon(0,0,0,01.10); 类似fo r循环语句 S=sin(x); 正弦函数 C=co s(x); 余弦函数 P lo t((CL(x),c,x,s,)); 画出正弦和余弦函数 Ex it M(); 退出M atcom进程 }testcom 这个函数是在V C 的源程序里直接书写M atcom 语句,其中所有的变量x ,s ,c 都是一个序列数,而不是一个单独的值.在过程开始时必须初始化M atcom 进程,即In it M (M atcom V ER S I ON );当书写完M atcom 语句结束过程时,需要退出M atcom 进程,如程序中的ex it M ().其中的co lon ()函数和p lo t()函数都是M atcom 下的函数.co lon (0.0,0.01,10)类似一个fo r (x =0.0;x <10;x =x +0.01)的循环语句.M atcom 优于M atlab 的主要地方是M atcom 支持图形,即支持P lo t ()函数和其他图形函数在V C 中直接应用.2) 在V C 里直接书写类M atlab 语句 vo id testlab (vo id ){ mwA rray a ,b ,u ; 定义矩阵变量 a (2,2)=-0.7497,1,-0.2027,0; 对矩阵变量赋值 b (2,1)=-04.1841,-6.5049; 对矩阵变量赋值 u =1; 对矩阵变量赋值 mwA rray x (mwA rray ::UNA SS IGN ED ); 初始化变量X (L T ITR )GetP roc A ddress (handler DLL ,"ltitr "); 获得ltitr 函数的操作地址 x =ltitr (a ,b ,u ); 调用ltitr 函数 ofstream ou tfile ("lab .tx t );建立文件lab .tx t ou tfile <<; 将结果x 输出到lab .tx t 文件中保存}在teatlab 这个函数中,用V C 可以识别的V C ++数学库中的mwA rray 类来定义数组变量,而且赋值得方式和普通的V C 数组变量不同.在普通的V C 语句中是a (2,2)个数值,即仅代表1个2行2列的数组的第2行第2列上的1个值,而在以上V C 例子中类似的M atlab 语句中的a (2,2)则代表2行2列的所有4个值.而且类M atlab 语句不支持图形.2.4 内部驱动M atlab 运行首先用M atlab 的内部引擎在中激活M atlab ;然后,把要执行的数据和过程写在M atlab 的工作区,由M atlab 来完成运算.下面是在V C 中调用M atlab 的引擎时需要对V C 环境的设置.1) 生成几个静态库文件在目录c : m atlab ex tern include 下找这几个文件:libeng .def ,libm x .def ,libm at .def在DO S 行命令下用V C 的命令生成3个库文件;把生成的3个库文件:libeng .lib ,libm x .lib ,libm at .lib 把生成的3个L I B 文件加入L I N K 项.2) 设置编译选项在里面选:在B u ild >Settings >C C++>P recom p iled H eaders 里面选:A u tom atic u se of p recom p iled haders ,th rough header :stdafx .h3) 编写程序并加入你的P ro ject程序可以.C 或.CPP 文件.在程序的开头一定要包含头engine .h 文件.4) 调用M atlab 接口函数,写包含有engine .h 驱动功能的模块[4]在CPP 文件里直接调用M atlab 的接口函数来激活M atlab ,然后将要执行的数据和函数写入M atlab 的工作区即可.134第4期 王洪东等:M atlab 与C C ++语言接口的方法234 佳木斯大学学报(自然科学版) 2002年例如:Engine3engOp en(con st char3starc m d); 驱动M atlab的接口函数In t engPu tA rray(Engine3ep,con st m xA rray3m p); 将变量写入M atlab工作区In t engEvalString(Engine3ep,con st char3string); 将要执行的功能函数以字符串的形式写入工作区.In t engC lo se(E lo se(Engine3ep); 关闭M atlab引擎,退出M atlab所有的接口函数都在engine.h头文件中声明.接口函数的使用方法可以查阅M A TLAB A pp licati on P rogram I帮助系统,也可以n terface帮助系统,也可参考M atlab自带的例子:c: m atlab ex tern exam p les eng_m at engw indem o.c5) 设置其他编译连接选项Too ls->Op ti on->D irecto riesInclude files添加:c: m atlab b in这样编译就可通过了.在AU TO EXEC.BA T的PA TH加上c: m atlab b in,程序就可以执行了.3 结 语上面提出的方法成功地实现了M atlab与C语言这间的接口,使得C语言可以自由地调用M atlab强大数学处理函数.该方法不仅解决了M atlab由于是行解释(即一句一句执行)方式带来速度慢的缺陷,更为重要的是在用户自己开发的系统中,避免了编写一复杂又繁琐的子程序,且完全脱离了M atlab系统,当代码被编译成可执行程序后,大大提高了程序的安全保护性,该方法的缺陷是它不能实现所有的M atlab 函数的调用,尤其是M atlab中丰富的图形函数不能被调用.参考文献:[1] D uane H ansel m an B ruce L ittlefield.精通M A TLAB综合辅导与指南[M].西安:西安交通大校出版社,1998.1.[2] 李海涛,邓樱编著.M A TLAB6.1基础及应用技巧[M].北京:国防工业出版社2002.3.[3] 刘朝英等.M A TLAB在模糊控制系统仿真中的应用[J].计算机仿真2001(4).[4] 谭浩强著.C程序设计(第二版)[M].北京:清华大学出版社1999.12.THE INTERFACE BET W EEN M AT LAB AND C C++W A N G H ong-d ong, FA N T ing-d ong, YA N Z hen-lin(Sc ience and Eng i neer i ng School of He iL ongj i ang Prov i nce,He ilongj i ang J i amusi154002,Chi na) ABSTRACT: T h rough the m ix p rogram of M atlab and C C++,the code of M atlab can be recogn ized by V C,w h ich becom es indep enden t execu tive of dynam ic link lib rary to drive M atlab.T hen, M atlab language can be directly w ritten in V C.T h is m ethod increases bo th speed and safety of M atlab.KEY WOR D S: M atlab;In terface;V C;C。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2 7卷 第 5 期
20 0 6年 5月
湖南科技学院学报
J u a o n n Un v r i fS i n e a d E g n e i g o r l fHu a i e st o c e c n n i e rn n y
VO .7NO5 1 . 2 M a .0 6 y2 0
M t a b与 V l a C的接 口设计
韦美雁
( 湖南科技 学院 信息 与计算机科学 系,湖南 永州 45 0 ) 2 0 6
摘 要: 简述了Maa 与 V tb l C实现相互通信的意义, 着重介绍了Maa 与 V tb l C相互调用的方式, 并对在 V 调用Maa C中 tb l
meP it ‘ hsi my f s p o rm! ; x r f ' i s r r ga ” n (T i t )
程序 代码 以实现具体 的通信功能 ,
)
二
Maa t b调用 VC的接 口 l
meF n t n函数中参数 的具体说明 :nh 为整型 ,用 x u co i ls 来说明函数的输 出参数个数 ;ls ph 为一指向 mx ry结构体 Ar a
作用则是提供 c 十 F r a 语言与 Mal + 或 ot n r t b的交互操作 .m a Ux
一
自动控制、 信号处理、 图像处理等若干个领域的计算和图形
处理 功能 。 以矩阵作 为基 本数据结构 , 它 因而非常适合大规
模 的数值计算 。但 Ma a tb是解释性语 言 ,对命令是边解释 l
边 执行 的, 因而其执行的速度比较慢 , 特别是进行循环计算
时。 如果执行多次嵌套, 则其执行速度会更慢。 c + 而 + 是编
译性语言 , 一经编译通 过后,以二进制代码方式执行 ,因而
其执行速度非常快, 在进行多层次的嵌套循环运算时, 就更
能体现它的优势 。且用 Vsa c + i l + 开发软件是可视化 的,又 u 与 Wid w 操作系统同出 自Mi oo 公 司, no s c sf r t 在应 用软件开 发平 台上其具有得天独厚的优势。但 Ma a tb中许多复杂 的 l
l 、Ma a 调 用 V 的基 本 原 理 tb l C
Ma a tb调用 V 的原理主要是 :Mal l C t b程序 用 C + a + 语
类型的指针数组,该数组的各元素依次指向所有的输出参
数 ;输入参数 nh rs也为整型 ,用以说明函数 的输 入参数的 个数 ; rs ph 也为一指 向 m A ry结构体类型的指针 数组 , xr a 其 元素依次指向所有的输入参数。 ()ME 2 X文件 的编译 为 了快速地 编译生成 ME X文件 , 以在 Mal 命 令窗 可 tb a
言编写, 然后编译成ME X文件用于 Maa 中函数直接调用, tb l
而不必重新编写相应 的 M 文件 。 X文件是一种按 照固定 ME
的格式 , c + Fra 语 言编写 ,由Maa 解释器调用 用 + 或 orn t tb l
并执行 的动态链接 函数。
在 Maa 中调用 ME tb l X文件相当方便, 其调用方式与使 用 Maa tb的 M 文件相同,只须在命令窗口中键入相应的 l
完成相 互间 的程序 通信 ,其典 型形式 如下所示 : ( 以函数
i t f sC为例 ) r.
椭n ld me .” c u e“ x h
数值计算在 Vsac + i l + 中是很难实现 的,比如在 Vsac + u i l + u 中用 c + + 语言实现小 波运算 或高阶统计量运 算 , 要用多少行
一
函数库”和 “ e 一函数库”。 的作 用是提供在 c + mx 前者 +
Ma a l f b是美国 Ma rs 司推 出的一套数值 计算软 t Wok 公 h 件 ,可以实现数值分析、优化 、统计 、偏微分方程数值解、
或 F ra 语言中编辑 m Ar 结构体对象的方法 ;后者 的 o t r n x ry a
函数库 ”与 “ e n函数库” 所提供 的函数操作是构件 mx
ME X文件 的基础 ,几乎所有的应 用程序接 口操作都是与这 两个 函数库密切相 关Байду номын сангаас。 2 、ME X文件 的编辑与使用 ( )ME 1 X文件的编写 ME 文 件 都 有 固 定 的 程 序 结 构 , 即 入 1 序 X 3程 meF n t n x u co ,该程序是 ME i X文件与 Ma a 廿 b的接 口,用来
的几种不同方式进行 了简单的比较.
关键词:Maa;Vsac + tb i l + ;接 口 l u 设计;计算引擎;函数库
中图分类号:T 3 1 1 P 1 . 1 文献标识码 :A 文章编号:17 — 2 9( 06 5 们1 — 3 6 32 1 2 0 )0 一 10
一
引 言
代码就很难想象 了 因此 ,通过把 Mal t b和 Vsa c + a i l + 有 u 机 的结合起来 , 就能很好地各 自发挥它们的优势 , 快速地开 发 出数学计算专业软件 。
V i meF nt n it lsmx r y ls , od x uc o (n nh, A r ph[ i a ] it rscnt Ara ph[) n nh, o smx ry rs 】 {
ME X文件名 即可 。在 ME X文件 中常用到 的函数库 为 “ mx 收稿 日期:20 -0 -2 06 2 3 作者简介 :韦美雁 (9 3 ,女 ,湖南科技学 院计算 17 一) 机与信 息科学系讲师 , 在读硕士研究生 , 主要研究 方向为软 件工程、地理信息系统 。
口中键入如下命令 : e —e p 让 Maa 动设置编译器 m x st , u tb自 l