本帖最后由 yinbo20081314 于 2015-5-20 00:35 编辑

在VS环境的项目中,首先需要引用以下dll才能开启MATLAB混编。【引用1】MatlabApplication(Version 8.1) Type Library 1.0

a1.jpg (42.85 KB, 下载次数: 9)

2015-5-20 00:16 上传

【引用2】

在MATLAB安装地址下可以找到MWArry.dll:

MATLAB\R2013a\toolbox\dotnetbuilder\bin\win32\v2.0

【在程序环境中添加命名空间】

Using MLApp;  //引用1中使用

Using MathWorks;  //引用1中使用

Using MathWorks.MATLAB; //引用1中使用

UsingMathWorks.MATLAB.NET.Arrays; //引用2中使用

Using MathWorks.MATLAB.NET.Utility; //引用2中使用

方法1是混合编程的方式,我用32位系统的matlab2013a+VS2013可以成功实现,其他配置可以参考MATLAB的官网介绍,下边也会说到。引用1的方法能够直接在C#环境下将MATLAB命令传递给MATLAB,并且将结果返回。如果要做一个在线MATLAB控制平台,倒是可以考虑这个方法。但是引用1也有巨大的局限性,那就是无法调用自定义的function。方法2与方法1刚好相反,能够将自己编写的FUNCTION编译成C#直接调用的类来使用。

【MATLAB准备工作】安装MATLAB编译器要到MATLAB安装路径下找到toolbox\compiler\deploy\win32,安装“MCRInstaller.exe”就好。不同版本的MATLAB有他相对应的编译器,一定要保证程序与此编译器的版本一致。

【使用方法1】

需要在【引用1】的前提下进行

Using MLApp;  //引用1

Using MathWorks;  //引用1

Using MathWorks.MATLAB; //引用1复制代码

例1:

MLApp.MLAppClass matlab = new MLApp.MLAppClass();

String command=”这里填写MATLAB执行语言”;

string state_ddu=matlab.Execute(command);

matlab.Quit();

matlab = null;

Label2.Text = state_ddu;复制代码

例2:

MLApp.MLAppClass matlab = new MLApp.MLAppClass();

string command = @"M=imread('C:\Users\Administrator\Desktop\aaa.jpg');" +

@"N=imread('C:\Users\Administrator\Desktop\bbb.jpg');" +

"I=rgb2gray(M); " +

"J=rgb2gray(N);" +

"[Count1,x]=imhist(I);" +

"[Count2,x]=imhist(J);" +

"Sum1=sum(Count1);" +

"Sum2=sum(Count2);" +

"Sumup = sqrt(Count1.*Count2);" +

"SumDown = sqrt(Sum1*Sum2);" +

"Sumup = sum(Sumup);" +

"HistDist=1-sqrt(1-Sumup/SumDown);" +

"HistDist";

string state_ddu = matlab.Execute(command);

matlab.Quit();

matlab = null;

Label2.Text = state_ddu;复制代码

例3:

MLApp.DIMLApp matlab = null;

Type matlabAppType = System.Type.GetTypeFromProgID("Matlab.Application");

matlab = System.Activator.CreateInstance(matlabAppType) as MLApp.DIMLApp;

matlab.Visible = 1;

matlab.Execute("figure(2)");复制代码

例4:

MLApp.MLApp matlab = null;

Type matlabAppType = System.Type.GetTypeFromProgID("Matlab.Application");

matlab = System.Activator.CreateInstance(matlabAppType) as MLApp.MLApp;

matlab.Visible = 1;

string command = "figure(3)";

matlab.Execute(command);复制代码

例5:

MLApp.MLApp O_matlab = new MLApp.MLApp();

O_matlab.Visible = 0;

string command1, command2;

command1 = "t=0:0.01:2*pi;y=sin(t);h=plot(t,y)";//matlab脚本命令行

command2 = @"figure(1)";

O_matlab.Execute(command1);

O_matlab.Execute(command2);        // 执行Matlab命令

O_matlab.Quit();复制代码

