Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 缓存矩阵跟踪中的元素_Matlab_Trace - Fatal编程技术网

Matlab 缓存矩阵跟踪中的元素

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

我要做这样的评估

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 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的预计算是不必要的。

我绞尽脑汁想了几分钟:以前从未遇到过这个问题。如果矩阵是平方的,那么你可能已经能够使用特征值和对角化。也许你可以在数学网站上提问。