Matlab 与主对角线对称的2D阵列,行';s和等于1 我想做什么

Matlab 与主对角线对称的2D阵列,行';s和等于1 我想做什么,matlab,math,multidimensional-array,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)

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

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

你想要一个随机矩阵,还是想要一个具有特定值的随机矩阵(它不再是随机的)?我不明白这里的问题。谢谢你的问题!我的想法是,我想生成一个矩阵,它有以下特点:对称指的是主对角线,矩阵的每一行的和等于1。当你说“随机”时,你需要指定你想要的分布(均匀?)“随机”一词的意思是,该矩阵中的数字是为主对角线上的元素随机选择的,见问题代码1(j>I)…但这不符合要求
sum(diag(randMat))==1
sum(randMat,2)==1
如Rody所说,它是对称的,但行和不等于1@RodyOldenhuis:呵呵,是的。Fixed@EridBardhaj:事实上,行(列)和为0。现在修复。@EridBardhaj:矩阵是对称的(即,
randMat
等于
transpose(randMat)
),每行的和等于1。我不明白在哪里可以找到大于1的和。