編譯環境:c#,xp系統,Matlab6.5
新建一個窗體項目,添加matlab引用。
然后試了四種方式調用matlab:
第一種
?
view plaincopy to clipboardprint?
- MLApp.MLAppClass?matlab?=?new?MLApp.MLAppClass();??
- matlab.Visible?=?1;??
- matlab.Execute("figure(1)");??
?
第二種
?
view plaincopy to clipboardprint?
- 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)");??
?
第三種
?
view plaincopy to clipboardprint?
- MLApp.MLApp?matlab?=?null;??
- Type?matlabAppType?=?System.Type.GetTypeFromProgID("Matlab.Application");??
- matlab?=?System.Activator.CreateInstance(matlabAppType)?as?MLApp.MLApp;??
- matlab.Visible?=?1;??
- matlab.Execute("figure(3)");??
?
第四種
?
+ expand sourceview plaincopy to clipboardprint?
?
四種情況在本機上均可啟動matlab
然后把生成的程序copy到(包括Interop.MLApp.dll)
1,xp系統,matlab2009a
發現第一和第四種方式運行會報錯,第二和第三種可以啟動matlab。
這MLApp.MLAppClass,?MLApp.DIMLApp,MLApp.MLApp三者的區別我不曉得,杯具。
2,win7系統,matlab2009a
結果同1。
編譯環境:c#,win7系統,Matlab2009
四種調用方式不變,在本機上均可運行
然后把生成的程序copy到(包括Interop.MLApp.dll)
?
1,xp系統,matlab6.5
發現第一和第四種方式運行會報錯,第二和第三種可以啟動matlab。
2,xp系統,matlab2009a
四種情況在本機上均可啟動matlab
結論:為了避免matlab版本問題,最好使用第二和第三種方法。
C#調用Matlab 引擎
??字號:大中小?訂閱
在C#中調用Matlab, 需要先配置一下Matlab編譯器, 然后在VS里面引用Matlab組件
具體操作如下:
在VS里面引用Matlab組件
引用 ??.Net MWArray API (不是必須)
引用Matlab Application Type Library
using MathWorks;
using MathWorks.MATLAB;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using MLApp;
private void button1_Click(object sender, EventArgs e)
????{
????????MLApp.MLAppClass matlab = new MLApp.MLAppClass();
????????string command;
????????command = "t=2:0.2:4*pi;y=sin(t);plot(t,y)";
??????
????????matlab.Visible = 1; ????????
????????matlab.Execute(command); ????// 執行Matlab命令
????????command = @"print(gcf, ??'-djpeg', ??'c:\Test1')"; ????// 保存圖片
????????matlab.Execute(command);
????????matlab.Quit();
????????matlab = null;
????????pictureBox1.Image = Image.FromFile(@"c:\Test1.jpg"); ??
????}
以上網上轉載的用c#調用matlab的另外一種方法,為什么用lm算法訓練BP網絡的代碼運行時就不能跳出仿真圖,換其他函數就都可以。各位高手幫忙指點下迷津。
private void Form1_Load(object sender, EventArgs e)
????{
????????MLAppClass matlab = new MLAppClass();
????????string command = "P=[21 23;12 43;23 15;]" +
????????"I=[12;23;45];" +
????????"P=P';" +
????????"I=I';" +
????????"save data P I;" +
????????"[Pn,minp,maxp,In,mint,maxt] = premnmx(P,I)" +
????
????????"net=newff(minmax(Pn),[10,1],{'tansig', 'purelin'},'trainbr');" +
??????
????????"net=init(net)" +
????????"net.trainParam.show=100; %兩次顯示之間的訓練步數" +
????????"net.trainParam.lr=0.3;%學習速率" +
????????"net.trainParam.epochs=10000; %訓練次數" +
????????"net.trainParam.goal=0.000001;%訓練目標" +
????????"[net,tr]=train(net,Pn,In);" +
????????"Inputweights=net.IW{1,1}" +
????????"Inputbias=net.b{1}" +
????????"Layerweights=net.LW {2,1}" +
????????"Layerbias=net.b{2}"+
??????????"figure(gcf)";
????????matlab.Visible = 1;
????????matlab.Execute(command);
????????matlab.Quit();
????????matlab = null;
????????}
??}