Asked by Jakub Nosek
on 6 Nov 2017

Hi, can I just ask you why the code below does not work? I am trying to subtract each value in a row from each other and if the condition is met then add 1 to matrix11(i,j). Apparently there's a problem with matrix10(i,:) expression.

matrix10=[1 7 20; 4 5 6; 7 8 9; 2 5 8];

[zk1, zk2] = size(matrix10);

matrix11=zeros(zk1,zk2);

for i=1:zk1

for j=1:zk2

if (abs(matrix10(i,j) - matrix10(i,:)) >= 2)

matrix11(i,j)=matrix11(i,j)+1;

end

end

end

matrix11 =

0 0 0

0 0 0

0 0 0

0 0 0

Answer by Kaushik Lakshminarasimhan
on 6 Nov 2017

The problem is with this expression in the if statement:

if abs(matrix10(i,j) - matrix10(i,:)) >= 2

The left hand side is a vector but right side is a scalar -- which means that the condition is only met if all 3 differences exceed 2. What is the actual condition you want to check? If it is whether the total sum of differences exceeds 2, then you need to change the statement to:

if sum(abs(matrix10(i,j) - matrix10(i,:))) >= 2

Or it could be something else depending on what your condition actually is.

Jakub Nosek
on 6 Nov 2017

Kaushik Lakshminarasimhan
on 6 Nov 2017

If matrix10 and matrix12 have the same number of columns, then you won't need an if statement.

You can do something like:

isTrue1 = (abs(matrix10(i,j) - matrix10(i,:)) >= 2);

isTrue2 = (abs(matrix12(i,j) - matrix12(i,:)) <= 5);

isTrue = (isTrue1 & isTrue2); % if both must be true

Jakub Nosek
on 6 Nov 2017

Great! Thanks a lot!!

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.