2022年Matlab与C_混合编程 .pdf

上传人:Che****ry 文档编号:34240108 上传时间:2022-08-15 格式:PDF 页数:35 大小:3.30MB
返回 下载 相关 举报
2022年Matlab与C_混合编程 .pdf_第1页
第1页 / 共35页
2022年Matlab与C_混合编程 .pdf_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《2022年Matlab与C_混合编程 .pdf》由会员分享,可在线阅读,更多相关《2022年Matlab与C_混合编程 .pdf(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Matlab 与 C#混合编程的实现关于 matlab 与 c#之间一些数据类型的转换的方法,我也曾经写过。总结一下,最主要的是要完成下面几个步骤:1、 同时安装 .netframwork与 MCR(matlab compile runtime ) 。 这个在装完 与 matlab 以后,前面 2 个组件也就安装好了。2、 利用 matlab 自带的 .nettool工具将 .m 文件转换成 .net 组件-.dll文件为接口,它实际上不含任何实现,都是调用另一个.ctf文件来完成具体的功能。3、在 c#中,必须引入 mwarray.dll才能拥有在 .net 中进行矩阵运算所需要的一切。虽然

2、 matlab help 中只是说推荐,但一般的应用中,只是进行一部分函数的调用,而不是去取得整个运行结果。这个.dll是必须引入的。有时mclmcrrt74.dll这个文件也需要引入。根据具体的要求,需要引入的文件也有所差别。4、 生成一个实例,并对.net 组件所输出的结果进行数据类型的转换,以符合 .net编程环境中对数据类型的要求,这个在以前我已经讲过, 这里就不再多说了。 关键是掌握如何把一个矩阵 (在 matlab 中,一个 m*n的矩阵对应 .net 中的一个 1*(m*n)的数组)转换成数据类型一致的数组。目前所有的matlab 数据类型(无论什么类型, 都可以把它看成一个矩阵

3、, 这样就可以利用数组的思想来思考)都可以进行转化,具体的可能需要经过实验才能符合各自的要求。虽然 matab 对.net 的支持不如它对c+支持的功能强大,但也已经满足了我们实际应用的需求。如果我们可以把大部分的运算都放在matlab 里面完成,数据转换的数量又少,那么整个系统的运行速度与效率还是挺高的。c#与 matlab 混合编程图解using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplica

4、tion1 class Program static void Main(string args) Program p = new Program(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 35 页 - - - - - - - - - p.MatlabTest(); Console.WriteLine(按任意键退出 .); Console.ReadKey(); / / 测试 C# matlab 调用 / private void MatlabTest() Co

5、nsole.WriteLine(正在载入 matlab for .NET库.); DotNetTest.DotNetTestclass dt = new DotNetTest.DotNetTestclass(); Console.WriteLine(完成.); Console.WriteLine(-); / 多项式 int demention = 3; double dd = new doubledemention; dd0 = 1; dd1 = 4; dd2 = 6; /MathWorks.MATLAB.NET.Arrays.MWArray d = / MathWorks.MATLAB.NE

6、T.Arrays.MWNumericArray.MakeSparse( / 1, demention, MathWorks.MATLAB.NET.Arrays.MWArrayComplexity.Real, demention); MathWorks.MATLAB.NET.Arrays.MWNumericArray d = (MathWorks.MATLAB.NET.Arrays.MWNumericArray)dd; Console.WriteLine(开始计算多项式 :0 ., d.ToString(); / 存储计算结果 MathWorks.MATLAB.NET.Arrays.MWArra

7、y h; / 调用 matlab 函数计算 h = dt.myroots(d); / 取得实部 Array real = (MathWorks.MATLAB.NET.Arrays.MWNumericArray)h).ToArray(MathWorks.MATLAB.NET.Arrays.MWArrayComponent.Real); string realpart = 实部列表: ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 35 页 - - - - - - - -

8、 - foreach (double i in real) realpart += i + t; / 取得虚部 Array imaginary = (MathWorks.MATLAB.NET.Arrays.MWNumericArray)h).ToArray(MathWorks.MATLAB.NET.Arrays.MWArrayComponent.Imaginary); string imaginarypart = 虚部列表: ; foreach (double i in imaginary) imaginarypart += i + t; Console.WriteLine(realpart)

9、; Console.WriteLine(imaginarypart); / 打印结果 Console.WriteLine(计算结果 :); Console.WriteLine(h.ToString(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 35 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 35

10、页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 35 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 35 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整

11、理 - - - - - - - 第 7 页,共 35 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 35 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 35 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - -

12、- - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 35 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 35 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 35 页 - - - - - - - - - C#与 M

13、atlab 混合编程的几种方式1. 通过从 Matlab 的*.m 文件中生成 C语言版本的 DLL 具体过程 : 1) 在 Matlab 中写好一个 m文件(比如一个简单的加法函数myplus.m); 2) 使用 Matlab 的 mbuild -setup选择编译器,我机器上的编译器有两个LCC和 VC2008(注意如果使用 VS.net 做应用的话,建议编译器选VC2008 ,否则 C# 中会告诉你 DLL找不到 Entry Point) 3) 在命令行中使用 mcc -B csharedlib:mypluslib myplus.m (如果是多个 M文件,接着往后写 ),等待几十秒之后会

14、生成若干文件(*.c, *.h, *.dll等), 其中.h 文件中有导出的函数原型。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 35 页 - - - - - - - - - 4) 建立 C#工程,并将前面的dll拷贝到合适路径,使用 DllImport( mypluslib.dll , CallingConvention = CallingConvention.Cdecl) 将.h 文件中的函数使用C# 的语法声明。一般来说,这些函数中会有 *Initialize

15、, *Terminate和 M文件中定义的函数 (* 代表 lib名称) 。5) 使用 CsharpMatlabCompilerVer4.cs将 C# 中的数据类型和Matlab 中的矩阵等类型进行变换。该文件定义了MatlabCSharp 类,主要是导入了libmx.dll中的一些函数,并封装了一些实用的函数如double2mxArray_scalarReal等。2. C# 调用 Matlab 工作区计算并返回结果主要使用 engOpen, engClose, engPutVariable, engEvalString, engGetVariable函数进行操作。大致过程如下 : Matla

