Filter löschen
Filter löschen

How to only perform the upper triangular part of matrix operations?

5 Ansichten (letzte 30 Tage)

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?

Akzeptierte Antwort

James Tursa
James Tursa am 26 Apr. 2017
If you can't change the looping, then maybe just insert an if-test:
if( indi <= indj )
demo(indi, indj) = 1;
end
  1 Kommentar
Xh Du
Xh Du am 27 Apr. 2017
Thanks! This works! Notice that this needs to be inserted in the first piece of code in my original question.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Operating on Diagonal Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by