matlab中混合计算,Matlab与C#混合编程(最终版)
《Matlab与C#混合编程.doc》由会员分享,可免费在线阅读全⽂,更多与《Matlab与C#混合编程(最终版)》相关⽂档资源请在帮帮⽂库(www.woc88)数亿⽂档库存⾥搜索。
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⽂件()在matla
b的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 点击Calculatevs编程软件
按钮后,代码是: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组件)选择NewDeloymentProjectgtMATL
ABBuilderNEgtNetComonent)添加相应的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#的混合编程问题,经历⼀番折腾。简单的测试程序终于通过了,期间涉及各种配置
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论