16、bCSharp.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 组件注: 老版本的叫 ComTool ,现在叫做 DeployTool 。在 Command Window 里面直接输入 deploytool即可1) 选择 N

17、ew Deployment Project - MATLAB Builder NE - Generic COM Component 2) 添加相应的 M文件3) 保存,编译4) 新建 C#工程,添加 Reference, Ok 4. 使用 Matlab DeployTool生成.Net 组件1) 选择 New Deployment Project - MATLAB Builder NE - .Net Component 2) 添加相应的 M文件3) 保存,编译4) 新建 C#工程,由于经常要名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -

18、 - - 名师精心整理 - - - - - - - 第 14 页,共 35 页 - - - - - - - - - using MathWorks.MATLAB.NET.Arrays; using MathWorks.MATLAB.NET.Utility; 因此需添加 MWArray这个 Reference ,一般安装玩 MATLAB Builder NE 就有了,放在 GAC 当中的。C#与 Matlab 混合编程(VS2005+Matlab7.5) 制作 dll步骤: star matlabMatlab Builder for .netdeployment tool新建 Matlab Bu

19、ilder for .net.Net component右键 add file找目标 M文件编译VS2005引用:引用编译的dll ,同时保持 *.ctf 在同一文件夹下using MathWorks.MATLAB.NET.Arrays; using MathWorks.MATLAB.NET.Utility; test.testclass test = new test.testclass(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 35 页 - - - -

20、- - - - - MWNumericArray是 MWArray和 c# 中数据的中间类,怎么用?怎样在C#与 matlab间传递参数?a.double型、int 型等数值类型的变量传递MWNumericArray i = null, result = mydouble; i=4; myClass myclass = new myClass(); /实例化result = (MWNumericArray)myclass.myfunc(i);b. 字符串(需要用到 MWCharArray和 MWArray转换) MWCharArray FileName = myString; MWNumeri

21、cArray sensitivity; sensitivity = (MWNumericArray)myClass.myAlgorithm(MWArray)FileName);c.多个输出参数组成的数组MWNumericArray out_Arr = (MWNumericArray)out_Args1; /取出第一个参数返回的数组( matlab返回的数组下界是从1 开始的)取出数组中的一个元素值mydouble=out_Arri.ToScalarDouble();如上面例子 ToScalarDouble一类的 toXXXX 等方法还有许多。d.result.toArray可以把 matlab

22、返回的矩阵变成C# 的 n x m数组, eg:double, csArray= (double,)result.ToArray(MWArrayComponent.Real);e. 将数组传入 Matlab( 和传递单个数值的方法一样) double, dbx = new double2, 2 1, 2 , 3, 4 ; MWNumericArray x=dbx; myclass.picture(x);M文件如何接收和返回?function x=test(h,d) /接收两个参数,返回一个function x1,x2=test(h,d) / 返回数组以上为 .Net 方式连接,以下为COM 方

