首页 > 范文大全 > 正文

一种C#与Matlab混合编程的快速实现方法

开篇:润墨网以专业的文秘视角,为您筛选了一篇一种C#与Matlab混合编程的快速实现方法范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

(西南科技大学,四川 绵阳 621010)

摘要:C#是一种最新的、面向对象和组建的高级编程语言。Matlab在科学与工程计算的多个领域都有着十分广泛的应用。因此如果把MATLAB强大的计算分析功能与高级语言的可视化能力相结合,将大大减少编程的工作量、保证程序的准确性,实现优势互补。快速实现从仿真到应用的转换。该文介绍了一种c#matlab混合编程快速实现方法

关键词:Matlab; C#; 混合编程;快速应用开发

中图分类号:TP311文献标识码:A文章编号:1009-3044(2009)28-7884-02

The Design of Temperature and Humidity Measure Node Based on ARM

ZHU Yu-ying, WU Bin, LIU Hong-wei, SHAO Yan-hua

(School of Information Engineering, Southwest University of Science and Technology, Mianyang 621010, China)

Abstract: The Matlab have an extensive application several calculating realms in science and the engineering.C# is a kind of latest,object and component oriented programming language. Therefore if join the MATLAB's powerful calculation and analysis functions with high-level language's ability to combine visual. Will reduce workload of weave the distance consumedly, Promise the accuracy of the procedure. The simulation can be achieved from the application to the rapid conversion. That text discussed a kind of C# mix the fast realization with Matlab.

Key words: Matlab; C#; mixed programme; RAD

Matlab是一个高度集成的模块化系统,集科学计算、图象处理等于一体,使用解释性语言,具有极高的编程效率。[1]近年来,Matlab已经从最初的“矩阵实验室”,渗透到科学与工程计算的多个领域,在自动控制、信号处理、小波分析和模糊逻辑等多个方向,都有着广泛的应用。利用matlab进行设计有以下优点:1) 工具箱和库函数极其丰富、使用方便灵活。2) 强大的数据可视化功能。3) 程序源代码公开。4) 程序的可移植性好。Matlab几乎可以在各种机型和操作系统上运行,所以在可移植性和可扩充性上,matlab远优越于其他的高级编程语言。它是一个完整的数学平台,在这个平台上,用户只需调用若干函数就可以完成十分复杂的功能,大大提高了工程计算分析、图像处理的效率。

但是它也有一定是缺点,例如:界面实现能力弱。强大的功能只能在它所提供的平台上才能使用,即用户必须在安装Matlab系统的机器上才能执行*.m 文件。这样当用户需要将在Matlab下已开发完毕的复杂算法应用到高级语言开发环境下时就带来了问题,是将现成的算法集成高级语言开发的程序中呢?还是用高级语言再重新实现一遍?显然大家所期望的是能够减少工作量,最好能将Matlab下开发好的程序或函数直接应用到高级语言开发的程序中,这就是Matlab与高级语言的混合编程问题。

C#是一种C语言家族最新的、面向对象和组件的编程语言。它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,.NET上的众多工具可以和C#无逢结合。正是由于C#面向对象的卓越设计,使它成为构建各类组件的理想之选――无论是高级的商业对象还是系统级的应用程序。使用简单高效的C#语言,这些组件可以方便的转化为XML 网络服务,从而使它们可以由任何语言在任何操作系统上通过Internet进行调用。最重要的是,C#从C、C++和Java发展而来。因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。[2]

目前C#已成为应用软件开发中广泛采用的主要工具之一。因此,如何将Matlab与C#进行有效的混合编程受到工程科研人员的广泛关注。解决这个问题,不仅能更好地发挥Matlab强大功能,还能快速地进行仿真到应用的转换,尤其是当应用中需要实现复杂的数学算法、图形处理和信号分析时尤为迫切。研究C#与 Matlab 的混合编程具有很大的实际意义。[1,3]

1 C#.net与Matlab混合编程的快速实现实现

MATLAB与C#结合的方式有多种,但其实用程度与范围不同。例如Matcom可以将m程序直接“翻译”成c程序,但是这类直接翻译的程序几乎没有可读性和可维护性。从实用性、易用性和发展方向的考虑,本文主要讨论将*.m文件编译成*.dll文件嵌入到C#的程序中的方法。本文通过一个简单的例子来说明Matlab和C#混合编程的具体过程(环境为Window XP/SP3&Matlab7.04& Microsoft Visual Studio .NET 2003/SP1)。

1.1 Matlab 编译环境的设置

为了能够使用Matlab 的Complier 将*.m 函数文件编译为动态链接库DLL,必须对Matlab的环境做出相应的配置。具体做法如下:

在Matlab 的Command Window 下输入命令mbuild Csetup,并根据Matlab的提示选择合适的编译器,笔者使用的是Microsoft Visual C/C++ 7.1. 过程如下:

>> mbuild -setup

Please choose your compiler for building standalone MATLAB applications:

