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