基于COM的Matlab与C_混合编程应用
基于MATLAB与VC++混合编程的脑电偶极子源定位的仿真计算
磊 桑金 歌 ,
0 1 0 ;. 津大 学仁 爱 学院计 算机科 学 与技 术 系, 60 12 天
摘
要 : 电活动 源 可 以用一 个或 几个 偶极 子等 效 。脑 电偶 极 子 源 定位 就 是 通过 改 变等 效偶 极 子 脑
的参数使 正 向计 算所得 头皮 电位 与测量 电位 拟合 , 数 学上 表 现 为 最 小 均 方误 差 的 非线 性代 价 函 在 数, 这是 一 个非 常复杂 的 优化 问题 , 解 通 常 依赖 于非 线 性 优 化 算 法 。提 出 了基 于 MAT AB与 求 L
维普资讯
第 2 卷第 5 5 期
20 0 8年 9月
河 北
工 业 科
技
Vo . 5, . I 2 No 5
S p. 0 8 e t20
He e J u n lo n u tilS in e a d Te h o o y b i o r a fI d s ra ce c n c n l g
p o lm se u l O me s r dp t n i 1 t sr p e e t d b h a ts u r - ro o -i e re p n i ef n to t e a is r b e i q a a u e o e ta .I i e r s n e y t el s - q a e e r rn n l a x e sv u c i n i ma h m tc . t e n n
dp l o r e l c l a i n i o v d b h n i g t e d p l s p r me e s S h tt e p t n i lo c l a c l t d b h o wa d i o e s u c a i t ss l e y c a g n h i o e a a t r O t a h o e t fs a p c l u a e y t e f r r o z o a
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是⼀个可执⾏的⼆进制⽂件。
Matlab与C混合编程的方法研究与实现毕业论文
Matlab与C混合编程的方法研究与实现摘要:文章探讨了MATLAB与VC++的优缺点,介绍了VC++与Matlab混合编程的几种方法。
通过二者的结合,既有效地利用了MATLAB强大的数值计算能力和众多的函数,大大减少程序设计的工作量,又继承了VC++良好的程序界面,证明是一种很好的程序设计方法。
具体说明了如何应用Matlab引擎实现混合编程以及如何利用MATCOM进行MATLAB和VC++混合编程,并将两种方法用于数字图像处理。
关键词:MATLAB;VC++;MATCOM;引擎;混合编程;图像处理一、引言1、数字图像处理简介:图像技术由高到低分为三个层次:图像处理、图像分析和图像理解。
图像处理是比较底层的操作,它主要在图像像素级上进行处理,处理的数据量非常大。
数字图像处理最基本的目的就是改善图像,主要是按需要进行适当的变换突出某些有用的信息,去除或消弱无用的信息,如改变图像的对比度,去除噪声或强调边缘的处理等,其基本方法有:直方图修正、灰度变换、图像的频域特性、图像平滑、图像锐化等。
直方图是图像的重要统计特征,是表示数字图像中每一灰度级与该灰度级出现的频率数间的统计关系。
直方图能给出该图像的大致描述,如灰度范围、灰度级的分布、整幅图像的平均亮度等,但它不能完整地描述一幅图像。
通常用横坐标表示灰度级,纵坐标表示频数。
通常一幅均匀量化的自然图像由于其灰度直方图分布集中在较窄的低值灰度区间,引起图像的细节看不清楚,为使图像变得清晰,我们可以通过变换使图像的灰度范围拉开或使灰度分布在动态范围内趋于均匀化,从而增加反差,使图像的细节清晰,达到图像增强的目的。
灰度变换是图像增强的一种重要手段,它可以使图像动态范围加大,使图像对比度扩展,图像更加清晰,特征更加明显。
灰度变换可分为线性、分段线性、非线性以及其他的灰度变换。
线性灰度变换实际上使曝光不充分的图像中黑的部分更黑,白的部分更白,从而提高对比度。
图像中的边缘或者线条部分与图像频谱中的高频成分相对应,因此采用高通滤波的方法让高频分量顺利通过,使低频分量受到抑制,就可以增强高频的成分,使图像的边缘或者线条变得清晰,实现图像的锐化。
C#与Matlab混合编程的几种方式
C#与Matlab混合编程的几种方式主要参考资料: 《Matlab C# Book》,我看的是第一版的电子书,网上可以搜到。
说实话,我觉得C#与Matlab混合编程相比VC与Matlab混合编程没有啥优势,基本上还是通过P/V Invoke操作Matlab mcc编译器生成的C语言版本的DLL。
此外,速度上也慢的吓人-_-下面简单写写C#与Matlab混合编程的4种方式(可能还不够全,欢迎补充):1. 通过从Matlab的*.m文件中生成C语言版本的DLL具体过程:1) 在Matlab中写好一个m文件(比如一个简单的加法函数myplus.m);2) 使用Matlab的mbuild -setup选择编译器,我机器上的编译器有两个LCC 和VC2008(注意如果使用做应用的话,建议编译器选VC2008,否则C #中会告诉你DLL找不到Entry Point)3) 在命令行中使用mcc -B csharedlib:mypluslib myplus.m (如果是多个M文件,接着往后写),等待几十秒之后会生成若干文件(*.c, *.h, *.dll等), 其中.h 文件中有导出的函数原型。
4) 建立C#工程,并将前面的dll拷贝到合适路径,使用[ DllImport( "myplusl ib.dll ", CallingConvention = CallingConvention.Cdecl)] 将.h文件中的函数使用C#的语法声明。
一般来说,这些函数中会有**Initialize,**Terminate和M文件中定义的函数(**代表lib名称)。
5) 使用CsharpMatlabCompilerVer4.cs将C#中的数据类型和Matlab中的矩阵等类型进行变换。
该文件定义了MatlabCSharp类,主要是导入了libmx.dll中的一些函数,并封装了一些实用的函数如double2mxArray_scalarReal等。
MATLAB与VC混合编程的实现
" ,-. / -0 与 12; ; 混 合 编 程 的实现方案
经 过研 究与验 证 3 12环 境中 调 用 ,-. / -0 程序有如下几种实现方案 ! 使用 ,-. 编译器 4 4 P / -0的 QJ J 使 用 ,-. 将4 4 R 2 S,( ,H T U 1-* Q 源文件 翻译为 J 并编译为 4 或4 文件 4 I I代码 3 K V K W : : 按 照 ,-. 在 12 或 0 4 X 2 S, 的 语 法 3 2中 直接书写 ,-. / -0语句 4
,-. / -0与 12混合编程的实现
潘林峰 3谭立超
中南民族大学电子与信息工程学院 3 湖北 武汉 $ ( & # # % $ *
摘 要! 讨论了 ,-. 并介绍了各方 案 的 使 用 方 法 和 技 巧 3 提出了选择算法的依 / -0与 12之间接口的方案 3 据并进行了混合编程 3 提高了代码执行速度 4 文献标识码 ! -
图 8 应用程序调用 !"# $ "%引擎函数 & 8 "R : W R 1 I KR F L W F 0 5? 0 1 1 P W!"# $ "%I P W P I
* & H 实现调用的步骤 针 对 ,2 需完成 44 的集成开发环境 7 9 ( ; Q C 如下的工作 6 在调用 !"# 7 8 9 $ "%引擎的 2 B B文件中加 入 I &[头文件 & P W P I
收稿日期 ! ) # # & # & ) ’ 万方数据
[\SI [\T . A A : 7 > 6 A L 7 6 B K J > A B 6 K 7 添加 ! 6 L J : 8 W K M 6 : K 7 ! ] ] ] J ,-. / -0 K V > K B L 6 L J : 8 W K ! ] ] J ,-. / -0] K V > K B L 6 L J : 8 W K] J I I 以上是 ,-. 的 文件和 文件 4 4 / -0 4 ? W K M 添加 ! / 6 ^ B 9 B _ M 6 K : 7 ! ] ] ] J ,-. / -0 K V > K B L : 6 ^ ! ] ] ] J ,-. / -0 K V > K B L 6 L J : 8 W K 将 文件不做任何改动 加入 ( $ * M 4 3 6 : K L 9 QK J I I 项目 3 然后与该项目中的其它文件一起编译执行 4 输出结果 4 ( + *
VC++与MATLAB混合编程COM组件法
COM 是component object module 的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。
matlab6.5 新推出来的combuilder 就是把用matlab 编写的程序做成com 组件,供其他语言调用。
该方法实现简单,通用性强,而且几乎可以使用Matlab 的任何函数(注意:不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是Matlab 公司(Matlab 公司就是Mathworks公司)推荐的使用方法。
COM(Compponent ObjectModel 组件对象模型)是一项比较复杂的技术,详细讲的话几本书也讲不完,所以在这里不作介绍,本文通过一个例子详细介绍如何在matlab 下做COM 组件,以及如何在VC 中调用COM 组件。
首先在Matlab 编辑器里编辑m 函数文件:启动matlab->File->New->M-file 函数内容如图1:该函数无输入输出参数,文件保存为huatu.m。
function huatu()x=-10:0.1:10;y=sin(x);plot(x,y);在matlab 下建立COM 组件,步骤如下:1、在matlab command window 输入如下命令:>> deploytool出现以下界面:2、新建工程:File->New Deployment Project;弹出选择对话框如下图3、左侧选择Matlab Builder NE,右侧选择Generic COM Component;4、Name中输入工程名(比如hello4.prj);单击OK;出现下面界面5、右击hello4选择rename class可以改为合适的类名(比如huatu,这里没改);6、右击hello4class选择add file添加huatu.m文件(必须是函数文件);添加后如下图7、点击Tools->Build。
MATLAB与VC混合编程及应用研究
Ab ta t Th s p p r i t o u e h a l g m e h d a d t e a p ia i n o h ATLAB a d V C c mb n d sr c : i a e n r d c s t e c l n t o n h p l t ft e M i c o n o i e
( . De a t e to n o ma in Teh oo y C a g h u Te tl r e tI siu e Ch n z o 1 1 4 1 p rm n fI f r to c n lg , h n z o x i Gam n n tt t , e a g h u2 3 6 ,
M ATL AB al g VC r g a : c l n h e ae u ci ns se (FS yVC f r a , d a n h f cln i p o rm al gt ei rt df n t y t m I )b o m t rwi gt ea— i t o fn r n f r ain o r ca n ep lt d f n t n ( F) g a h b s d O ATLAB ln u g . I fe s ie ta so m to ffa t litr oa e u ci o FI rp a e n M a g a e to fr
1 0 m x e de e m e f Ni gb ipo t hi hwa 0 e t n d s g nt o n o ar r g y,i o i r he c m bi d pr gr m mi e ho y t c nsde s t o ne o a ng m t d b
文章 编号 :l 7 — 9 2 ( 0 8 2 o 2 3 6 3 6 0 2 0 )O —0 4 一O
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,则需要点击“配置管理器”进行重新设置。
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 中调用。
Matlab中的多CPU并行计算:一种基于Matlab引擎的混合编程
Matlab中的多CPU并行计算:一种基于Matlab引擎的混合编程Matlab中的多CPU并行计算:一种基于Matlab引擎的混合编程实验室新购置了一台双核本本,就忍不住琢磨一下,好使得我那Matlab下的程序更有效率。
然而Google下来却收获甚微,有朋友提到可以使用Matlab的Distribution Computing Toolbox,但似乎是用于多台电脑联网时的情况,与我的要求相差甚远。
因此只好自己鼓捣一下,借此机会抛砖引玉,欢迎大家共同探讨。
方法思路非常清晰:使用C和Matlab混合编程的方法,在C中用线程启动Matlab引擎,如此就可以启动多个程序,充分发挥多核CPU的优势。
在这里给出一个简单的示例程序,其线程任务为通过随机数方法来计算pi(就是为了拖时间)。
示例一共由4个文件构成:ThreadDemo.cpp: 主程序compopts.bat: 编译配置文件Thread1.m: 计算pi的程序disp2.m: 辅助显示程序只需在Matlab环境下调用mbuild -f compopts.bat -v ThreadDemo.cpp命令即可生成可执行文件ThreadDemo.exe,再输入命令!ThreadDemo即可观察结果。
实验环境为在Matlab6.5, VC6.0。
Matlab7.0由于对混合编程的方式进行了较大改动,示例可以通过编译,但不能正常运行。
以下为运行结果:>> !ThreadDemo10:41:32 --> Time used: 27", 10:41:05 -- 10:41:3210:41:32 --> Task1: IterNum = 100000000, Result = 3.14196110:41:33 --> Time used: 27", 10:41:06 -- 10:41:3310:41:33 --> Task2: IterNum = 100000000, Result = 3.141961可以看到两个任务几乎同时启动,同时结束。
C#与MATLAB混合编程在内弹道设计中的应用
要: 为解 决 一 般 内 弹 道 软 件 功 能 单 一 、 人 机交互差 、 不 易 集 成 等 问题 , 利用 c # 与 MA T L A B混 合 编 程 技 术 ,
开 发 了 以 经 典 内弹 道 模 型 为 基 础 适 用 于 简 单形 状 火 药 、 多孑 L 火药 、 混 合 装 药 及 钝 感 火 药 的 内 弹 道 设 计 计 算 软 件, 可 以进 一 步开 发 集 成 以 改 进 型 内弹 道 模 型 和 两 相 流 内 弹 道 模 型 为 基 础 的 内弹 道 设 计 计 算 模 块 。 同 时 , 此 混合编程技术可以在外弹道 、 身管 、 反 后 坐 装 置 等火 炮 设 计计 算 中 推 广 应 用 , 具有很好 的通用性和扩展性。 关键词 : c # ; MA T L A B; 混合编程 ; 内弹道 ; 软 件 开发
s o f t wa r e f o r t h e s i mpl e s ha p e o f po wd e r s,mul t i - pe r f o r a t e d pr o p e l l a n t s ,m i x e d c h a r g e a n d d e t e r r e d g r a i n b a s ed o n c l a s s i c a l i n t e r i o r b a l l i s t i c
基于COM技术实现C++ Builder与Matlab混合编程及其在模糊自整定PID控制中的应用
控 制界 广泛 流行 的语 言之一 。
C+ B i e 是 Bd n + u dr l o a d公 司 ( 为 I re公 司 ) 现 ni ps
9 引 言
Maa tb是 M t rs 司推 出 的一 套工程 计算 及 l a Wok 公 h 数值分析软件 。它集数值分析、 矩阵运算 、 图像与信 号 处理 、 图形 显示 、 视化 图形用 户界 面设 计 于一 体 , 可 构成 了一个 方 便 的 、 面 友好 的用 户 环 境 。此外 , 界 它 还 推 出了大量 M tb工 具 箱 , 信 号处 理 工具 箱 、 aa l 如 控 制系 统工具 箱 、 系统 辨 识工具 箱 、 控 制工具 箱 、 模糊 神 经 网络 工具 箱 等 , 而且 工 具 箱 还在 不 断 增 加 , 些工 这 具 箱 给各个 领域 的 研究 和应 用 工 作 提供 了有 力 的工
d t n l s n lt p l ain s f r . aa a ayi a d po p i t ot e s a c o wa
Ke od : tb C M; +B ie; i m r mn ; lt n zy I yw rsMaa ;O C+ udrjn p ga l sfu gf z D l l ot m g e-r u P i f
尹莉丽 , 初学 导
( 曲阜师范大学 日照 学院 自动化研究所 , 山东 日照 267 ) 786
摘 要 : 讨 了利 用 C M 技 术 实现 c+ B ieБайду номын сангаас与 M tb C M 混合 编 程 的 方 法 , 给 出 了通 过 混 合 编 程 实现 模 糊 自整 定 探 O + udr l aa 、O l 并
基于COM的Matlab混合编程技术常见问题分析
相比, 这种 混合编 程 方式 较 方 便且 稳 定 , 由 于出现 但 较晚, 还存在 一 些不 足 。 一
运算 为基础的工程计算软件 , 在图像处理 、 号处理 等 信 领域有 着广泛 的应 用 。M t b是 一种 脚本 语 言 , aa l 程
序运行效率低下 , 而且不能脱离 M tb软件 环境 , aa l 在工 程应用领域 其与硬件 的通信也不 如 V 、 B等方 便 , CV 如
l 基 于 CoM 接 口的 混 合 编 程 的一 般 步骤
在使用 M t b和 V 、 B混 合编程 中 , V V al a CV 用 C、 B
Ke r y wo ds: alb;COM x d p o rnmf M ta mie r g a i ng;in  ̄ la I 1e li s lp.) m e ol
0 引 言
Maa t b是 Ma Wok 公 司 18 l t rs h 9 2年 推 出的 以矩 阵
7 3版 本 以后 , 出 了. E . 推 N T生 成 器 , 支持 . E N T组 件
摘要 : 目前 有 很 多个 绍 关 于 M t h和 V V an l (、 B混 合编 挂 的 文献 , 对玛 任 过 拦 中的 常 见 问 题j 分 沂的 文 献 ~ 多 为提 但 行
升 基 于 文介 绍 Ma d 与 V V { 基 于 C M核 术 混 合 编 程 的一 般 O - I tl 11 苓 t ) h (或 I在 O 过 程 , 出这 种 混 合 编 程技 术 中比较 容 易出现 的 问题 并进 行相 应 的 分析 , 强 混 合 编 程 的 实 用 性 , 列 增 ,望 对 : 缡 怔 _ 学 昆合 { 7 』 老奄 辑 叻
VB调用Matlab制作的COM组件实现二者混合编程
4、Matlab中处理返回结果并使用它进行进一步计算或可视化等操作。
四、注意事项
在使用基于COM的VB与Matlab混合编程时,需要注意以下几点:
1、确保VB COM接口和Matlab代码之间的兼容性。这通常需要对两种语言进 行适当的转换和映射。
2、COM接口的创建和实现可能需要耗费大量时间和精力,因此需要仔细规划 和设计。
4.处理异常
在调用Matlab函数时,你可能会遇到各种异常情况,例如参数类型不匹配、 参数数量不匹配等等。为了处理这些异常,你需要在VB代码中使用异常处理机制:
result = myMatlabObject.YourFunctionName(input1, input2)
' Handle the exception here
1、创建Matlab COM组件
首先,我们需要创建一个Matlab COM组件。打开Matlab,编写你希望从VB 调用的函数,例如一个用于图像处理的函数。然后在命令窗口中输入以下命令以 创建COM组件:
这将打开COM工具箱。在“新建项目”窗口中,选择“COM库”,然后输入库 名和位置。接下来,添加你的Matlab函数到库中。
在这个例子中,如果myMatlabObject.YourFunctionName(input1, input2) 抛出一个异常,那么这个异常会被Catch块捕获,并可以进一步处理。
5.在VB中使用返回值 在你的Matlab函数返回值后,你可以在VB中使用它。例如:
在这个例子中,如果result不是Nothing,那么你可以进一步使用这个结果。 6.错误检查和清理
1、创建 MATLAB函数:首先
例如: function obj = MyClass(x) function result = add(obj, y)
matlab与C混合编程步骤详解
1MATLAB Compiler 是MATLAB自带的一个编译器,它能将m文件转化成 C、C++或p等各种类型的源代码,并根据需要生成可执行文件、lib文件(库文件)、dll文件或S函数文件等。
Matlab所使用的编译器包括了MATLAB 的C\C++数学库函数以及图形库。
必须保证编译器的正确配置,因为编译器使用了C\C++库函数,所以在使用前需要使用mex -setup 和 mbuild -setup两个命令对编译器进行配置。
步骤如下:1. 设置Matlab的编译器,使用外部的VC或者gcc等编译器。
2. 编译m文件成dll3. 设置VC等的继承环境,设置C需要用到的静态库和动态库4. 编写C调用dll1.1设置MATLAB编译器首先要安装Matlab 编译器,一般来说,在安装了Matlab后编译器就己经安装了,所在就只需要对Matlab编译器进行设置。
1.1.1 编译环境设置首先设置系统的环境变量,点击“我的电脑”属性-→系统特性--→高级-→环境变量-→添加系统变量Matlab值为Matlab的安装路径:G:\matlab7.0\bin\win32,重启电脑即可。
1.1.2 MATLAB7.0 编译器设置(a) 为编译后产生的MEX文件进行预配置在Matlab 的命令窗口(Command Window) 键入“mex -setup ”命令后,按回车键,安装Matlab 编译器;(b) 为产生独立外部应用程序进行预配置对Matlab编译器mbuild应用程序进行设置,运行Matlab ,在Matlab 的命令窗口(Command Window) 键入“mbuild -setup ”命令后,按回车键,安装Matlab 编译器;1.2 将MATLAB函数转成DLL函数在Matlab的Command Window /下输入命令:命令 1 :mcc -W lib:dlltest -T link:lib huatu_test.m或命令 2 :mcc -W cpplib: dlltest -T link:lib huatu_test.m命令1生成的是C,命令2生产的是C++。
matlabcompiler与c语言混合编程
matlab compiler与c语言混合编程经过一个多月的努力,在老师的帮助和自己的琢磨之下,终于对vc与matlab的混合编程有所了解。
且举一例。
首先要在自己的matlab7.0上安装MEX和mBuilder,安装方法是在matlab命令窗口中输入mex-setup,按照一系列的步骤安装下去。
然后再在命令窗口中输入mbuilder-setup,同样的方法就可以安装mbuilder。
在matlab中打开一个空的m文件,向里面写下列代码,并将其保存为zhengtaifenbuhanshu.m:function y=zhengtaifenbuhanshu(x,u,d)%x为变量,u为均值,d为方差y=normcdf(x,u,d);我的目的是在c语言中可以调用matlab中的正态分布函数。
这个函数有三个输入参数,一个输出参数。
然后在matlab命令行中打入:mcc -l zhengtaifenbuhanshu.m -o dllnormcdf。
这样就生成c共享(动态)库文件。
其中zhengtaifenbuhanshu.m是要编译的m文件,最后编译的名称为dllnormcdf。
-o表示要编译成的名字,如果没有-o,则编译后生成的文件名是与第一个要编译的文件名一致,就是这里的zhengtaifenbuhanshu。
上面命令的作用是将zhengtaifenbuhanshu.m函数生成名字为dllnormcdf的c语言动态库。
注意编译的路径,如果zhengtaifenbuhanshu是你放在一个matlab中work的一个包中,那么matlab主窗口上面的Current Directory要选择好zhengtaifenbuhanshu.m这个m文件所在的地方。
按回车编译成功后,你会在编译的文件夹(默认的是work中)中看到多了几个生成的文件:dllnormcdf.cdllnormcdf.ctfdllnormcdf.dlldllnormcdf.expdllnormcdf.exportsdllnormcdf.hdllnormcdf.libdllnormcdf_mcc_component_data.c在生成的文件中,dllnormcdf.h文件是编译结果函数库的函数声明头文件,而dllnormcdf.lib文件是最终用户在编译自己的可执行应用程序所必须的库文件,dllnormcdf.dll 文件就是最终用户的可执行应用程序运行时所需要的动态库。
Matlab与C#混合编程
Matlab与C#混合编程的实现关于matlab与c#之间一些数据类型的转换的方法,我也曾经写过。
总结一下,最主要的是要完成下面几个步骤:1、同时安装.netframwork与MCR(matlab compile runtime)。
这个在装完 与matlab以后,前面2个组件也就安装好了。
2、利用matlab自带的.nettool工具将.m文件转换成.net组件--->.dll文件为接口,它实际上不含任何实现,都是调用另一个.ctf文件来完成具体的功能。
3、在c#中,必须引入mwarray.dll才能拥有在.net中进行矩阵运算所需要的一切。
虽然matlab help中只是说推荐,但一般的应用中,只是进行一部分函数的调用,而不是去取得整个运行结果。
这个.dll是必须引入的。
有时mclmcrrt74.dll这个文件也需要引入。
根据具体的要求,需要引入的文件也有所差别。
4、生成一个实例,并对.net组件所输出的结果进行数据类型的转换,以符合.net 编程环境中对数据类型的要求,这个在以前我已经讲过,这里就不再多说了。
关键是掌握如何把一个矩阵(在matlab中,一个m*n的矩阵对应.net中的一个1*(m*n)的数组)转换成数据类型一致的数组。
目前所有的matlab数据类型(无论什么类型,都可以把它看成一个矩阵,这样就可以利用数组的思想来思考)都可以进行转化,具体的可能需要经过实验才能符合各自的要求。
虽然matab对.net的支持不如它对c++支持的功能强大,但也已经满足了我们实际应用的需求。
如果我们可以把大部分的运算都放在matlab里面完成,数据转换的数量又少,那么整个系统的运行速度与效率还是挺高的。
c#与matlab混合编程图解using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace ConsoleApplication1{class Program{static void Main(string[] args){Program p = new Program();p.MatlabTest();Console.WriteLine("按任意键退出...");Console.ReadKey();}/// <summary>/// 测试C# matlab调用/// </summary>private void MatlabTest(){Console.WriteLine("正在载入matlab for .NET库......"); DotNetTest.DotNetTestclass dt = newDotNetTest.DotNetTestclass();Console.WriteLine("完成......");Console.WriteLine("-----------------------------------------------");// 多项式int demention = 3;double[] dd = new double[demention];dd[0] = 1;dd[1] = 4;dd[2] = 6;//.Arrays.MWArray d =// .Arrays.MWNumericArray.MakeSpar se(// 1, demention,.Arrays.MWArrayComplexity.Real, demention);.Arrays.MWNumericArray d = (.Arrays.MWNumericArray)dd;Console.WriteLine("开始计算多项式:[{0}] ......",d.ToString());// 存储计算结果.Arrays.MWArray h;// 调用matlab函数计算h = dt.myroots(d);// 取得实部Array real =((.Arrays.MWNumericArray)h).ToArray(MathWorks.MAT .Arrays.MWArrayComponent.Real);string realpart = "实部列表:";foreach (double i in real){realpart += i + "\t";}// 取得虚部Array imaginary =((.Arrays.MWNumericArray)h).ToArray(MathWorks.MAT .Arrays.MWArrayComponent.Imaginary);string imaginarypart = "虚部列表:";foreach (double i in imaginary){imaginarypart += i + "\t";}Console.WriteLine(realpart);Console.WriteLine(imaginarypart);// 打印结果Console.WriteLine("计算结果:");Console.WriteLine(h.ToString());}}}C#与Matlab混合编程的几种方式1. 通过从Matlab的*.m文件中生成C语言版本的DLL具体过程:1) 在Matlab中写好一个m文件(比如一个简单的加法函数myplus.m);2) 使用Matlab的mbuild -setup选择编译器,我机器上的编译器有两个LCC 和VC2008(注意如果使用做应用的话,建议编译器选VC2008,否则C#中会告诉你DLL找不到Entry Point)3) 在命令行中使用mcc -B csharedlib:mypluslib myplus.m (如果是多个M文件,接着往后写),等待几十秒之后会生成若干文件(*.c, *.h, *.dll等), 其中.h文件中有导出的函数原型。
Matlab与C混合编程在火电仿真软件开发中的应用
1 C语 言 me x程 序 及 编 译 环 境 配 置
1 1 C 语 言 me . x程 序
一பைடு நூலகம்
在 Malb 令 窗 中键 人命 令 : xst p 然 后 .a 命 t me eu ,
根据 提示选 择 编译 器类 型 ( / + 十编译 器 ) CC 以及编 译器 的版 本数 。不 同 的 系统 中 , 作 步 骤 可 能稍 有 操
琐 的入 口子程序 . 可编写 C语 言 Ie 就 T X文件 , 高 了开发效 率 。 实践证 明 , I 提 该方 法 能有效 的 用于仿 真 软件 开 发, 使得 复杂动 态对 象仿真 模块 简洁 高效 , 可 以起 到保 护算 法安 全和 知识 产权 的作 用 。 还 [ 关键词 ] Malb Smuik C语 言 动 态链 接库 t /i l a n [ 图分 类号 ] TP 9 . 中 3 19 [ 文献标 识 码] A 提 供 了一 种 调 用 C 语 言 函 数 的 接 口方 法 。其 中 1e T X程 序用 c语 言按一 定格 式编 写 , c编译 器 编 I 由 译 成 dl l文件 。其 调试过 程 在 VC I E 中完 成 , 成 D 生 1e T X文 件后 即可 在 Malb中直接 调用 】 I t a 。 C语言 1e T X文 件 主要 由两 部 分组成 , I 第一 部 分 称 为入 口子程 序 , 其作用 是在 Malb系统 与被调 月 t a ] 的外 部 子 程 序 之 间 建 立 通 信 联 系 , 编 写 分 繁 其 卜 琐 。第 二部 分称 为计 算 功 能 子程 序 , 包 含 所 有 实 它 际需 要完 成 的功 能的源 代码 , 由入 口子程 序 调用 。 本文采用 CT xS函数实 现混合编 程 , me— 函 1e- l C xS
C#与MATLAB混合编程
C#与MATLAB混合编程C#和MatLab的混合编程,充分利⽤了winform的直观显⽰和matlab的强⼤计算能⼒。
在此以⼀个⼩例⼦的形式给⼤家讲述⼀下⼆者混合编程的实现。
⼀、软件的配置说明 C#版本:VS2010 matlab版本:matlab2013a ⼆、把 matlab函数编译成dll⽂件 2.1⾸先写⼀个函数的.m⽂件(如下函数Matrix实现两个矩阵的相加和相减)%--------------------------------------------------------function [addRlt,minusRlt]=MatrixOpera(a,b)% 矩阵相加,相减[m1,n1]=size(a);[m2,n2]=size(b);if m1~=m2 || n1~=n2 display('矩阵⼤⼩不相同') error('参数错误');endaddRlt=a+b;minusRlt=a-b;end%---------- 2.2 创建制作的dll⽂件的⼯程 在MatLab的命令窗⼝中,输⼊deploytool打开创建dll⽂件的⼯程创建窗⼝,如下图所⽰ 在图中,主要分为三部分,Name:你想要命的⼯程名,j是⼯程的后缀;Location:创建⼯程的储存位置;Type:针对c#⽽⾔,我们需要选择.NET Assembly这⼀项 点击Ok选项,⼯程已经创建完毕 2.3 向所建⼯程中添加对应的元素并编译 上述过程中,新建了⼀个叫matPrj的⼯程(它相当于c#中的命名空间namespace);然后给它增加class(它就是c#中的类),点[add class]添加myMathClass;之后再给它添加⽅法(它就是函数了),点[add files],本实例中选中之前编写的MatrixOpera函数。
完了之后就可以编译了,编译需要⼀两分钟的时间,如下图所⽰ 三、C#中添加matlab的dll引⽤ 3.1打开vs2010,新建⼀个窗体应⽤程序 3.2完成dll⽂件的拷贝 将matlab⼯程(matPrj)src⽂件夹下的matPrj.dll和D:\Program Files\MATLAB\R2013a\toolbox\dotnetbuilder\bin\win64\v2.0(前边为matlab的安装路径)⽂件夹下的MWArray.dll拷贝到VS⼯程(CallMatlabDllApp)下的\bin\Debug⽂件夹下 3.3在VS⾥添加dll⽂件的引⽤,然后在代码前引⽤相应的命名空间 如果matlab函数复杂,还需要⽤到其他的空间,则视情况⽽定,⾃⼰凭经验添加。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第22卷第3期湖 北 工 业 大 学 学 报2007年06月V ol.22N o.3 Journal of H ubei U niversity of T echnology Jun.2007[收稿日期]2007-03-20[作者简介]罗述全(1958-),男,湖北武汉人,武汉理工大学讲师,研究方向:物流信息化.[文章编号]1003-4684(2007)0320022203基于COM 的Matlab 与C #混合编程应用罗述全(武汉理工大学物流工程学院,湖北武汉430063)[摘 要]Matlab 具有强大的数值分析和运算功能,在科学与工程计算的多个领域都有着广泛的应用.C #是一种最新的、面向对象的编程语言.因此如果把Matlab 的程序加入到自已的C #及其它语言编制的程序中,将大大减少编程的工作量、保证程序的准确性,并且继承C #良好的用户界面.讨论了一种C #与Matlab 混合编程在数值分析中的应用方法.[关键词]Matlab ;COM 组件;C #混合编程[中图分类号]TP311.56[文献标识码]A Matlab 是一套高性能的数值计算和可视化软件,它集数值分析、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境.在这个环境下,对所要求解的问题,用户只需简单地列出数学表达式,其结果便以数值或图形方式显示出来.通过几十年的完善和扩充,它已经成为许多工程领域的实用工具.其典型应用有:通用数值计算,算法设计,各种学科如自动控制、数字信号处理、统计信号处理等领域的专门问题求解.虽然Matlab 作为一种高级语言,具有极高的编程效率,但它也存在一些明显的缺陷:界面开发能力较差;使用的是解释性语言,大大限制了它的执行速度;源代码的公开不利于算法和数据的保密;局限于Matlab 运行环境而不能用于开发商用软件[1].C #是设计用来在.N ET 平台上开发程序的核心开发工具.它吸收了C 、C ++与J ava 各自的优点,是一种新型的面向对象的高级程序语言.C #从C 和C ++演化而来,综合了Visual Baisc 的高效率和C ++功能的强大性及其熟悉的语法,具有界面友好、执行速度快、易维护和升级等优点,能够生成可执行文件,能有效地保护算法和数据,并可脱离编程环境运行.但是在工程计算方面,和MA TL AB 相比编程显得复杂得多.因此,如何进行有效的C #和Matlab 混合编程,已经成为了广大工程科研人员关注的焦点.通过解决这个问题,可以充分利用C #友好的开发界面和代码执行能力,以及Matlab 强大的数值计算和图形图像处理能力进行应用程序开发.本文将以一个数值分析方法为例,具体说明应用COM 组件实现C #和Matlab 接口编程在数值分析中的应用[1,2].1 Matlab 中COM 组件的编程与创建COM (Component Object Model )是MicroSoft公司于1993年制定并颁布的一种不依赖于任何语言的组件对象模型.COM 中的对象是一种二进制代码对象,其代码形式是动态链接库DLL 或可执行程序EXE 执行代码.COM 中的对象都被直接地注册在Windows 的系统库中,所以COM 中的对象不再是由特定编程语言环境所支持的对象,而是由系统平台直接支持的对象.为了区别于各种特定编程语言所定义的源代码对象,COM 中的对象被称为组件对象或COM 对象.COM 技术要达到的目标是:即使对象是由不同的开发人员用不同的编程语言实现的,在开发软件时,要能够有效地利用已经存在于其他软件系统中的对象,同时也要使当前所开发的对象便于今后开发其他软件系统时进行重用.因此,COM 组件中将COM 对象制作成二进制形式的可执行代码,然后在这种二进制代码层为对象提供标准的接口以及使用这种标准接口的统一方式,并且由系统平台直接对COM 对象代码的管理与使用提供支持.COM Builder 是Matlab6.5以后新增加的编译器,也是Mat hWorks 公司推荐使用于混合编程的.使用COM Builder可以把一个M文件或M EX文件编译成可以脱离Matlab环境的COM组件,一切支持COM开发的集成开发环境都可以很方便地进行调用[2].1.1 COM组件的注册若要正确地发送调用,运行库可能需要查找描述特定类型的类型库.类型库必须在运行库可以查看它之前进行注册.以Matlab软件最新版本MA T2 L AB R2006b为例.打开命令提示符窗口,在<Mat2 labRoot>/Bin/Win32目录下(MatlabRoot机器上Matlab安装的路径),键入REGSVR32?MWCO2 MU TIL.DLL,即对MWCOMU TIL.DLL进行注册(这个.DLL是Matlab下做的任何COM组件都要用到的.DLL).系统会提示消息“mwconutil.dll 中的DLL RegisterServer成功”.这样,以后在其他编译器下调用时就可以用了.1.2 创建动态链接库(3.DLL)插值与拟合是来源于实际、又广泛应用于实际的两种重要方法,它们已在国民生产和科学研究等方面扮演着越来越重要的角色.下面以插值中分段线性插值、拟合中最为重要的最小二乘法拟合为例介绍如何创建动态链接库.首先,建一个M文件(Comp ute.m)function Compute(j) for x=0:0.1:1,%生成样本点x if j==0 y=sin(x);%正弦曲线的插值示例 xi=0:0.25:10;%生成样本点xi yi=interp1(x,y,xi);%一维插值 plot(x,y,xi,yi)%绘制多项式曲线 else y=[-0.4471.9783.286.167.087.347.669.569.48 9.3011.2]; p=polyfit(x,y,2);%拟合出多项式(2阶) xi=linspace(0,1,100);%绘图的X2轴数据. z=ployval(p,xi);%得到多项式在数据点处的值 plot(z)%绘制多项式曲线 end end然后在Matlab中输入dot nettool命令,就打开了Matlab COM Builder,点击File2New Project,新建一个工程,在Component name里输入名字Com2 p ute,点击确定就行了.然后点击Project2Add? files,将Comp ute.m添加入工程,然后点Build2 Com Object,就会在Comtest\dist rib\文件夹下生成一个Comp ute1_0.DLL(它就是做好的COM组件),Build时Matlab已经自动将此.DLL在注册表中注册,如图1所示.图1 DLL在注册表中注册2 NET平台下C#调用生成的COM 组件 MicroSoft公司在.N ETSD K中提供了一些工具,使用这些工具可以为.N ET组件生成COM代理,也可以为COM组件生成.N ET代理.首先在VS.N ET2005下的解决方案的资源管理器窗口中找到添加引用选项.点鼠标右键打开点击添加引用项目,会出现如下的添加引用对话框.图2 DLL在注册表中注册如图2,这个对话框共有五个选项卡:第一个选项卡列出了一些DLL,这些DLL对于(.N ET)运行时环境是至关重要和有补充作用的.第二个选项卡是COM选项卡.要在(.N ET)工程中引入COM组件使用时,就需要使用这个选项卡.第三个选项卡是项目选项卡,它列出的是在当前解决方案中所引用的所有的(.N ET)工程.先点第四个浏览选项卡.在弹出的对话框中查找到编译好的Comp ute1_0. DLL,并将其添加到COM选项卡上的组件列表当中.在VS.N ET2005下新建一个C#项目,选中右边的解决方案资源管理器中的引用,点鼠标右键,选添加引用,在弹出来的窗口中选COM选项卡,找到并选择Comp ute1_0.DLL,此时此COM组件就添加到工程里面去了.然后在3.ASPX界面添加一个DropDownList控件(添加两个成员,Value值分别32 第22卷第3期 罗述全 基于COM的Matlab与C#混合编程应用为0和1)和一个Button 控件,同时在3.CS 文件中编写如下程序:protected void Button3_Click (object sender ,System.EventArgs e ){puteclassClass dt =new puteclassClass ();object s =DropDownList1.SelectedValue.Trim ();pute (s );}N ET 生成界面中直接调用如图3所示.图3 N ET 生成界面中直接调用图3 结束语在实际工作中,可以利用C #.N ET 与Matlab的优势混合编程,开发一些应用程序,程序中涉及的数据运算和图形处理都可以借助本文所讨论的编程接口.利用.N ET 基于COM 组件的C #对Matlab 调用方法,使数值分析系统的开发变得简单.利用Matlab 数学库和工具箱中自带的各函数,将复杂的数值分析交给Matlab 完成,可降低编程难度,同时能缩短软件开发周期和提高软件性能.基于COM 的Matlab 与C #混合编程的实现提高了软件的开发效率,将广泛应用于科学研究和工程技术中.[ 参 考 文 献 ][1] 赵士伟,赵明波,陈 平.基于COM 的Matlab 与C #.N ET 混合编程的实现与应用[J ].山东理工大学学报(自然科学版),20(4):26-29.[2] 游 锋,陈 皓.N ET 下基于COM 组件的C #与Matlab 混合编程[J ].研究开发,2005:64-66.Application of Mathab and C #Mix Programming B ased on ComL UO Xu 2quan(College of L ogistics Engi n.,W uhan Univ.of Technolog y ,W uhan 430063,Chi na )Abstract :Matlab is very strong in numeriead analysis and comp utation ,t he use of which is widespread in various fields.C #is one of t he new and object 2oriented p rogramming language.Therefire ,C #toget her wit h t he matlob p rocedure will reduce programming work and guarantee t he accurancy of t he program.An application met hod is discussed in t his paper.K eyw ords :matlab ;com module ;C #mix 2p rogramming[责任编辑:张培炼]42湖 北 工 业 大 学 学 报2007年第3期 。