Would you like mbuild to locate installed compilers [y]/n? y

Select a compiler:

[1] Borland C/C++ (free command line tools) version 5.5 in C:\Borland

[2] Lcc C version 2.4 in D:\PROGRAM FILES\MATLAB704\sys\lcc

[3] Microsoft Visual C/C++ version 7.1 in d:\Program Files\Microsoft Visual Studio .NET 2003

[0] None

Compiler: 3

Please verify your choices:

Compiler: Microsoft Visual C/C++ 7.1

Location: d:\Program Files\Microsoft Visual Studio .NET 2003

1.2 创建动态链接库(*.DLL)

主要步骤如下:

1.2.1 建一个m文件(test.m)

例如:

function test(Dalt)

dalt=Dalt; %采样间隔

t=0:0.002:1.2;

rn=randn(1,length(t));rn(1:300)=0; %产生随机序列

s=sin(2*pi*10*t)+sin(2*pi*50*t)+rn; %生成模拟信号

save singal1 dalt s;

clear;

load singal1;

t=[0:length(s)-1]*dalt;plot(t,s,'k');Ylabel('幅值');Xlabel('时间');

title('C#调用Matlab参生模拟信号');

1.2.2 在matlab中输入comtool命令,就打开了matlab builder

如图1。点击file-new project,新建一个工程,在component name里输入名字点击ok就行了。然后点击project--Add files,将test.m添加入工程,然后点Build-Com Object,就会在comtest\distrib\文件夹下生成一个test1_0.dll(它就是做好的com组件),Build时matlab已经自动将此dll在注册表中注册。

此时,我们还需做一个准备工作,进入/ bin/win32目录下(matlabroot为你机器上matlab安装的路径),打regsvr32 mwcomutil.dll ,即对mwcomutil.dll进行注册(这个dll是matlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以使用了。

1.3 在C# 中使用Matlab 生成的动态链接库(*.DLL)

新建一个c#项目,为体现面向对象的VC#组建界面的强大功能,建立主界面如图2所示。选中右边的解决方案资源管理器中的引用,点鼠标右键,选添加引用,在弹出来的窗口中选com,然后通过单击浏览也找到test_1_0 .dll,单击选择,然后确定就可,此时此com组件也添加到工程里面去了。

1.4 配置引用路径

同时,还需要要配置引用路径,选中“项目”下拉菜单中的“属性”,在弹出来的窗口中选择“引用路径”。

1.5 在c#程序中使用动态连接库的方法

然后在.cs文件中按钮响应事件处编写添加以下程序:

test.testclassClass st=new test.testclassClass();

object m=1,n=2;

st.test(m,n);

编译一下,运行,点击模拟数据可视化按钮,在c#中就出现了我们调用MATLAB 组件所得到的图形,如图3所示。

2

如果要的目标机器没有装MATLAB Component Runtime (MCR) (即目标机器上没有装MATLAB运行环境)。主要步骤如下:

1) 把源机器\..\matlab\toolbox\compiler\deploy\win32\MCRInstaller.exe拷贝到目标机器上安装并将该安装的以下路径加入到系统变量PATH 中\..\MATLAB Component Runtime\v70\bin\win32。

2) 将源机器下的\..\matlab\bin\win32\mwcomutil.dll拷贝到 \..\MATLAB Component Runtime\v70\bin\win32下并在此路径下注册

(下转第7906页)

(上接第7885页)

该DLL(方法是:在DOS中该路径下输入 regsvr32 mwcomutil.dll此方法对DOS不熟悉的读者会不习惯,笔者建议使用的方法是在该文件夹中创建一个*.bat文件,其中的命令是regsvr32 mwcomutil.dll保存后直接双击该.bat文件即可) 。

3) 以上两个步骤是在目标机器上第一次COM组建时必须的,以后再COM组建时就不用重复进行前两步的操作了。在目标机器上创建一个文件夹来放置COM,如 ..\myMatCOM将源机器上将的COM组件文件夹中distrib文件夹下的_mcr文件夹的所有文件及*.EXE (*代表所要的COM组件的名字)copy到\..\myCOM 在该目录下执行.EXE 。

经笔者验证,到没有MATLAB运行环境的计算机上,vc#2008成功实现预定义的功能。说明COM成功。

3 结束语

该文介绍的MATLAB与C#混合编程的实现方法接口简单,软件代码复用性强,具有很好的可操作性和可维护性。加速了从MATLAB仿真到实际应用中算法程序的转化,提高了应用开发是效率。同时,其设计方法具有较强的通用性,依据给出的组件调用的实现思路和关键代码只需稍微修改即可应用于同类系统设计中。

参考文献:

[1]MATLAB Help Documenttation. MathWorks.

[2]须德.C#大学教程[M].北京:电子工业出版社,2004.

[3]罗述全.基于COM的MATLAB与c#混合编程应用[J].湖北工业大学学报,2007(6).