matlab中混合计算,Matlab与C#混合编程(最终版)

《Matlab与C#混合编程.doc》由会员分享,可免费在线阅读全文,更多与《Matlab与C#混合编程(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。

1、。下面即可在C中调用dll文件:quot引用quot右击,选择COM,找到test_cs__dll,填加。再写入以下代码:matlab_csmatlab_csclassClasstc=newmatlab_csmatlab_csclassClass();objectm=,n=;tctest(m,n);ConsoleReadKey();c和matlab的混合编程(二)C读取mat文件在C中读取MATLAB中mat文件存储的数组,实现net和matlab两者之间的参数传递这个问题困扰了我好几天,总算现在可以实现了,才发现它原来就是这么简单和和()在matlab中:functiontem=w()%表示函数有一个输出参数,没有输入参数loadw;tem=w;保存为wm再把wm做成dll文件,取名为wdatadll注意要把wmat也加载在一起生成dll文件()在C中引用MWArraydll,MWArraydll保存在matlab安装目录toolbox下,在C:\Programfile\MATLAB\Ra\toolbox\dotnetbuilder\bin\win\v中;()再在C中引用wdatadll文件并读取数组元素的值,代码如下:wdatawdataclassClasswdata=newwdataw

2、)的缘故,也没有成功但是最后还是找到了解决办法,因为在MATLAB中有关于sim的定义文件,为simm,保存在quotC:\ProgramFiles\MATLAB\Ra\toolbox\nnet\nnet\@networkquot中,其中quotC:\ProgramFiles\MATLAB\Raquot为matlab的安装目录只要在做DLL时,把这个simm文件加载到otherfiles下面和你的仿真程序一起生成动态连接库就行了!虽然实现起来就是这么简单,但这是我花了好几天时间,不断的尝试,不断的失败才找出来的办法,在网上找了N久也没找到解决办法,都说是不可能实现的,结果还是被攻破了,赞自己一下,和和~~总得来说,神经网络运用于交通预测,并且实现c和matlab关于神经网络的混合编程,在技术上已经没有难关了,剩下的就是几条道路数据的整理,训练等一些烦琐细心的工作了哎,还有一个月就春节了,时间不知道是慢还是快,总之还是好好努力吧,买房买奥迪都需要大把大把的银子呢!C和MATLAB混合编程C调用MATLAB引擎一定要在同时装有MATLAB和VS的环境下用才好使我个人觉得这种方法比较好,所以别的方法也没有试打开VS,创建一个windows窗体应用程序添加如下命名空间:usingMathWorks;

3、这样就可以调用MATLAB的引擎了C与matlab混合编程工具版本:C:VSMatlab:Ra准备工作(设置编译器):主要内容:建立函数形式m文件将m文件生成DLL文件C调用DLL文件。具体步骤:.建立函数形式m文件以简单的实现函数sum(a,b)实现两个数的求和functionresult=DLLDemo(a,b)result=a+b;end保存为“DLLDemom”.将m文件生成DLL文件()在matlab的CommandWindow窗口输入“deloytool”,弹出如图所示窗口;C和Matlab混合编程编程工具:VS和MatlabRb。MatlabRb在某些用法上跟一些老版本有不同,综合网上资料和自己的实践,做一个小总结。,建一个m文件(testm)例如:functiontest(h,D)forx=::,ifxgtDy=h;holdon;lot(x,y)elseifxltDy=h;holdon;lot(x,y)elsey=h(D*x);holdon;lot(x,y)endend在MATLABRa中输入deloytool命令(在matlab中输入comtool),打开MatlabBuildFornet窗口新建个工程,在此工程中“Addfiles”即填加testm这个文件,build即可

