主题:[讨论]怎么产生这样的矩阵
qiufengpushanc
[专家分:0] 发布于 2008-09-21 01:43:00
怎么产生这样的矩阵
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个回复)
沙发
net.s [专家分:0] 发布于 2008-09-22 12:15:00
你需要适当的休息, 这么晚了还发帖哈哈健康着想啊
板凳
永恒的回忆 [专家分:810] 发布于 2008-09-25 00:24:00
似乎没有现成的,要写函数
3 楼
frejdl [专家分:0] 发布于 2008-10-17 14:55:00
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 楼
书影526 [专家分:10] 发布于 2008-10-25 17:48:00
[color=0000FF]三楼的好像错了呢,你没有考虑列[/color]
5 楼
永恒的回忆 [专家分:810] 发布于 2008-10-26 00:03:00
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 楼
书影526 [专家分:10] 发布于 2008-10-26 11:19:00
还是没有考虑列啊
7 楼
永恒的回忆 [专家分:810] 发布于 2008-10-26 20:12:00
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);
我来回复