asp.net matlab,ASP.NET与MATLAB混合编译以及数据传递【更新中】
本帖最后由 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混合编译以及数据传递【更新中】相关推荐
- ASP.NET数据库访问系列教程01-概述篇 创建数据访问层(中)
ASP.NET数据库访问系列教程 本教程深入探讨了基于ASP.NET 2.0技术的数据库访问方法和模式.这些介绍非常简明,并且提供了一步步的指导和大量的截屏. 该系列教程包括: 概述篇 基础报表 主/ ...
- MATLAB学习笔记5:绘图基础与数据可视化(中)
阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...
- ASP.net(C#)]用DataSet进入对数据源的插入数据、更新数据及刪除数据
在ASP中用的最多的就是RecordSet了.RecordSet很容易的实现对数据源的记录插入.更新.删除等操作.而在.net中,已经没有了RecordSet这个概念了. 但.net中的DataSet ...
- matlab与c 接口与混合编程,Matlab与C/C++混合编程接口及应用方法解析
1 引言 Matlab 是当前应用最为广泛的数学软件,具有强大的数值计算.数据分析处理.系统 分析.图形显示甚至符号运算等功能[1].利用这一完整的数学平台,用户可以快速实现十分 复杂的功能,极大地提 ...
- matlab的矩阵编译器,MATLAB引擎方式实现VC与MATLAB混合编程
VS2008是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快.但在科学计算方面函数库显得不够丰富.读取.显示数据图形不方便.Matlab是一款将数值分析.矩阵计算.信号处理和图形显 ...
- Matlab高光谱遥感数据处理与混合像元分解实践技术
光谱和图像是人们观察世界的两种方式,高光谱遥感通过"图谱合一"的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测 ...
- matlab mex使用vc,matlab和VC++混合编程(mex方法)【转帖】
第一节.用c编写mex程序[开篇] 用C编写mex程序 大家都知道,matlab是一种解释型的编程环境,也就是说,跟以前的basic一样,是读 一句执行一句的.这样做可以很方便的实现编程过程中的交互, ...
- Matlab 高光谱遥感数据处理与混合像元分解
教程从基础.方法.实践三方面对高光谱遥感进行讲解.基础篇,站在学员的角度去理解"高光谱",用大家能听的懂的语言去讲述高光谱的基本概念和理论,帮助学员深入理解这项技术的底层科学机理. ...
- Matlab高光谱遥感数据处理与混合像元分解
光谱和图像是人们观察世界的两种方式,高光谱遥感通过"图谱合一"的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测 ...
最新文章
- 设计模式篇之——命令设计模式
- what to do preparing for phd
- 配置HTTPS以与Servlet一起使用
- 在vue中使用SockJS实现webSocket通信
- WordPress 多媒体库添加分类和标签支持
- 最短哈密尔顿圈matlab解法_复杂制造过程最优哈密尔顿圈算法的MATLAB仿真与分析.doc...
- rust笔记4 slice类型
- Mageia 7 Beta 3 发布,Mandriva Linux 社区分支
- LINUX警告:检测到时钟错误。您的创建可能是不完整的。-转
- 吴恩达神经网络和深度学习-学习笔记-44-anchor box
- apache tomcat linux 配置,linux下apache+tomcat配置
- CRM运维工程师主要职责
- xmind思维导图(下载、使用——超级详细)
- SpringBoot中微服务技术中进程间通信原理
- Ubuntu16.04 笔记本合上盖子时不进入休眠
- FL STUDIO宿主软件v20.9中文版使用技巧心得
- 信用评分卡模型开发中双峰分布原因及解决方案
- Matlab 未找到支持的编译器或 SDK 解决方法归纳
- 动力电池产业剧变中,宁德时代拿什么保住“一哥”地位?
- MFC添加加瓦系列一MFC编写的增量更新软件