4、dataclassClass();objecttem=newobject();try{wdataw(,reftem)double[,]location=(double[,])tem;foreach(doubleainlocation){ConsoleWriteLine(a);}}catch(Excetione){ConsoleWriteLine(eMessage);}这样就基本实现了从matlab传递数据给给C调用和和,下面的工作就是交通预测的算法实现了,哎,长路漫漫呀不过我还是觉得自己可能比较适合去做研究难道要去考研?哎,再说吧c和matlab的混合编程(三)仿真的实现c中已经可以读取mat文件里的数据,但是在引用神经网络模型的程序时,总是会存在一些函数(如train,newff,sim)没有定义的错误一直不知道如何解决在c中引用BP网络的仿真程序(训练放在MTALAB中进行),因为在把MATLAB中仿真的程序做成DLL时,总是出现没有定义sim函数查了很多资料也一直没有解决办法,网上很多人说是MATLAB中的编译器不支持simulink,所以在C中引用包含sim函数的动态连接库是不能实现的经过多番思考和实验,甚至尝试了神经网络的工具箱nnToolKit,可能是工具箱版本低(我找到的是版本

5、程,并将前面的dll拷贝到合适路径,使用[DllImort(quotmyluslibdllquot,CallingConvention=CallingConventionCdecl)]将h文件中的函数使用C的语法声明。一般来说,这些函数中会有**Initialize,**Terminate和M文件中定义的函数(**代表lib名称)。)使用CsharMatlabComilerVercs将C中的数据类型和Matlab中的矩阵等类型进行变换。该文件定义了MatlabCShar类,主要是导入了libmxdll中的一些函数,并封装了一些实用的函数如doublemxArray_scalarReal等。C调用Matlab工作区计算并返回结果主要使用engOen,engClose,engPutVariable,engEvalString,engGetVariable函数进行操作。大致过程如下:MatlabCSharengPutVariable(e,quotml_aquot,mx_a);MatlabCSharengPutVariable(e,quotml_bquot,mx_b);MatlabCSharengEvalString(e,quotml_c=ml_a+ml_b;quot);mx_c=MatlabCSh

6、一个准备工作,在命令行中进入binwin目录下(matlaoot为matlab安装的路径),输入regsvrmwcomutildll,即对mwcomutildll进行注册(这个dll是matlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以用了、在c中简单做一个windowsalication点击Calculate按钮后,代码是:rivatevoidbutton_Click(objectsender,EventArgse){Dlldemomydlldemo=newDlldemo();inti=;MWArrayresult;result=mydlldemodlldemo((MWArray)i);labelText=resultToString();}需要添加的references有dlldemo,它在上面提到的distrib文件夹中,还需要添加一个MWArray引用,它的路径是Matlab安装路径\toolbox\dotnetbuilder\bin\win\v。程序中需要引用的命名空间有:usingMathWorksMATLABNETArrays;usingMathWorksMATLABNETUtility;usingdlldemo;程序运行后点击Calculat

7、今天刚刚从网上了买了个倒版的MATLABRa,这个是可以和C进行混合编程的原先我们都是用MATLAB做好网络模型训练完成后,得到权值阀值,再写算法在C中重构,很麻烦!现在希望可以通过它们的混合编程,让预测做的简单第一步:安装netframwork与MCR:netframwork在安装完vsnet后,也就安装好了再安装MCR:安装文件保存在matlab的安装目录toolbox下,C:\ProgramFiles\MATLAB\Ra\toolbox\comiler\deloy\win第二步完成编译器的设置:命令窗口输入mbuildsetu和mexsetu,都选择MicrosoftVisualcc++versioninquottahloationquot\MicrosoftVisualstudioNET选项。其中tahloation为vsnet的路径名。下面是MATLAB和C混合编程的一个简单的例子首先在MATLAB中写下m程序,如下:functiontest(h,D)forx=::ifxgtDy=h;holdon;lot(x,y)elseifxltDy=h;holdon;lot(x,y)elsey=h(D*x);holdon;lot(x,y)endendend保存为test_csm在MATLABR

8、和调用问题。某些步骤的具体原因,尚没有研究明白,但是通过下面的流程是可以成功实现在C中调用一个十分简单的Matlab函数的功能,希望在以后学习中,可以在C中调用更多的Matlab功能。本文用WindowsLiveWriter编写,也顺便测试一下,呵呵!、Matlab((Ra)版本)中新建dlldemom文件funtionresult=dlldemo(inut);result=*inut;end、在commandwindow中配置分别配置gtgtmbuild–setu和gtgtmex–setu,编译器均选择VSSP、在commandwindow中gtgtdeloytool会弹出如下对话框按照提示的流程,先创建roject,选择NETComonent类型;然后把dlldemom文件添加到roject里面,然后点上面菜单条上的buildtheroject,成功后会在刚才选定的roject文件夹下出现两个文件夹,在distrib文件夹下有我们需要的dlldemodll、接下来需要做的是,查看distrib文件下的readme首先需要安装MCRinstallerexe,它所在的位置是:Matlab的安装目录\toolbox\comiler\deloy\win\MCRInstallerexe、我们还需做

9、arengGetVariable(e,quotml_cquot);使用MatlabDeloyTool生成COM组件注:老版本的叫ComTool,现在叫做DeloyTool。在CommandWindow里面直接输入deloytool即可)选择NewDeloymentProjectgtMATLABBuilderNEgtGenericCOMComonent)添加相应的M文件)保存,编译)新建C工程,添加Reference,Ok使用MatlabDeloyTool生成Net组件)选择NewDeloymentProjectgtMATLABBuilderNEgtNetComonent)添加相应的M文件)保存,编译)新建C工程,由于经常要usingMathWorksMATLABNETArrays;usingMathWorksMATLABNETUtility;因此需要添加MWArray这个Reference,一般安装完matlabBuilderNE就有了,放在GAC当中的。c和matlab的混合编程(一)这段时间一直在折腾MATLAB,要用神经网络做交通方面的预测刚开始对MATLAB这个软件是一窍不通,不过还好,这个软件的语言和C语言差不多,很简单因为我不是要精通它,只是为了现学现用有了目标所以学起来也挺快的

