乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C# 調(diào)用 Matlab

       云中凌 2015-06-10

      標(biāo)簽:算法   winform   class   style   log   com   代碼   使用   http   

      Matlab是很豐富的一個(gè)資源,我在一個(gè)曝光機(jī)項(xiàng)目的一個(gè)算法中用到了Matlab的函數(shù),在VS的不斷升級(jí)過程中以及Matlab的各個(gè)版本變化,導(dǎo)致了我經(jīng)常困惑了,這里還沒有提到操作系統(tǒng),32位還是64位。

      下面我先介紹下我的環(huán)境:

      windows8.1 64bit, Matlab 7.11.0(R2010b)-64bit,VS2012,vs2008

      搭建好環(huán)境后,第一步先新建一個(gè)M函數(shù), 我這里新建兩個(gè)M文件,分別保存為函數(shù)名稱multiply.m, makesquare.m文件。

      function z = multiply(x,y)
      z = x * y;

      function y = makesquare(x)
      y = magic(x);

       

      1.1)新建Deploy tools

        技術(shù)分享

      1.2) 建立工程名字,這里叫做TestCSharpCallMatlab,并選擇生成.NET Assembly,路徑可以更換。

      技術(shù)分享

      1.3)添加一個(gè)類(DemoTest),并為這個(gè)類添加兩個(gè)m文件。

         技術(shù)分享

      1.4)點(diǎn)擊右邊的設(shè)置,選擇要生成的.NET Framework的版本,我這里最高只有.NET3.5,就選擇3.5.

        在其他對(duì)話框里面還可以進(jìn)行一些設(shè)置,這里就不介紹了。

      技術(shù)分享

      1.5)點(diǎn)擊編譯按鈕,就開始編譯了,等待編譯完成。

           技術(shù)分享

       

      1.6)編譯完成后,就生成了2個(gè)文件夾,其中distrib里面就有我們想要調(diào)用的dll了,具體里面什么內(nèi)容,我們查看附件就可以了。

          

      技術(shù)分享

       

      我們生成完動(dòng)態(tài)鏈接庫(kù)以后,就要如何調(diào)用了,下面我先直接使用VS2008來進(jìn)行調(diào)用(匹配.NET 3.5),

      新建一個(gè)winform程序,引用兩個(gè)庫(kù),一個(gè)是MWArray(C:\Program Files\MATLAB\R2010b\toolbox\dotnetbuilder\bin\win64\v2.0),一個(gè)是生成的dll(C:\Program Files\MATLAB\R2010b\bin\TestCSharpCallMatlab\distrib\TestCSharpCallMatlab.dll).

      然后using設(shè)置:

      using TestCSharpCallMatlab;
      using MathWorks.MATLAB.NET.Arrays;
      using MathWorks.MATLAB.NET.Utility;

      這里設(shè)置兩個(gè)按鈕調(diào)用2個(gè)函數(shù),然后把結(jié)果顯示在文本框中,代碼如下:

      技術(shù)分享
       1         private void button1_Click(object sender, EventArgs e)
       2         {
       3             try
       4             {
       5                 DemoTest test = new DemoTest();
       6                 int[] offset = {2};
       7                 int[] ppp ={3};
       8                 MWArray a = new MWNumericArray(1,1,offset);
       9                 MWArray b = new MWNumericArray(1,1,ppp);
      10                 MWNumericArray results = (MWNumericArray)test.multiply(a, b);
      11                 textBox1.Text = string.Format("2 * 3 = {0}", (int)results[1]);
      12                 
      13             }
      14             catch (Exception ex)
      15             {
      16 
      17                 MessageBox.Show(ex.Message);
      18             }
      19         }
      20 
      21         private void button2_Click(object sender, EventArgs e)
      22         {
      23             try
      24             {
      25                 DemoTest test = new DemoTest();
      26                 int[] offset = {3};
      27                 MWArray a = new MWNumericArray(1,1,offset);
      28                 MWNumericArray results = (MWNumericArray)test.makesquare(a);
      29                 StringBuilder sb = new StringBuilder();
      30                 sb.AppendLine(string.Format("{0}, {1}, {2}", results[1], results[2], results[3]));
      31                 sb.AppendLine(string.Format("{0}, {1}, {2}", results[4], results[5], results[6]));
      32                 sb.AppendLine(string.Format("{0}, {1}, {2}", results[7], results[8], results[9]));
      33                 textBox2.Text = sb.ToString();
      34             }
      35             catch (Exception ex)
      36             {
      37                 MessageBox.Show(ex.Message);
      38             }
      39 
      40         }
      View Code

      這里要注意的就是類型的轉(zhuǎn)換,以前我因?yàn)檗D(zhuǎn)換問題,出現(xiàn)過too many output arguments的錯(cuò)誤。
      最終顯示結(jié)果如下:

      技術(shù)分享

       

      在這里,VS的設(shè)置為any cpu即可。VS2008的Demo代碼鏈接如下:

      http://files.cnblogs.com/files/monkeyZhong/TestCSharpCallMatlabApplication2008.zip

       http://files.cnblogs.com/files/monkeyZhong/TestCSharpCallMatlab.zip

      但是VS2012就容易出現(xiàn)問題,歸根結(jié)底就是要修改VS2012的目標(biāo)框架為.NET Framework3.5,這樣才會(huì)正確,

      否則就會(huì)出現(xiàn)這樣的錯(cuò)誤:已停止工作。

      當(dāng)然C#調(diào)用Matlab的方法不止這一種,還有幾種其他的方法,這里就不在這里說了。

       

      C# 調(diào)用 Matlab

      標(biāo)簽:算法   winform   class   style   log   com   代碼   使用   http   

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多