二维阵列与主对角线对称,行的总和等于1

时间:2014-01-23 13:16:11

标签: matlab math multidimensional-array

我想做什么

我想创建一个生成随机矩阵nxn(2D数组)的程序,我必须在其上进行计算,其元素与其主对角线对称,每行的总和等于1.

详细

我尝试了太多算法,但没有人正常工作,我可以通过输入

来做矩阵对称
for i=1:n
    n=rand(100);

    for j=1:n

       if(j>i)
          matrix(i,j) = rand(100);
          matrix(j,i)=matrix(i,j);
       else if (j==i)
         matrix = rand(100);
       end
    end
end

我也可以通过找到每一行的总和,然后将每个元素与该行的总和相除,然后当我将该行的总和等于1时,将矩阵的行的总和等于1。

for i=1:n

    for j=1:n
       matrixS(i,j) = matrix(i,j)/sum(i); % The vektor of the row sums is made by another algorithm
    end
end

问题

问题是当我想用我提到的所有特征制作这个数组时,每行等于1,矩阵由主对角线对称

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果这是足够随机的,您可以生成具有随机非对角线元素的对称矩阵,然后调整对角线,使行(和列)总和等于1.

n = 4;
randMat = zeros(n);
randMat(tril(true(n),-1)) = rand( n*(n-1)/2, 1); %# fill in some values
randMat = randMat + randMat'; %# make symmetric
randMat(eye(n)>0) = 1 - sum(randMat,2); %# adjust diagonal

%# Example

randMat =

   -0.7829    0.2785    0.5469    0.9575
    0.2785   -0.4010    0.9649    0.1576
    0.5469    0.9649   -1.4824    0.9706
    0.9575    0.1576    0.9706   -1.0857

>> sum(randMat)  %# the same as sum(randMat,2)'

ans =

    1.0000    1.0000    1.0000    1.0000