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