我有一個很好的.net程序集的核心matlab函數,當然是用matlab編譯器創建的。對於接受數字或數組數組的函數,這沒問題;我可以在C#中編寫代碼,而無需恢復到matlab(嗯,RCM必須安裝;這很好)。將matlab函數集成到c#項目中
但是,對於那些必須引用其他函數的函數,我至今可以找到一個獲取c#程序的唯一方法就是將這兩個函數編譯到程序集中。爲了更好地解釋,假設我有一個庫,其中存儲了ode45例程。如果我想解決一個特定的公式,讓我們說一些簡單的像DY/DX = -y,然後我要創建可寫的MATLAB腳本文件,如下所示:
function dydx = diffeq(x, y)
dydx = -y
[明顯的解析解存在,但爲了這個例子,讓我們說我想要這樣解決]
現在爲了解決這個等式,我將不得不添加此函數作爲我的類中的一個方法來編譯到.net部件。這當然會破壞我的圖書館的普遍性;我需要將不同庫中的特定於應用程序的方程式與我的核心數學函數庫進行比較。也就是說,ODE45方法應該位於比「difffeq」方法所在的庫更「核心」的庫中。我更喜歡在c#類中創建「diffeq」方法,我可以直接在例如編輯器中編輯這些方法。 VS2012。我想直接編輯公式,而不是每次都輸入matlab並重新編譯程序集。
爲了解決這個問題,我已經到了包含ode45代碼和我的微分方程方法的程序集反編譯的程度;原來這個程序集只不過是與MCR的接口;在裝配diffeq方法返回類似以下的東西:
return mcr.EvaluateFunction(numArgsOut, 「diffeq」, new object[0]);
我們注意到,函數/方法「diffeq」不是MCR的一部分; MCR不會改變。但是,我無法在程序集中的任何位置找到方程。
這引出了一個問題:「老兄,這裏是我的功能?」
還有就是組件的「資源」部分中,我們發現[類名] .ctf,並在我們會發現一些機器代碼。這看起來是加密的,但公式可能隱藏在那裏。如果是這樣,那將是我嘗試阻止的故意嘗試,並且對MathWorks的讚揚使我無法避免輸入matlab應用程序!
但是,似乎沒有任何許可證可以阻止我想要做的事情;我認爲,如果數學作品能夠讓人們接受這樣的方法,那將是非常棒的,但是在這個環節中,有沒有人知道如何做到這一點?
所以你說,正常的MATLAB代碼可以在程序運行時訪問臨時文件夾內? –
對不起,我的措辭有點模棱兩可,提取的文件保持加密形式(AES加密)。我想MCR知道祕密的對稱密鑰,因此能夠解密然後照常執行代碼。有趣的是,只有M文件被加密了(還有其他的資源文件和來自你的''prefdir''的包含在CTF檔案中的未加密的首選項)。目錄結構使用相同的文件名進行復制,但M文件中的內容基本上是亂碼。 – Amro