23、式连接(编译速度而言.net 的方式要快上很多,而且似乎比较稳定)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 35 页 - - - - - - - - - matlab编译工作- mbuild -setup - deploytool,Matlab Builder for .net,Generic COM Component - 添加 m 函数文件 (eg: myfunc.m),改类名 (eg: myComClass),build注册 dll regsvr32 myC

24、om.dll regsvr32 mwcomutil.dllVS2005调用:- Reference加 Com 控件- 调用示例double, arr = null; object in_a, out_a; in_a = 500; out_a = arr1; myCom.myComClass mc = new myCom.myComClass(); mc.myfunc(1, ref out_a, in_a); 小例子:(提取 matlab 返回的两个参数并转化为C# 的矩阵) testz.testzclass st = new testz.testzclass(); MWArray max =

25、st.testz(2); MWNumericArray x1 = (MWNumericArray)max0; MWNumericArray x2 = (MWNumericArray)max1; double , location1 = ( double ,)x1.ToArray(MWArrayComponent.Real); double , location2 = ( double ,)x2.ToArray(MWArrayComponent.Real); label1.Text = location11, 2.ToString(); 其中的 M文件:function x1,x2=testz(

26、) x1= 1 2 3; 4 5 6; 7 8 9; x2= 9 8 7; 6 5 4; 3 2 1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 35 页 - - - - - - - - - 关于 matlab 与 c#混合编程产生的移植问题(R) 这个问题曾经差点让我的毕业设计的程序没办法拿出去演示。其实这也是个很现实的问题,你做好的程序如果不能在别人的机子上运行,那么它有什么应用价值呢?说来也惭愧,我以前编写过很多的程序都出现过移植性难的问题。我想一个很主要的

27、原因是在一个程序开发者使用的机子上, 往往是具备了非常完整的软件运行环境,但程序运行时有可能需要调用外部的程序或函数, 这些平时我们可能不会去注意。也就造成软件发布时移植性问题产生的根源了。matlab 与 c#混合编程的程序,如果要运行于客户的机子,必须在客户端的机子上设置好系统变量,同时需要安装.netframwork 与 MCR。.netframwork 大家都很熟悉了, 任何一个 .net 设计出来的程序, 都不能脱离 .netframwork 而独立运行, 正如用 vc+设计的程序离不开MFC 一样。这个是必须安装的。独立的 .netframwork组件包可以直接去微软的网站上去找。

28、MCR 是由 matlab 提供的,它和 .netframwork 的性质相同,任何一个运行matlab 的电脑上,都必须安装该组件。该组件在matlab2006a 版本中已经分离开而成为一个独立的可运行的.exe 文件。它一般是放在MATLABR2006atoolboxcompilerdeploywin32文件夹中 ,名为MCRInstaller.exe 。该组件其实是将MATLABR2006abinwin32文件夹下的大部分(注意不是全部 ).dll 文件打包而已。这也是为什么有些程序在安装了MCR 的机子上仍然不能运行的原因,不过对绝大多数的程序来说,一个MCR 就足够了。比较保险的办法

29、是,自行将MATLABR2006abinwin32下的所有文件打包成一个安装文件,安装完后设置好系统变量(也就是在class 变量下添加上面文件的路径)。为了让用户安装程序时不需要太多的操作,我们可以把上面2 个组件和应用程序一起打包,然后写个脚本检测客户端的机子是否已经安装了上面的2 个组件,如果没有, 则提示用户安装。检测脚本的写法很多地方都可以找到。这里就不多介绍了。Matlab和 C# 混合编程初探最近很想把 Matlab中对图像处理的结果,在C# 应用中显示出来。 因此涉及到Matlab和 C的混合编程问题,经历一番折腾。简单的测试程序终于通过了,期间涉及各种配置和调用问题。某些步骤

30、的具体原因,尚没有研究明白,但是通过下面的流程是可以成功实现在C# 中调用一个十分简单的Matlab函数的功能,希望在以后学习中,可以在C# 中调用更多的Matlab功能。本文用Windows Live Writer编写,也顺便测试一下,呵呵!1、Matlab (7.8.0 (R2009a)版本)中新建dlldemo.m文件funtion result = dlldemo(input);result = 2 * input; end名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18

31、 页,共 35 页 - - - - - - - - - 2、在 command window中配置分别配置mbuild setup和mex setup ,编译器均选择VS2008 SP1 3、在 command window中 deploytool 会弹出如下对话框按照提示的流程, 先创建 project, 选择 .NET Component类型;然后把 dlldemo.m文件添加到project里面,然后点上面菜单条上的build the project,成功后会在刚才选定的project文件夹下出现两个文件夹,在 distrib文件夹下有我们需要的dlldemo.dll 4、接下来需要做的

32、是,查看distrib文件下的 readme 首先需要安装MCRinstaller.exe,它所在的位置是:Matlab的安装目录toolboxcompilerdeploywin32MCRInstaller.exe 5、我们还需做一个准备工作,在命令行中进入/ bin/win32目录下 (matlabroot为matlab安装的路径 ), 输入 regsvr32 mwcomutil.dll , 即对 mwcomutil.dll进行注册 ( 这个 dll 是 matlab下作的任何 com组件都要用到的dll), 下面我们在其他编译器下调用时就可以用了6、在 c# 中简单做一个windowsap

33、plication 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 35 页 - - - - - - - - - 点击 Calculate按钮后,代码是:private void button1_Click(object sender, EventArgs e) Dlldemo mydlldemo = new Dlldemo(); int i = 3; MWArray result; result = mydlldemo.dlldemo(MWArray)i);/ lab

