我也使用Jama来进行奇异值分解,但在解决大矩阵时遇到了同样的问题。为了减少内存溢出情况,我对SingularValueDecomposition.java进行了调整以使其更加紧凑。调整的方法是,在矩阵A中有很多0值,因此对于所有使用的矩阵(如A、U、V、Work等),只允许为可用值保留内存,而这些可用值大于0。
在使用紧凑SVD之前,您应该制作一个A矩阵文件,例如
r /t c /t value /n
r /t c /t value /n
... '/t'和'/n'分别表示制表符和换行符。
例如,(0, 0, 0), (0, 1, 0.5), (0, 2, 0), (0, 3, 0.2), (1, 0, 1), (1, 1, 0), (1, 2, 0), (1, 3, 0.3)且矩阵大小为2*4(R*C),则可以制作如下文件:
MATRIXSIZE /t 2 /t 4 /n
0 /t 1 /t 0.5 /n
0 /t 3 /t 0.2 /n
1 /t 0 /t 1 /n
1 /t 3 /t 0.3 /n
如果您想使用它,请给我您的电子邮件地址(mg.hwang@gmail.com)。我会在邮件中提供更多使用细节。
我检查了结果是正确的。但是,我不确定它对计算机有多大的效果。无论如何,它可以工作并显示得更好,即使不是很多。