c_调用matlab函数(混合编程).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《c_调用matlab函数(混合编程).doc》由会员分享,可在线阅读,更多相关《c_调用matlab函数(混合编程).doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第2部分 实战练习(自己做的)2.1 c#调用matlab函数matlab版本2009b,c#版本vs2008.2.1.1 matlab函数编译成dll文件(1)首先编写一个函数的m文件,如MatrixOpera表示两个矩阵相加和相减。%-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、)在matlab 命令窗口输入deploytool,弹出如下窗口或者点击matlab的主菜单 desktopdeploy tool获得如下面图所示的窗口,然后在filenewdeployment project 中点击。获得上图窗口,修改工程名称和文件后缀名(必须是,.Net Assembly格式)修改(3)新建了一个叫matPrj的工程(它相当于c#中的命名空间namespace);然后给它增加class或类(它就是c#中的类),点add class比如myMathClass;之后再给它添加方法(它就是函数了),点add files,如下图所示。本实例中给它添加了MatrixOpera等函数
3、。方法class(4)完了之后就可以编译了。编译出来后需要一两分钟的时间。编译(5)找到该工程存放的文件夹,从里面拷出matPrj.dll文件。同时还要从G:Program FilesMATLABR2009btoolboxdotnetbuilderbinwin32v2.0拷贝出MWArray.dll和ManagedCPPAPI.netmodule。第二个文件必须要哦,否则可能会出错。2.1.2 c#添加matlab的dll引用(1)打开vs2008,新建一个窗体应用程序。(2)将刚才拷贝到的那3个文件一起放在vs工程(CallMatlabDllApp)的debug文件夹下面。然后右键下图中的引
4、用,选择添加引用,弹出一个窗口,选择其中的浏览页面,分别添加matPrj.dll文件和MWArray.dll文件。已经添加了的引用右键,点添加引用(3)最后在前面,代码的前面添加下面的命名空间即可。using MathWorks.MATLAB.NET.Arrays;/在MWArray.dll,最常用的using MathWorks.MATLAB.NET.Utility;/ 在MWArray.dll,最常用的using matPrj;/这个就是我们自己定义的,里面有matlab函数如果matlab函数复杂,还需要用到其他的空间,则视情况而定,自己凭经验添加。已经添加了的引用至此,已经可以利用c#
5、调用我们用matlab编写的函数了。2.1.3 函数调用函数调用前必须注意:(1)将c#的参数输入到matlab函数时,要将参数转化为matlab的参数形式,通常是MWArray类型。(2)matlab返回的参数,也要转化为c#用的类型,比如数组或者数值类型。下面是关于(1)和(2)的介绍,从别人那拷过来的,具体可参考直接将值传递给已经初始化的MWArray数组中的成员直接将数据类型赋值给已经初始化的MWNumericArray变量。直接将字符串类赋值给已经初始化的MWCharArray变量。如果是数组类型:直接赋值给MWNumericArray变量;赋值给MWArray变量,则在前面加上类型
6、转换如:(MWNumericArray)进行强制转换。总之,MWArray是总类型,其它的以MW开头,以Array结尾的变量类型都可以直接对它进行赋值或取值。M类型到C+/C#数据类型MWArrayM类型,它是M文件的编译后内部的标准类型,一切C+/C#类型都要最终转换成此类型,方可作为参数调用M语言函数。MWCharArrayM的字符串类型,使用它可以将M中的字符类型转换成C+/C#的字符串类型。MWNumericArrayMWNumericArray是MWArray与C#等语言的转换中间类型。常用的转换函数: public Array ToArray(MWArrayComponent co
7、mponent);将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。public byte ToScalarByte();将M类型转换成C#的字节类型;public double ToScalarDouble();将M类型转换成C#的双精度类型;double temp = (MWNumericArray)(mwArgout0).ToScalarDouble();public float ToScalarFloat();将M类型转换成C#的单精度类型;public int ToScalarInteger();将M类型转换成C#的整型类型;public long ToScala
8、rLong();将M类型转换成C#的长整C/C+/C#数据型类型;public short ToScalarShort();将M类型转换成C#的短整型类型; public override string ToString();将M类型转换成C#的字符串类型;string arror = mwArgout2.ToString(); public Array ToVector(MWArrayComponent component);将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。下面使用调试过的代码示例表述两个函数的区别:double, Temp1 = new double1
9、,3; Temp1= (double,)(MWNumericArray)mwArgout1).ToArray(MWArrayComponent.Real);double s1 = new double2; s1 = (double)(MWNumericArray)mwArgout1).ToVector(MWArrayComponent.Real);(3)必须注意到多参数输入和多参数返回的问题。刚开始碰到这个这个问题比较头疼,后来经过不懈的努力,终于从网上找到答案。声明这部分是我参考别人的想法自己写的额,网上百度知道也有我(lwq123_321)回答的。/输入这里想传入的2个输入参数,为了支持矩
10、阵好通用,所以得弄成Array double a = 1, 2, 3, 4, 5, 6 ;/输入参数1 double b = 2, 4, 6, 8, 10, 12 ;/输入参数2 double, c = new double3, 2;/输出参数1 double, d = new double3, 2;/输出参数2/这些参数都是矩阵 MWNumericArray ma = new MWNumericArray(3, 2, a);/转换成matlab需求的格式 MWNumericArray mb = new MWNumericArray(3, 2, b);/输出参数是一个MWArray数组 MWA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c_ 调用 matlab 函数 混合 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内