C#中调用matlab程序.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1,在matlab中建一个m文件(test.m) 例如: function test(h,D) for x=-10:0.1:10, ?? if xgt;D ?????? y=h; ?????? hold on; ?????? plot(x,y) ?? elseif xlt;-D ?????? y=-h;? ?????? hold on; ?????? plot(x,y) ?? else ?????? y=h/(D*x); ?????? hold on; ?????? plot(x,y) ?? end end 在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安装路径\bin\win32\mwcomutil.dll,即对mwcomutil.dll进行注册(这个dll是matlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以用了。 2,下面即可在C#中调用dll文件: 引用右击,选择浏览,找到test.dll,添加。 引用右击,选择浏览,找到MWArray.dll(matlab安装路径\toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll),添加。 再写入以下代码: ??????????? test.testclass st = new test.testclass(); ??????????? MathWorks.MATLAB.NET.Arrays.MWArray m = 1, n = 2; ??????????? st.test(m,n); 我们的c++程序有很多种方法调用Matlab中的函数,但是我最喜欢的方法是直接调用Matlab的动态库,这样生成的程序在没有安装Matlab的机子上也可以运行。具体的方法如下: 上面提到的Matlab“动态库”是指Matlab6.5的动态库,6.5以上不支持这样直接调用程序了,所以没有提供类似的动态库。安装MATLAB6.5后,在安装路径下的extern文件夹下就是我们要的所有东西了。 其中: ...extern\include,里的文件就是我们需要包含文件,将...\extern\include和...\extern\include\cpp添加到VS里的工具\选项\项目和解决方案\包含文件中; ...extern\lib,里的文件就是我们在编译时要用到的库文件,将...\extern\lib\win32和...\extern\lib\win32\microsoft\msvc60添加到VS里的工具\选项\项目和解决方案\库文件中; ...extern\lib\win32\dll\bin\win32里的文件就是动态库文件,发布程序时,我们将这些文件拷贝到和我们程序.exe文件同级的目录下,一起发布,这样目标机上不用安装matlab也可以运行了。 下面举个在C++中如何调用Matlab函数的例子: int CurveSmooth(double *x1,double* y1,const int count1,double *x2,double *y2,const int count2) { ?? ?//启用Matlab自动内存管理 ?? ?mlfEnterNewContext(0, 0); ?? ?mxArray *x = NULL;??????????????????? //中心波长系数中间一列的矩阵 ?? ?mxArray *y = NULL;???????????????????? //中心波长系数中间一列的矩阵 ?? ?mxArray *xi = NULL;????????????????????? //输入的像元向量矩阵 ?? ?mxArray *yi = NULL;??????????????????? //输出的像元向量矩阵 ?? ?//封装为matlab矩阵?? ? ?? ?mlfAssign(x, mlfDoubleMatrix(1,count1,x1, NULL)); ?? ?mlfAssign(y, mlfDoubleMatrix(1,count1,y1, NULL)); ?? ?mlfAssign(xi, mlfDoubleMatrix(1,count2,x2, NULL));?? ?

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档