matlab 生成特定秩的随机矩阵

pprl5pva  于 2022-11-24  发布在  Matlab
关注(0)|答案(7)|浏览(348)

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

i1icjdpr

i1icjdpr1#

我意识到,由于randi(IMAX, m, n)形成了一个m x n矩阵,其中包含尽可能多的主列,因此可以使用以下代码形成一个n x n矩阵A,其中包含k个主列和介于1和IMAX之间的随机元素:

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

因为randi(IMAX, n, k)randi(IMAX, k, n)都只有k透视列,所以它们的乘积也只有k个透视列。

vmpqdwk3

vmpqdwk32#

一种(公认的低效)方法可能是生成完整的矩阵(在您的例子中为4x4),然后使用SVD分解将其分离,并将一些奇异值(在您的例子中为2个元素)归零。

py49o6xq

py49o6xq3#

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

vmpqdwk3

vmpqdwk34#

这就是我如何创建一个循环,直到和除非它创建了一个随机矩阵2。你可以根据需要改变数字。(注意:矩阵的秩不能大于矩阵的大小)
下面是Matlab代码:

Matrix_Size=input('Enter a number to generate the desired matrix\n')

Iteration = 2 % This is to run the loop infinitely

while (Iteration>1)
    Main_Matrix=sym(randi(7,3,3)) %7 is the range where the elements in my random matrix will occur
    Rank_Matrix=rank(Main_Matrix)
    if (Rank_Matrix == 2)
        break
    end
end
Main_Matrix
alen0pnh

alen0pnh5#

%random number with specific rank
close all;
clc;
clear;
rng(8);
y= randi(300,3,3);
display(y)
if rank(y)==2
    y=y;

else
    r = (randi(9)+1);
    for i = 1:3
       y(3,i)=r*y(1,i);
    end
end

%random number with specific rank
k75qkfdt

k75qkfdt6#

%%plotting the figures column space - left null space
figure(1)
plot3([0 CS(1,1)],[0 CS(2,1)],[0 CS(3,1)],'r','linew',3)
hold on
plot3([0 CS(1,2)],[0 CS(2,2)],[0 CS(3,2)],'b','linew',3)
legend('CS - Column 1','CS - Column 2')
hold on 
plot3([0 LNS(1,1)],[0 LNS(2,1)],[0 LNS(3,1)],'g','linew',3)
legend('CS - Column 1','CS - Column 2','LNS - Column 1')
title('Column Space - Left Null Space Plot')
hold off
qcbq4gxm

qcbq4gxm7#

%%matrix decalration and finding the  column space, row space and null
%%space and left null space
clear;clc;clear all variables;
B=randi(16,3,2);
C=randi(16,2,3);
A=B*C;
rank(A);
Y=sym(A);
Y
CS = colspace(Y)
RS = colspace(Y')
NS = null(Y)
LNS = null(Y')

相关问题