can anyone explain, how following program is working?(5th step)
Mostrar comentarios más antiguos
A should be a randomly created 5 x 5 matrix whose elements are all integers ranging from 0 to 7 in such a way that
1) row 1 and column 1 have equal sums,
2) row 2 has a sum of 7 and column 2 has a sum of 0,
3) row 3 and column 3 have equal sums,
4) row 4 has a sum of 0 and column 4 has a sum of 7,
5) row 5 and column 5 have equal sums,
6) its diagonal elements are all zeros, and
7) all column and row sums are 7 or less,
function test
A = zeros(4);
for k = 1:7
p = randperm(4); % <-- This is the source of randomness
for ix = 1:4
A(p(ix),ix) = A(p(ix),ix) + 1; **..,please explain this step**
end
end
A = [A(:,1),zeros(4,1),A(:,2:4)]; % Insert a column of four zeros
A = [A(1:3,:);zeros(1,5);A(4,:)]; % Insert a row of five zeros
A(1,1) = 0; A(3,3) = 0; A(5,5) = 0; % Set non-zero diagonal elements to 0
disp(A);
end
1 comentario
Roger Stafford
el 20 de Ag. de 2014
Editada: Roger Stafford
el 20 de Ag. de 2014
You've changed your question, Reshdev. That last step reduces the first, third, and fifth diagonal elements in A to zero. Since they are on the diagonal, that reduces each of the corresponding row and column sums by the same amounts and leaves them still equal as you requested.
Respuesta aceptada
Más respuestas (1)
Roger Stafford
el 20 de Ag. de 2014
If you prefer vectorized solutions, I could just as well have put the solution in this form:
[~,p] = sort(rand(4,7));
A = accumarray([reshape(p+(p>3),[],1),repmat([1,3:5]',7,1)],1);
A(1:12:end) = 0;
Categorías
Más información sobre Operating on Diagonal Matrices en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!