Matlab 与主对角线对称的2D阵列,行';s和等于1 我想做什么
我想创建一个程序,生成一个随机矩阵nxn(2D数组),我必须在其上进行计算,其元素与其主对角线对称,每行的总和等于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)
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的和。