34、el2.Text = result.ToString(); 需要添加的 references有 dlldemo,它在上面提到的distrib文件夹中,还需要添加一个MWArray引用,它的路径是Matlab安装路径 toolboxdotnetbuilderbinwin32v2.0。程序中需要引用的命名空间有:using MathWorks.MATLAB.NET.Arrays; using MathWorks.MATLAB.NET.Utility; using dlldemo; 程序运行后点击Calculate按钮后结果是:名师资料总结 - - -精品资料欢迎下载 - - - - - - - -

35、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 35 页 - - - - - - - - - 因为程序中预设i =3,所以根据 matlab里面的代码,将3 乘 2 ,得到结果是6 7、Any questions you can send E-mail to me: References: 1 http:/ http:/ 与 Matlab混合编程这段时间一直在折腾MATLAB, 要用神经网络做交通方面的预测.刚开始对 MATLAB 这个软件是一窍不通,不过还好 ,这个软件的语言和C 语言差不多 ,很简单 .因为我不是要精通它 ,只是为了现学

36、现用.有了目标所以学起来也挺快的.今天刚刚从网上了买了个倒版的 MATLAB R2007a,这个是可以和C# 进行混合编程的 .原先我们都是用MATLAB 做好网络模型训练完成后,得到权值阀值 ,再写算法在C# 中重构 ,很麻烦 ! 现在希望可以通过它们的混合编程,让预测做的简单 . 第一步 : 安装 .netframwork与 MCR:.netframwork在安装完 后,也就安装好了.再安装 MCR: 安装文件保存在matlab的安装目录toolbox下, C:Program FilesMATLABR2007atoolboxcompilerdeploywin32 第二步完成编译器的设置:命

37、令窗口输入mbuild -setup和 mex -setup,都选择 Microsoft Visual/c/c+ version 7.1 in ptah loationMicrosoft Visual studio.NET 2003选项。其中 ptah loation为 的路径名。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 35 页 - - - - - - - - - 下面是 MATLAB 和 C# 混合编程的一个简单的例子. 首先在 MATLAB 中写下 .m 程

38、序,如下:function test(h,D) for x=-10:0.1:10 if xD y=h; hold on; plot(x,y) else if x MATLAB Builder NE - Generic COM Component /size size=12pt2) 添加相应的M 文件 /size size=12pt3) 保存,编译 /size size=12pt4) 新建 C# 工程,添加Reference, Ok/size size=12ptb4. 使用 Matlab DeployTool生成 .Net 组件/b/size size=12pt1) 选择 New Deploym

39、ent Project - MATLAB Builder NE - .Net Component/size size=12pt2) 添加相应的M 文件 /size 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 35 页 - - - - - - - - - size=12pt3) 保存,编译 /size size=12pt4) 新建 C# 工程,由于经常要/size size=12ptusing MathWorks.MATLAB.NET.Arrays; using Ma

40、thWorks.MATLAB.NET.Utility;/size size=12pt因此需添加MWArray这个 Reference,一般安装玩MATLAB Builder NE 就有了,放在GAC 当中的。 /size C# 与 Matlab 混合编程的几种方式主要参考资料 : Matlab C# Book ,我看的是第一版的电子书, 网上可以搜到。说实话,我觉得 C#与 Matlab 混合编程相比 VC 与 Matlab 混合编程没有啥优势,基本上还是通过P/V Invoke操作 Matlab mcc 编译器生成的 C 语言版本的DLL 。此外,速度上也慢的吓人-_-下面简单写写 C#与

