Matlab 生成具有特定秩的随机矩阵

Matlab 生成具有特定秩的随机矩阵,matlab,matrix,Matlab,Matrix,我想知道如何在Matlab中生成具有特定秩(轴列数)的nxn矩阵。我知道您可以使用命令randi(IMAX,m,n)生成一个m x n矩阵,其中包含1到IMAX之间的随机项,但是是否可以生成一个4 x 4矩阵,其中包含随机项,但只有2个轴列?提前感谢。我意识到,因为randi(IMAX,m,n)形成一个包含尽可能多的轴列的m x n矩阵,所以可以使用k个轴列和1到IMAX之间的随机项,使用以下代码形成一个n x n矩阵A: A = randi(IMAX, n, k)*randi(IMAX, k,

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

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

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

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

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

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

可能属于,或者请注意,这不会在该空间上生成均匀分布,元素也会在[1,IMAX^2]范围内。+1这是正确的方法,无论您是使用
rand
randi
,都应该有效,或
randn
。通常,您也可以使用相同的矩阵,即
X=randn(4,2)
Y=X*X'。此外,我编辑了您的答案,以包含代码突出显示。干杯,先生。鲍尔斯,谢谢你清理它,让它看起来很专业。祝你好运!元素的范围实际上是[1,IMAX^2*k]。