2013-10-03 142 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