# for loop in an array to substract the values of the array and find a specific value

1 view (last 30 days)
Jose Rego Terol on 1 Feb 2020
Commented: Image Analyst on 2 Feb 2020
I have an array of 200 values. This is the operation I need to program:
The value in the position X minus the value in the position Y EQUALS 0.55. Therefore, I am using a for loop and If statement.
The problem is that I know neither value nor the position of each value. I guess both of them are in the first 50 values of the array. So, how can I code the operation below n times (k-1, k-2, k-3 ...) until I got this number, and disp the 'Here'?
I;
for k =length (I)
x=I(k)-I %Take last value and substract the first value of I, second, k times to the last value.
if x==0.55
disp 'Here'
else
disp 'Not here'
end
end

Guillaume on 1 Feb 2020
Edited: Guillaume on 1 Feb 2020
If you are trying to find the indices X and Y for which I(X) - I(Y) is equal to a given values, this is easily done without a loop with:
[X, Y] = find(I - I.' == seachvalue); %I must be a vector
This will returrn all the XY pairs that match.
Image Analyst on 2 Feb 2020
round() can round the number(s) to any number of decimal points that you want.

Subhadeep Koley on 1 Feb 2020
Try this.
for k = 2:length(I)
x = I(k) - I(k-1);
if x == 0.55
disp('Here');
else
disp 'Not here'
end
end
Jose Rego Terol on 1 Feb 2020
Is not here, but let me ask you what is it doing?
k = 2:length(I)
From the second value to the last.
x = I(k) - I(k-1);
x= the second value - the first one, then the third value - the second one. Is that right?
What happen if the operation is,i.e., the value at the 40 % of the length of the array minus the 20 % of the length of the array? How can I code, try first the sequence you said, then take the 3rd value (k=3:length(I)). When finish, take the third value and substract the first value.
I think it is completely insane for Matlab.

Image Analyst on 1 Feb 2020
Edited: Image Analyst on 1 Feb 2020
First of all read the FAQ : Click here to learn why you shouldn't use == to compare floating point values. You should use ismembertol():
x = zeros(size(I));
for k = 1 : length(I)
% Take last value and substract the first value of I, second, k times to the last value.
% I have no idea what the above means but let's subtract I(1) and see
x(k) = I(k) - I(1);
if ismembertol(x(k), 0.55, 0.004)
fprintf(' ----> Found a match at index %d where I(%d) = %f and x = %f.\n', k, k, I(k), x);
break; % Let's quit when we find a match.
else
fprintf('Found no match at index %d where I(%d) = %f and x = %f.\n', k, k, I(k), x(k));
end
end
histogram(x);
Jose Rego Terol on 1 Feb 2020
I want to continue this operation taking the next value in the case the result is not equal to 0.55.
Do you understand?