MATLAB实例:对称双随机矩阵

MATLAB实例:对称双随机矩阵

作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

双随机矩阵(doubly stochastic matrix):元素属于[0,1],行和为1,且列和为1。

MATLAB程序

function A=doubly_stochastic(n)
%产生 n 阶双随机矩阵 A
A(1,1)=rand;
for i=2:n-1
    d=1-sum(A(1,1:i-1));
    A(1,i)=d*rand;
end
for i=2:n-1
    d=1-sum(A(1:i-1,1));
    A(i,1)=d*rand;
end
for i=2:n-1
    for j=2:n-1
        d1=1-sum(A(i,1:j-1));
        d2=1-sum(A(1:i-1,j));
        d=min([d1 d2]);
        A(i,j)=d*rand;
    end
end
for i=1:n-1
    A(n,i)=1-sum(A(1:n-1,i));
end
for i=1:n
    A(i,n)=1-sum(A(i,1:n-1));
end
if A(n,n)<0
    A=1/n*ones(n);
end
%对称化A
A=(A'+A)/2;

:程序最后一行如果去掉,则为双随机矩阵,加上最后一行,保证矩阵为对称阵。

结果

>> A=doubly_stochastic(5)

A =

    0.3260    0.2105    0.3017    0.1032    0.0585
    0.2105    0.1132    0.4114    0.1341    0.1308
    0.3017    0.4114    0.0023    0.1947    0.0899
    0.1032    0.1341    0.1947    0.3641    0.2039
    0.0585    0.1308    0.0899    0.2039    0.5169

>> sum(A, 1)

ans =

     1     1     1     1     1

>> sum(A, 2)

ans =

     1
     1
     1
     1
     1

>> A'==A

ans =

  5×5 logical 数组

   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1

参考

如何用Matlab产生双随机矩阵

你可能感兴趣的:(MATLAB实例:对称双随机矩阵)