回 帖 发 新 帖 刷新版面

主题:[讨论]怎么产生这样的矩阵

怎么产生这样的矩阵
a=[0 0 1 0 1;
   1 0 1 0 0;
   0 1 0 1 0;
   1 0 0 1 0;
   0 1 0 0 1]
矩阵的特征是:
1 是方阵
2 每行和每列均有且仅有2个元素是1,其余元素都是0.
请问在matlab中怎么随机产生这样的矩阵呢?是不是要编写matlab函数呢?
谢谢!

回复列表 (共7个回复)

沙发

你需要适当的休息, 这么晚了还发帖哈哈健康着想啊

板凳

似乎没有现成的,要写函数

3 楼


clear
clc
N=5;
A=zeros(N,N);
for i=1:5
    K=randperm(5);
    K1=K(1,1);
    K2=K(1,2);
    A(i,K1)=1;
    A(i,K2)=1;
end
A

4 楼


[color=0000FF]三楼的好像错了呢,你没有考虑列[/color]

5 楼

a=zeros(5);
for i=1:5
    index=fix(rand*5)+1;
    index2=fix(rand*5)+1;
    while(index==index2)
       index2=fix(rand*5)+1;
    end
    a(i,[index index2])=1;
end

6 楼


还是没有考虑列啊

7 楼

a=rand(1,25);
开始没看清题目,这样的话可以在随机生成行的时候加上对列的考虑,把不可能的列及时剪掉,这样做可能算法时间难度比较好,但从实现角度看比较麻烦,这里利用方程思想实现。
%x为最后想要的矩阵

%--------------构造系数矩阵K
K=zeros(10,25);
for i=1:5
    K(i,5*(i-1)+1:5*i)=1;
end
for i=6:10
    K(i,i-5:5:i+15)=1;
end
%-------------构造x向量
aa=sort(a);
x=a<=aa(10);
%------------循环,选择出符合的x向量
while sum(K*x'==repmat(2,10,1))~=10
    a=rand(1,25);
    aa=sort(a);
    x=a<=aa(10);
end
%-----------把x向量转成矩阵
x=reshape(x,5,5);

我来回复

您尚未登录,请登录后再回复。点此登录或注册