【发布时间】:2012-11-21 05:48:05
【问题描述】:
我想知道如何在 Matlab 中生成具有特定秩(枢轴列数)的 n x n 矩阵。我知道您可以使用命令randi(IMAX, m, n) 生成一个 m x n 矩阵,其中随机条目介于 1 和 IMAX 之间,但是否有可能生成一个 4 x 4 矩阵,其中包含随机条目但只有 2 个枢轴列?提前致谢。
【问题讨论】:
-
可能属于Math 或Super User
我想知道如何在 Matlab 中生成具有特定秩(枢轴列数)的 n x n 矩阵。我知道您可以使用命令randi(IMAX, m, n) 生成一个 m x n 矩阵,其中随机条目介于 1 和 IMAX 之间,但是否有可能生成一个 4 x 4 矩阵,其中包含随机条目但只有 2 个枢轴列?提前致谢。
【问题讨论】:
我意识到,因为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 个透视列。
【讨论】:
rand、randi 还是randn 生成都应该有效。通常,您也可以使用相同的矩阵,即X = randn(4, 2);、Y = X * X';。另外,我编辑了您的答案以包括代码突出显示。干杯。
一种(诚然效率低下)方法可能是生成完整矩阵(在您的示例中为 4x4),然后使用 SVD 分解将其分离并将一些奇异值归零(在您的情况下为 2 个条目)。我相信重组后的矩阵会有所需的排名。
【讨论】:
或者,如果您对控制生成矩阵的奇异值感兴趣,可以使用测试矩阵库中的 randSVD 函数:(link)
【讨论】: