2013-05-01 111 views
2

我需要在matlab中使用非常長的字符串定義一個變量,讓我們稱它爲S. S包含符號計算的結果,並且我想在我的matlab代碼中使用該結果。 S太長而無法直接複製到代碼中,所以我只是從文件中讀取它。我可以使用eval評估S中的表達式,它可以正常工作,但它確實很慢(大約需要15秒)。我需要獲取S值的變化範圍內的不同值,所以我需要一個更快的方法來做到這一點。任何想法都會很棒。matlab替代eval的大字符串

+0

爲了提高性能,你可以實現的eval作爲一個MEX功能。 另外,看看這個: http://www.mathworks.se/help/matlab/matlab_prog/string-evaluation.html – PurpleAlien 2013-05-01 21:21:08

+0

是的,當我試圖找出這一點,但我沒看到那個頁面,但我沒有認爲任何這些情況都適用於我正在嘗試做的事情。你能解釋一下MEX功能是什麼嗎?謝謝。 – user1504686 2013-05-02 20:19:56

+0

MEX函數是像C/C++或Fortran中的eval()這樣的函數的本地代碼實現,因此可以進行高度優化。你的主要問題是eval()真的很慢,所以你必須找到一種方法來爲你的特定需求編寫一個優化版本,然後在Matlab中使用這個版本。 – PurpleAlien 2013-05-02 22:56:19

回答

1

根據你的主要目標你可以做幾件事情。

  • 表達式轉換爲腳本,並從你的函數調用它(速度的提高將取決於表達)
  • 如果表達式是比較平滑函數沒有奇異點,那麼你可以預先計算它輸入的幾個值參數。然後你插入該表的剩餘點。無論如何,應該比15秒快。
  • 你可以兩種方式使用/最終開關草案在代碼中使用的計算草案插值和「最後的」運行確切的代碼組合(可能一夜之間O)