我需要在matlab中应用一些具有大矩阵的运算序列,以便求解线性方程组。在一开始,尽管考虑到matlab应用了一些内部优化(至少这是我的理解),我还是会很快。但是,看来我错了。我要应用的初始操作顺序如下:
nbf = size(F,1);
if issparse(F)
F = sparse(diag(r))*F;
else
F = diag(r)*F;
end
if issparse(F)
K = sparse(eye(nbf)) - F;
else
K = eye(nbf) - F;
end
R = K\E;
其中F
是方阵MxM
,其中M = 50000
以上且几乎所有时间都不稀疏。 r
和E
是Mx1
个向量,而E
是稀疏的。在功能强大的机器上进行这些操作大约需要25分钟,这对于我的需求来说是很慢的(在理想情况下,我希望进行一些实时计算,但是我认为我无法实现这一点,尽管有人证明我会很高兴)错误)。因此,我正在尝试寻找减少这种计算时间的方法。第一个想法是看看如果分别用F = diag(r)*F;
和K = eye(nbf) - F;
替换F = bsxfun(@mtimes,diag(r),F);
和K = bsxfun(@minus,eye(nbf),F);
会得到什么。关于求解逆矩阵运算R = K\E
,我遇到了这个https://it.mathworks.com/help/matlab/ref/decomposition.html,或者,如果您无法使用decomposition()
函数,则可以用{{ 3}},因此可以将其替换为factorize()
。但是,这将计算时间缩短了22分钟,而不是25分钟。因此,我想问一问,是否有人知道任何建议或其他方式可以优化这些运算以提高计算速度。