EDA365电子论坛网

标题: 请教大神,如何用MATLAB构造一个对称矩阵。 [打印本页]

作者: busahuang    时间: 2020-6-29 11:03
标题: 请教大神,如何用MATLAB构造一个对称矩阵。
请教大神,如何用MATLAB构造一个30*30的随机0,1对称矩阵。要求各行各列元素1的个数在2到6之间,非常感谢!# w4 ~+ p$ o/ W& h# L+ w2 R

作者: fanichicl    时间: 2020-6-29 13:20
clear; clc; close all;
! q$ [9 R: ?- z. Wn = 30;
5 N4 ~+ m- u4 `Min = 2; Max = 6;  w: L, @  v: U
M = zeros(n+1,n+1);
7 M# E2 D  v; m( v3 ^) @2 Xii = 2;. ?% Q2 n+ R( L8 n( t' F
while ii <= n+1, c( F9 E7 T  m+ s
    ExistingNumberOfOne = sum( M(1:1:ii-1,ii) );
8 p6 o6 j  l. L$ |% i$ u    TotalNumberOfOne = randi([Min Max],1,1);7 W2 l3 K6 a6 W) ?3 X+ X
    if TotalNumberOfOne < ExistingNumberOfOne || ExistingNumberOfOne > Max
& t: @5 _% |4 w% ]        ii = 2;3 X+ Q0 B; H/ m, a+ R' F, X
        M = zeros(n+1,n+1);
* q9 A6 U# i! s" ]" g8 q: K" U    else
( }$ H% H2 E5 J9 ]6 y        idx = randperm(n-ii+2,min([TotalNumberOfOne - ExistingNumberOfOne, n-ii+2]));; [5 N8 e* i$ z5 L
        tempArray = zeros(1,n-ii+2); tempArray(idx) = 1;
# @* \, f/ y5 S; M9 q3 m; s        M(ii,ii:end) = tempArray;! X& s% n6 ^6 z9 G
        ii = ii + 1;
2 ]5 t% O7 T+ b# E  G    end  C* A0 b! H6 T) r; E+ k
end2 A  K% J  v) z9 T1 c7 h$ _
M = M(2:end,2:end);6 ]& ~3 O8 C8 L; u  X, K" B
U = triu(ones(n),1); D = diag(M);
( T) ^+ ]6 F6 ^1 ]2 d  eM = M.*U;! a7 {& n. U6 A) k. D9 ~
M = M' + M + diag( D );
% ~" T. L& _4 [1 Kif sum( Min<=sum(M) & sum(M)<=Max ) == n
) E% }$ O8 \$ V# h# L4 T9 l    disp( M );: H; A- u9 N5 K" b2 S( J- a+ u* c
end
作者: fanichicl    时间: 2020-6-29 13:21
fanichicl 发表于 2020-6-29 13:20
# u4 p; ?2 j  q- `5 `6 xclear; clc; close all;
! x) W3 |8 f4 O) s, h0 A0 qn = 30;
' l; V) s' W8 A$ Q1 n) AMin = 2; Max = 6;
7 `6 W. `* y. R; x( a+ L& v

/ G) ?8 {, ~/ ~( P, X' a; s. A  j/ g# W




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2