41、Matlab 混合编程的 4 种方式 (可能还不够全,欢迎补充):1. 通过从 Matlab 的*.m 文件中生成 C 语言版本的 DLL具体过程 :1) 在 Matlab 中写好一个 m 文件(比如一个简单的加法函数myplus.m);2) 使用 Matlab 的 mbuild -setup选择编译器,我机器上的编译器有两个LCC和 VC2008( 注意如果使用 VS.net 做应用的话,建议编译器选 VC2008 , 否则 C#中会告诉你 DLL 找不到 Entry Point)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -

42、 名师精心整理 - - - - - - - 第 25 页,共 35 页 - - - - - - - - - 3) 在命令行中使用mcc -B csharedlib:mypluslib myplus.m (如果是多个 M 文件,接着往后写 ),等待几十秒之后会生成若干文件(*.c, *.h, *.dll等), 其中.h 文件中有导出的函数原型。4) 建立 C#工程,并将前面的dll 拷贝到合适路径,使用 DllImport( mypluslib.dll , CallingConvention = CallingConvention.Cdecl) 将.h 文件中的函数使用C#的语法声明。一般来说,

43、这些函数中会有 *Initialize ,*Terminate和 M 文件中定义的函数 (* 代表 lib 名称)。5) 使用 CsharpMatlabCompilerVer4.cs将 C#中的数据类型和 Matlab 中的矩阵等类型进行变换。该文件定义了MatlabCSharp 类,主要是导入了 libmx.dll中的一些函数,并封装了一些实用的函数如double2mxArray_scalarReal等。2. C#调用 Matlab 工作区计算并返回结果主要使用 engOpen, engClose, engPutVariable, engEvalString, engGetVariable函

44、数进行操作。大致过程如下 : 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 组件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心

45、整理 - - - - - - - 第 26 页,共 35 页 - - - - - - - - - 注: 老版本的叫 ComTool ,现在叫做 DeployTool 。在 Command Window里面直接输入 deploytool 即可1) 选择 New Deployment Project - MATLAB Builder NE - Generic COM Component 2) 添加相应的 M 文件3) 保存,编译4) 新建 C#工程,添加 Reference, Ok 4. 使用 Matlab DeployTool生成.Net 组件1) 选择 New Deployment Proje

46、ct - MATLAB Builder NE - .Net Component 2) 添加相应的 M 文件3) 保存,编译4) 新建 C#工程,由于经常要using MathWorks.MATLAB.NET.Arrays; using MathWorks.MATLAB.NET.Utility; 因此需要添加MWArray 这个 Reference,一般安装完matlab Builder NE 就有了,放在GAC当中的。c# 和 matlab的混合编程(一)这段时间一直在折腾MATLAB, 要用神经网络做交通方面的预测.刚开始对MATLAB 这个软件是一窍不通 ,不过还好 ,这个软件的语言和C

47、语言差不多 ,很简单 .因为我不是要精通它,只是为了现学现用.有了目标所以学起来也挺快的.今天刚刚从网上了买了个倒版的MATLAB 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 35 页 - - - - - - - - - R2007a,这个是可以和C# 进行混合编程的.原先我们都是用MATLAB 做好网络模型训练完成后 ,得到权值阀值,再写算法在C# 中重构 ,很麻烦 !现在希望可以通过它们的混合编程,让预测做的简单 . 第一步 :安装 .netframwork与

48、MCR:.netframwork在安装完后,也就安装好了.再安装 MCR: 安装文件保存在matlab的安装目录toolbox下, C:Program FilesMATLABR2007atoolboxcompilerdeploywin32 第二步完成编译器的设置:命令窗口输入mbuild -setup和 mex -setup, 都选择 Microsoft Visual/c/c+ version 7.1 in ptah loationMicrosoft Visual studio.NET 2003选项。其中ptah loation为的路径名。下面是 MATLAB和 C# 混合编程的一个简单的例子

49、. 首先在 MATLAB中写下 .m 程序,如下:function test(h,D) for x=-10:0.1:10 if xD y=h; hold on; plot(x,y) else if xD y=h; hold on; plot(x,y) elseif x-D y=-h; hold on; plot(x,y) else y=h/(D*x); hold on; plot(x,y) end end 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 34 页,共 35 页 - -

50、 - - - - - - - 在 MATLAB R2007a 中输入 deploytool 命令 (在 matlab6.5 中输入 comtool), 打开 Matlab Build For .net 窗口新建个工程, 在此工程中 “Add files”即填加 test.m 这个文件,build 即可生成COM组件,为test.dll,即为我们将在C#中引用的COM 组件。Build 时 matlab 已经自动将此dll 在注册表中注册不过之前我们还需做一个准备工作,打开开始菜单“ 运行 ” ,输入 regsvr32 matlab 安装路径binwin32mwcomutil.dll,即对 mw

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