【问题标题】:Generating 50 random 2x2 matrices with positive eigenvalues/positive definite matrices生成 50 个具有正特征值/正定矩阵的随机 2x2 矩阵
【发布时间】:2020-11-17 23:45:33
【问题描述】:

我想知道如何在 PYTHON 中生成大约 50 个随机 2x2 对称正定矩阵。有没有人可以指导我使用 scikit 或 numpy 的代码块?

【问题讨论】:

  • 对于任意矩阵A,矩阵A*A是半正定的,stackoverflow.com/questions/619335/…..
  • 问题是关于正矩阵。
  • 一个对称矩阵是正定的,当且仅当它的所有特征值都是正的。为什么不做一个正对角线的随机对角矩阵呢?

标签: python numpy


【解决方案1】:

严格对角占优矩阵是正定矩阵。所以你可以生成一个随机A,计算AA= A'A,然后增加对角线上的元素以确保

AA[i,i] > sum( abs(AA[i,j]), j != i ),

例如,计算右侧的和,然后将其加 1 并将结果分配给 AA[i,i]

更简单地说,您可以计算 A'A + alpha*I 以获取您选择的一些 alpha > 0 以及我在哪里 单位矩阵。这个矩阵的所有特征值都是>= alpha,这使它“安全”正定

您也可以使用 sklearn 更轻松地完成此操作,然后使矩阵值随机化。 见:https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_spd_matrix.html

【讨论】:

    【解决方案2】:

    一个真正的对称 2×2 矩阵

    / a b \
    \ b c /
    

    是正定的,如果它的迹和行列式是正的。 因为行列式是ac-b^2,所以如果ac 是正数并且-m < b < m 其中m 是几何平均值\sqrt ac,就会发生这种情况。

    因此,您可以用-1<f<1 绘制正数ac 和因子f,然后使用

    /     a         f * sqrt(ac) \
    \ f * sqrt(ac)      c        / 
    

    请注意,这种方法很容易被矢量化。

    【讨论】:

      【解决方案3】:

      “随机”对不同的人意味着不同的东西,但我会尝试一下。

      正如前面的回答所指出的,实矩阵 X 是半正定的,当(且仅当)它可以被分解为 X=M'M,即它是一个 Gram 矩阵。

      使X 随机化的一种简单方法,同时也保证正定性,是对M 使用随机正常条目。另请参阅Wishart distribution

      【讨论】:

        猜你喜欢
        • 2018-08-11
        • 2018-10-26
        • 1970-01-01
        • 2012-09-01
        • 2012-11-21
        • 2015-08-24
        • 2012-02-01
        • 1970-01-01
        • 2023-04-06
        相关资源
        最近更新 更多