How to only perform the upper triangular part of matrix operations?
Hi all,
I'm trying to solve this problem, where I have to use a nested loop like this:
clear; clc; demo = zeros(4, 4); indj = 1; for l = 1:2
for j = 1:2
indi = 1;for k = 1:2
for i = 1:2
disp([indi, indj])
demo(indi, indj) = 1;
indi = indi + 1;end
end
indj = indj + 1;
end
endIn this code, i, j, k, l each has 2 operations, thus total number of operations is 2^4 = 16. A 4 by 4 matrix 'demo' is filled by these 16 operations (each operation is represented by 'demo(indi, indj) = 1;'), while indi and indj are used to indicate the coordinate of these operations. 'demo' is a 4 by 4 matrix made of 1s.
>> demo
demo =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
Now in my problem, because 'demo' is symmetric along the main diagonal, I'm trying to only compute the upper triangular part of 'demo' to save cost, i.e. I want 'demo' to be like:
>> demo
demo =
1 1 1 1
0 1 1 1
0 0 1 1
0 0 0 1
while the form of using i, j, k, l cannot be changed. I tried the following (only change to k = l:2 and i = j:2):
clear; clc; demo = zeros(4, 4); indj = 1; for l = 1:2
for j = 1:2
indi = 1;for k = l:2
for i = j:2
disp([indi, indj])
demo(indi, indj) = 1;
indi = indi + 1;end
end
indj = indj + 1;
end
endIt doesn't work. Any ideas?
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Operating on Diagonal Matrices dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!