How can I convert A matrix to B matrix below?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I want to convert
A=[a11 a12 a13;
a22 a22 a23;
a31 a32 a33]
to
B=[a11 a11 a11;
a11 a22 a22;
a11 a22 a33]
Thank you!
0 commentaires
Réponse acceptée
Plus de réponses (4)
Image Analyst
le 18 Mar 2014
Try it this way:
% This robust code works even if A is not square.
A = randi(99, 7,10) % Sample data.
B = A; % Initialize.
for k = 1 : min(size(A)) % Go only as far as we can.
B((k+1):end, k) = A(k,k); % Send value down along column.
B(k, (k+1):end) = A(k,k); % Send value along row to the right.
end
B % Print out to command window.
3 commentaires
Image Analyst
le 21 Mar 2014
That would have been good to state at the start, though it doesn't really matter to the code whether the off diagonals are zero or not. The code still works. Here's proof, where I make A a diagonal matrix:
% Now, do again for A being diagonal:
numberOfRows = 7;
A = randi(99, numberOfRows, numberOfRows) % Sample data.
A = A .* eye(numberOfRows) % Zero out everything except the diagonal.
B = A; % Initialize.
for k = 1 : min(size(A)) % Go only as far as we can.
B((k+1):end, k) = A(k,k); % Send value down along column.
B(k, (k+1):end) = A(k,k); % Send value along row to the right.
end
B % Print out to command window.
A =
31 0 0 0 0 0 0
0 45 0 0 0 0 0
0 0 8 0 0 0 0
0 0 0 9 0 0 0
0 0 0 0 15 0 0
0 0 0 0 0 35 0
0 0 0 0 0 0 42
B =
31 31 31 31 31 31 31
31 45 45 45 45 45 45
31 45 8 8 8 8 8
31 45 8 9 9 9 9
31 45 8 9 15 15 15
31 45 8 9 15 35 35
31 45 8 9 15 35 42
Not sure what you meant by the matrix remaining the same. Obviously B is not the same as A and is what you wanted. And is exactly the same output as what Jos's code produces so I'm puzzled as to why you say mine didn't give the results you wanted but Jos's does. So it works fine. But whatever, if the cumsum method is easier for you, then fine.
Joseph Cheng
le 18 Mar 2014
Modifié(e) : Joseph Cheng
le 18 Mar 2014
Pretty much how you just typed it?
B = [A(1,1) A(1,1) A(1,1);...
A(1,1) A(2,2) A(2,2);...
A(1,1) A(2,2) A(3,3)];
or is there more to your question?
Andrei Bobrov
le 21 Mar 2014
Modifié(e) : Andrei Bobrov
le 21 Mar 2014
z = diag(A);
ii = 1:numel(z);
B = z(bsxfun(@min,ii,ii'));
0 commentaires
Voir également
Catégories
En savoir plus sur Matrices and Arrays dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!