Matlab 缓存矩阵跟踪中的元素
我要做这样的评估 D=跟踪(ABC) A和C是不变的常数矩阵。B矩阵不断变化。我想要的是找到一种方法来存储a和C中的一些值,这样我就不必一直计算产品ABC。B将改变,我将使用B元素的某种乘积和一些缓存版本的AC或类似的东西 我知道trace(ABC)=trace(BCA),所以我可以预先计算产品CA,但是CA的维数非常高,所以它不适合内存。因此,我不能这样做。ABC是低维的,所以很好Matlab 缓存矩阵跟踪中的元素,matlab,trace,Matlab,Trace,我要做这样的评估 D=跟踪(ABC) A和C是不变的常数矩阵。B矩阵不断变化。我想要的是找到一种方法来存储a和C中的一些值,这样我就不必一直计算产品ABC。B将改变,我将使用B元素的某种乘积和一些缓存版本的AC或类似的东西 我知道trace(ABC)=trace(BCA),所以我可以预先计算产品CA,但是CA的维数非常高,所以它不适合内存。因此,我不能这样做。ABC是低维的,所以很好 C is of size 40000x10 and dense B of size 80000x40000 b
C is of size 40000x10 and dense
B of size 80000x40000 but B is sparse so it is fine
A is of size 10 by 80000 and dense
有什么建议可以让我高效地完成吗?如果您考虑tr(ABC)元素
l=10,n=40000,m=80000
使用B的稀疏性进行上述乘法的次数为np*10,其中np是B的非零元素数
预计算CA的乘法数为10*40000*80000。然后,利用B的稀疏性,tr(B(CA))的乘法数为np。因此,除非计算的次数超过1/(B的密度),否则只计算tr(ABC)会更快
话虽如此,我认为CA的预计算是不必要的。我绞尽脑汁想了几分钟:以前从未遇到过这个问题。如果矩阵是平方的,那么你可能已经能够使用特征值和对角化。也许你可以在数学网站上提问。