日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發布時間:2023/12/20 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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混合编译以及数据传递【更新中】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。