【问题标题】:How to factor a matrix to a product of kernel matrices?如何将矩阵分解为核矩阵的乘积?
【发布时间】:2012-05-29 07:33:22
【问题描述】:

问题陈述:

假设我们有一组核方阵 = {K1, K2, .., Kn}。给定 矩阵 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++ 库可供我用来寻找解决方案?如果没有,是否有任何已知的算法/启发式方法?

附:这不是家庭作业问题或理论问题或其他一些小题大做。对于我在日常工作中从事的一个副项目,这是我需要解决的一个真正问题。

【问题讨论】:

  • 内核矩阵的典型数量和维数是多少?某个内核在产品中出现的次数有上限吗?蛮力态度可行吗?
  • 您是否试图计算出制作给定 A 矩阵所需的 K 矩阵集?
  • @ItamarKatz 上限为 16x16。出现次数没有限制,但假设Basis通常提供良好的覆盖率,所以我预计不会出现很多次。蛮力?仅当没有更快的算法时
  • @Skizz 对不起,我不明白
  • @Skizz - 他试图用最少的矩阵乘法找到分解。所有内核都是已知的。

标签: c++ math matrix linear-algebra


【解决方案1】:

您可能会查看矩阵的迹线和行列式。由于可以比完全乘法更有效地计算乘积的迹和行列式,因此它们可以帮助您有效地排除组合。

http://en.wikipedia.org/wiki/Trace_(linear_algebra)#Trace_of_a_product http://en.wikipedia.org/wiki/Determinant#Multiplicativity_and_matrix_groups

【讨论】:

    【解决方案2】:

    我认为你想要的是一个进行矩阵运算的工具。本征可能适合你。 http://eigen.tuxfamily.org/index.php?title=Main_Page

    【讨论】:

    【解决方案3】:

    trace 减少组合的想法很好,只是 tr(A*B) 不等于 tr(A)*tr(B),所以你必须使用行列式而不是 det(A*B)=det (A)*det(B)。

    det(M) 的整数因式分解可能会帮助您减少组合,除非您的内核有一些 det(Ki)=+/-1...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多