2013-10-03 217 views
-1

我有一個讀取大矩陣並計算奇異值分解SVD的matlab函數。然而,我需要在Linux系統上運行該程序,而無需在每個新系統上安裝matlab,因此id希望將其轉換爲c源代碼。該代碼是真的很簡單:將matlab代碼轉換爲c

function singular(m) 
load c:\som\matlab.txt 
[U,S,V]=svd(matlab); 
m = str2num(m); 
U1=U(:,1:floor(sqrt(m))); 
V1=V'; 
Vt=V1(1:floor(sqrt(m)),:); 
S1=S(1:floor(sqrt(m)),1:floor(sqrt(m))); 
matlab1=U1*S1*Vt; 
matlab2=abs(matlab1); 
save c:\som\matlab1.txt matlab1 -ascii 
save c:\som\matlab2.txt matlab2 -ascii 
+1

是否必須是'c'?您可能會發現轉換爲Python更容易,numpy具有像語法一樣的matlab,並且在Linux上有很多。除非你已經知道C在哪種情況下,你應該發佈你試圖自己移植它。 – Dan

+0

@丹我將要處理的矩陣將是巨大的,完成時間將不得不在10秒內,所以我需要它在c。 – Evan

+3

你需要一個好的數學庫,比如http://www.netlib.org/clapack/才能得到'svd' – Simon

回答

0

可以使用Matlab coder,不過我勸你還是手工製作,因爲某些功能不可自由兌換,而且性能也不遑多讓的是手動個不停了。

要手動製作svd:SVD

+1

性能會更好,比手動更好!使用一個合適的線性代數庫,而不是你自己的代碼,甚至是一些受數字食譜啓發的functon。 – chappjc

+0

嗯,在大多數情況下你是對的,但可能沒有一些特定功能的函數庫。我也願意重複使用庫,而不是手動創建它:) –

+0

不夠公平,但在這種情況下它有所需:http://www.mathworks.com/help/fixedpoint/ug/functions-supported-for-code -generation - alphabetical-list.html另一方面,編譯器通過免版稅的MCR(運行時)支持每個最後的MATLAB函數。 – chappjc