【问题标题】:Generate random matrix with specific rank生成具有特定秩的随机矩阵
【发布时间】:2012-11-21 05:48:05
【问题描述】:

我想知道如何在 Matlab 中生成具有特定秩(枢轴列数)的 n x n 矩阵。我知道您可以使用命令randi(IMAX, m, n) 生成一个 m x n 矩阵,其中随机条目介于 1 和 IMAX 之间,但是否有可能生成一个 4 x 4 矩阵,其中包含随机条目但只有 2 个枢轴列?提前致谢。

【问题讨论】:

标签: matlab matrix


【解决方案1】:

我意识到,因为randi(IMAX, m, n) 形成了一个包含尽可能多的枢轴列的 mxn 矩阵,所以可以使用以下代码形成一个具有 k 个枢轴列和 1 到 IMAX 之间的随机条目的 nxn 矩阵 A:

A = randi(IMAX, n, k)*randi(IMAX, k, n)

因为randi(IMAX, n, k)randi(IMAX, k, n) 中的每一个都只有k 透视列,所以它们的产品也只有k 个透视列。

【讨论】:

  • 请注意,这不会在该空间上生成均匀分布,并且元素将落在 [1,IMAX^2] 范围内。
  • +1 这是正确的方法,无论您是使用randrandi 还是randn 生成都应该有效。通常,您也可以使用相同的矩阵,即X = randn(4, 2);Y = X * X';。另外,我编辑了您的答案以包括代码突出显示。干杯。
  • 先生。 Bowers,感谢您清理它并使它看起来很专业。祝你好运!
  • 元素的范围其实是[1, IMAX^2 * k]。
【解决方案2】:

一种(诚然效率低下)方法可能是生成完整矩阵(在您的示例中为 4x4),然后使用 SVD 分解将其分离并将一些奇异值归零(在您的情况下为 2 个条目)。我相信重组后的矩阵会有所需的排名。

【讨论】:

    【解决方案3】:

    或者,如果您对控制生成矩阵的奇异值感兴趣,可以使用测试矩阵库中的 randSVD 函数:(link)

    【讨论】:

      猜你喜欢
      • 2014-10-24
      • 2018-10-26
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 2012-09-01
      相关资源
      最近更新 更多