问题陈述:
假设我们有一组核平方矩阵 = {K1, K2, .., Kn}。鉴于 a 矩阵 A 查找包含最少矩阵量的乘积 得到的乘法:A = Ki * Kj * ... * Kz
例:
Say we have these two matrices in the set of Kernel matrices:
K1 = (1 2) K2 = (5 6)
(3 4) (7 8)
Then we have a solution for A=K1*K2=(19 22) and also for B=K1*K1*K2=(105 122)
(43 50) (229 266)
是否有任何现有的 C 或 C++ 库可用于查找解决方案?如果没有,是否有任何已知的算法/启发式?
附言这不是家庭作业问题或理论问题或其他一些手推车。这是我在日常工作中需要解决的一个副项目的真正问题。
您可以查看矩阵的跟踪和行列式。 由于乘积的迹线和行列式可以比完全乘法更有效地计算,因此它们可以帮助您有效地排除组合。
http://en.wikipedia.org/wiki/Trace_(linear_algebra)#Trace_of_a_producthttp://en.wikipedia.org/wiki/Determinant#Multiplicativity_and_matrix_groups
我认为你想要的是一个执行矩阵运算的工具。本征可能适合您。http://eigen.tuxfamily.org/index.php?title=Main_Page
跟踪减少组合的想法很好,除了 tr(A*B) 不等于 tr(A)*tr(B),所以你必须使用行列式代替 det(A*B)=det(A)*det(B)。
det(M) 的整数分解可能会帮助你减少组合,除非你的内核有一些 det(Ki)=+/-1...