评价:MLApp的使用特点就是直接生成MATLABAPP类,调用内部函数进行计算,并且将计算结果利用execute事件返回。缺点是暂时无法实现自定义函数的使用。目前不可以带有自定义函数的代码存在。

【使用方法2】

这个方法的最大特点就是可以将函数function编译成类,供VS直接调用。

准备):一般应该是MATLAB版本比VS高,从而使得MATLAB可以支持VS的使用,具体的匹配可以详见下面的mathwork链接:

MathWorks中关于软件编译支持的软件

http://cn.mathworks.com/support/compilers/R2013a/index.html

http://cn.mathworks.com/support/compilers/R2015a/?s_cid=srchtitle

如果版本安装匹配,在MATLAB会找到VS编译器,如果不合适是不会找到VS编译器的。

这里介绍的是C#环境下的编译,因此步骤1可以省略。

步骤1)(C#下非必需):>>mbuild-setup

a2.jpg (39.89 KB, 下载次数: 18)

2015-5-20 00:17 上传

步骤2):

准备好自己的function,下面以makeSqr(n)为例

function out=makeSqr(n)

out=magic(n);

end复制代码

步骤3):

>>deploytool复制代码

如图所示输入工程名称为Demo,target选择.NETAssembly

a3.jpg (31.09 KB, 下载次数: 25)

2015-5-20 00:20 上传

步骤4):

命名一个类MLTestClass,添加M文件makeSqr.m。

a4.jpg (40.43 KB, 下载次数: 22)

2015-5-20 00:20 上传

如果需要可以在setting中修改命名空间名称,使得命名空间与工程名称相互区分;其他的设置功能可自行设置。

a5.jpg (53.31 KB, 下载次数: 16)

2015-5-20 00:21 上传

完成之后,点击build进行编译。若编译成功会如下显示。

a6.png (40.23 KB, 下载次数: 22)

2015-5-20 00:22 上传

在生成的demo/distrib中会有4个文件,我们需要用到demo.dll。其中demoNative.dll和demo.dll是功能一致的,有网友实验说demoNative.dll会比demo.dll块一点,我测试过觉得也就快一点点,具体哪里的区别有待继续学习。Demo_overview.html算是使用说明,与【引用2】所述是一样的。

a7.png (159.4 KB, 下载次数: 18)

2015-5-20 00:23 上传

步骤5):打开一个web网站,利用【引用2】中的提示添加引用MWArray.dll。再添加编译好的demo.dll,如图所示:

a8.png (86.21 KB, 下载次数: 17)

2015-5-20 00:23 上传

在命名空间中输入

using com.demo;

using MathWorks.MATLAB.NET.Arrays;

using MathWorks.MATLAB.NET.Utility;复制代码

触发程序中输入:

MLTestClass obj = null;

MWNumericArray input = null;

MWNumericArray output = null;

MWArray[] result = null;

try

{

obj = new MLTestClass();

input = 5;

result = obj.makeSqr(1, input);

output = (MWNumericArray)result[0];

}

catch (Exception)

{

throw;//需要修改

}复制代码

步骤6):

Output并不是简单的结果,其中包含了关于结果的全部信息。如果output是一个矩阵,需要toarray()将其进行转换为数组。另一个例子:

double[,] myResult = (double[,])output.ToArray();

EXenergy1.Text = Convert.ToString(myResult[0, 0]);复制代码

注意):

MATLAB矩阵A与C#数组myResult[,]一一对应,只要注意下下标即可。

A=[1,2,3,4;

5,6,7,8];

myResult[0,0]=1;

myResult[1,3]=8;

