天天看點

Matlab.NET混合程式設計技巧之——找出Matlab内置函數1.Matlab.NET混編小技巧2.什麼是Matlab的内置函數 3.Matlab有哪些内置函數

Matlab與.NET的混合程式設計,掌握了基本過程,加上一定的開發經驗和算法基礎,肯定不難。反之,有時候一個小錯誤,可能抓破腦袋,加班幾個晚上,調試才能解決。同樣,由于Matlab.NET混編的特殊性,加上MathWorks的原因,英文文檔和沒有披露一些詳細的細節(甚至不允許反編譯MWArray.dll,呵呵,它不允許,不代表你不會哦)。經過很多項目,和大量的實驗,也發現了一些小技巧和小秘密,今天就分享其中一個,先做一個簡單的鋪墊,下一篇将寫一個實際例子。

正常混編時,比如我們要調用plot函數進行繪圖,肯定是先自己寫一個m函數,把plot封裝一下,根據自己的需要,傳遞資料和參數。實際上,對于Matlab的内置函數,是不需要這麼做的。也就是說,對于Matlab的内置函數,是可以直接在C#中進行調用的,隻要傳遞的參數符合要求,就可以得到結果。

本文所說的Matlab内置函數,就是Matlab所謂的"built-in MATLAB function"。

在Matlab中,可以使用exist傳回一個名稱或者函數的狀态,比如是工作區的變量,搜尋路徑的m函數,dll檔案或者内置函數。

比如,我們可以使用exist 來檢視plot函數的資訊:

可以看到,值為5,傳回5說明就是"built-in MATLAB function"。從Matlab的組成來看,這些built-in MATLAB function應該都是matlab的核心函數,是以,也應該都包含在MCR中,是以這是一個直接可以調用的理由吧。

在發現上述小技巧之後,本人親自對其中幾個内置函數進行了測試,證明其是可以在C#中直接調用,然後,我就想,到底有Matlab有多少個内置函數,函數名稱有是什麼?在把Matlab Help翻了很久之後,依舊沒有結果。隻是猜測,可能太多了,Matlab也沒有特别說明吧。那怎麼辦,隻能自己動手了(自己動手豐衣足食)。

說說找出内置函數集合的過程吧。

1.首先内置函數應該在核心的計算引擎中,外部工具箱的函數應該不屬于(不排除其他工具箱中有部分函數也是内置函數)。

2.使用Matlab Help浏覽器,打開核心元件Matlab的Functions節點,可以看到下面這些函數分類:

Matlab.NET混合程式設計技巧之——找出Matlab内置函數1.Matlab.NET混編小技巧2.什麼是Matlab的内置函數 3.Matlab有哪些内置函數

3.手動将這些大類中的函數手動複制到一個txt文本中,當然格式可能有點亂,不用管。

4.使用C#編寫一個簡單的函數,将上述txt文本進行處理,把函數名都截取出來,放到一個新的result.txt中。代碼如下:

5.最後在matlab中編寫一個簡單的批處理代碼,循環驗證result.txt中的函數名的資訊,是否屬于内置函數即可。matlab代碼如下:

OK,可以在result中看到屬于内置函數的名稱了。剩下的怎麼辦看你的了,本來想把這些函數都一一翻譯出來,可惜太大了,有1000多個,最後放棄了,把這個技巧分享給大家,“授人以魚不如授人以漁”,大家掌握了方法,其實也不難了。

備注:上面也提到了,其實也有可能其他工具箱也有一些内置函數,但工作量太大,沒有全部測試,隻是猜測一下,大家以後混編的時候,可以先用exist檢測一下即可。至于這些核心元件中的内置函數,我也隻測試了其中幾個,理論上應該都是可以直接調用的,也不排除有些函數由于其他原因不能用啊,大家對症下藥吧。

下次将分享如何在C#中直接調用這些内置函數,而不需要封裝。

繼續閱讀