与主对角线对称的二维数组,行之和等于 1



我想做的

我想创建一个程序,该程序生成一个随机矩阵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

i还可以通过在每行上找到总和,然后将每个元素与该行总和分开,然后当我制作行总和时,它等于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。

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

最新更新