asp.net matlab,ASP.NET与MATLAB混合编译以及数据传递【更新中】相关推荐

  1. ASP.NET数据库访问系列教程01-概述篇 创建数据访问层(中)

    ASP.NET数据库访问系列教程 本教程深入探讨了基于ASP.NET 2.0技术的数据库访问方法和模式.这些介绍非常简明,并且提供了一步步的指导和大量的截屏. 该系列教程包括: 概述篇 基础报表 主/ ...

  2. MATLAB学习笔记5:绘图基础与数据可视化(中)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

  3. ASP.net(C#)]用DataSet进入对数据源的插入数据、更新数据及刪除数据

    在ASP中用的最多的就是RecordSet了.RecordSet很容易的实现对数据源的记录插入.更新.删除等操作.而在.net中,已经没有了RecordSet这个概念了. 但.net中的DataSet ...

  4. matlab与c 接口与混合编程,Matlab与C/C++混合编程接口及应用方法解析

    1 引言 Matlab 是当前应用最为广泛的数学软件,具有强大的数值计算.数据分析处理.系统 分析.图形显示甚至符号运算等功能[1].利用这一完整的数学平台,用户可以快速实现十分 复杂的功能,极大地提 ...

  5. matlab的矩阵编译器,MATLAB引擎方式实现VC与MATLAB混合编程

    VS2008是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快.但在科学计算方面函数库显得不够丰富.读取.显示数据图形不方便.Matlab是一款将数值分析.矩阵计算.信号处理和图形显 ...

  6. Matlab高光谱遥感数据处理与混合像元分解实践技术

    光谱和图像是人们观察世界的两种方式,高光谱遥感通过"图谱合一"的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测 ...

  7. matlab mex使用vc,matlab和VC++混合编程(mex方法)【转帖】

    第一节.用c编写mex程序[开篇] 用C编写mex程序 大家都知道,matlab是一种解释型的编程环境,也就是说,跟以前的basic一样,是读 一句执行一句的.这样做可以很方便的实现编程过程中的交互, ...

  8. Matlab 高光谱遥感数据处理与混合像元分解

    教程从基础.方法.实践三方面对高光谱遥感进行讲解.基础篇,站在学员的角度去理解"高光谱",用大家能听的懂的语言去讲述高光谱的基本概念和理论,帮助学员深入理解这项技术的底层科学机理. ...

  9. Matlab高光谱遥感数据处理与混合像元分解

    光谱和图像是人们观察世界的两种方式,高光谱遥感通过"图谱合一"的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测 ...

最新文章

  1. 设计模式篇之——命令设计模式
  2. what to do preparing for phd
  3. 配置HTTPS以与Servlet一起使用
  4. 在vue中使用SockJS实现webSocket通信
  5. WordPress 多媒体库添加分类和标签支持
  6. 最短哈密尔顿圈matlab解法_复杂制造过程最优哈密尔顿圈算法的MATLAB仿真与分析.doc...
  7. rust笔记4 slice类型
  8. Mageia 7 Beta 3 发布,Mandriva Linux 社区分支
  9. LINUX警告:检测到时钟错误。您的创建可能是不完整的。-转
  10. 吴恩达神经网络和深度学习-学习笔记-44-anchor box
  11. apache tomcat linux 配置,linux下apache+tomcat配置
  12. CRM运维工程师主要职责
  13. xmind思维导图(下载、使用——超级详细)
  14. SpringBoot中微服务技术中进程间通信原理
  15. Ubuntu16.04 笔记本合上盖子时不进入休眠
  16. FL STUDIO宿主软件v20.9中文版使用技巧心得
  17. 信用评分卡模型开发中双峰分布原因及解决方案
  18. Matlab 未找到支持的编译器或 SDK 解决方法归纳
  19. 动力电池产业剧变中,宁德时代拿什么保住“一哥”地位?
  20. MFC添加加瓦系列一MFC编写的增量更新软件

热门文章

  1. vim 正则非贪婪模式
  2. 简单仿百度自动搜索框
  3. java php 等,路径 上级路径,上上级路径表示方法
  4. SESSION 回收机制
  5. Palm应用开发之四Palm 应用模型
  6. JS应用DOM入门:DOM的对象属性
  7. 数据结构之单链表(头结点)的一些常用操作(增删改查逆)
  8. 使用vue+webpack从零搭建项目
  9. wordpress配置SMTP服务发送邮件
  10. 《企业软件交付:敏捷与高效管理精要》——3.4 企业软件交付的软件工厂方法...