10、生成COM组件,为testdll,即为我们将在C中引用的COM组件。Build时matlab已经自动将此dll在注册表中注册不过之前我们还需做一个准备工作,打开开始菜单“运行”,输入regsvrquotmatlab安装路径\bin\win\mwcomutildllquot,即对mwcomutildll进行注册(这个dll是matlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以用了。,下面即可在C中调用dll文件:quot引用quot右击,选择浏览,找到testdll,添加。quot引用quot右击,选择浏览,找到MWArraydll(matlab安装路径\toolbox\dotnetbuilder\bin\win\v\MWArraydll),添加。再写入以下代码:testtestclassst=newtesttestclass();MathWorksMATLABNETArraysMWArraym=,n=;sttest(m,n);编译,运行,OK!quotmatlab安装路径\bin\win\mwcomutildllquot,即对mwcomutildll进行注册(这个dll是matlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以用

11、a中输入deloytool命令(在matlab中输入comtool),打开MatlabBuildFornet窗口新建个工程,在此工程中“Addfiles”即填加test_csm这个文件,build即可生成COM组件,为test_cs__dll,即为我们将在C中引用的COM组件。Build时matlab已经自动将此dll在注册表中注册不过之前我们还需做一个准备工作,打开开始菜单“运行”,输入regsvr复制代码然后在解决方案中引用附件中的两个组件放入一个Button和一个ictureBox,在Button的单击事件中加入如下代码:MLAMLAClassmatlab=newMLAMLAClass();stringcommand;command=quott=::*i;y=sin(t);lot(t,y)quot;matlabVisible=;matlabExecute(command);执行Matlab命令command=@quotrint(gcf,'djeg','c:\Test')quot;保存图片matlabExecute(command);matlabQuit();matlab=null;ictureBoxImage=ImageFromFile(@quotc:\Testjgquot);复制代码

12、usingMathWorksMATLAB;usingMathWorksMATLABNETArrays;usingMathWorksMATLABNETUtility;usingMLA运行的exe文件。它一般是放在\\MATLAB\Ra\toolbox\comiler\deloy\win文件夹中,名为MCRInstallerexe。该组件其实是将\\MATLAB\Ra\bin\win文件夹下的大部分(注意不是全部)dll文件打包而已。这也是为什么有些程序在安装了MCR的机子上仍然不能运行的原因,不过对绝大多数的程序来说,一个MCR就足够了。比较保险的办法是,自行将\\MATLAB\Ra\bin\win下的所有文件打包成一个安装文件,安装完后设置好系统变量(也就是在class变量下添加上面文件的路径)。为了让用户安装程序时不需要太多的操作,我们可以把上面个组件和应用程序一起打包,然后写个脚本检测客户端的机子是否已经安装了上面的个组件,如果没有,则提示用户安装。检测脚本的写法很多地方都可以找到。这里就不多介绍了。Matlab和C混合编程初探最近很想把Matlab中对图像处理的结果,在C应用中显示出来。因此涉及到Matlab和C#的混合编程问题,经历一番折腾。简单的测试程序终于通过了,期间涉及各种配置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值