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 end
In 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 end
It doesn't work. Any ideas?
0 Commenti
Risposta accettata
Più risposte (0)
Vedere anche
Categorie
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!