# How to find minimum value from loop using if function iteration?

5 views (last 30 days)
Anom Sulardi on 29 Jun 2020
I have a=6.5, I would like to define "if function" inside the "for loop", for i=1:10, it will do the loop imin < a < imax, and if the "if function" is correct, I would like to use the b= imin (in which the a function is correct).
My expectation toward the code is b=6. Since the 6.5 is in between number for loop 6 and 7. And I want to use 6 (imin where the a is in correct statemen for if function)
How do I code that in matlab?
a=6.5;
for i=1:10
imin=i;
imax=imin+1
if imin<a<imax
b=imin;
end
if imax==10;
end
end

Stephen Cobeldick on 29 Jun 2020
Anom Sulardi on 29 Jun 2020
Hi Stephen,
Thank you for the answer. But, how if in the case of hundred thousand. I can not use floor() function for it. Otherwise, I still need to use if function inside for loop, if it is possible?
For example:
From below code, I expect to have b value in 135, since a is between 135000 and 136000. and b=imin/dx=135.
a=135500;
dx=1000;
for i=1:10
imin=i*dx;
imax=imin+dx
if imin<a<imax
b=imin/dx;
end
if imax==10;
end
end

Stephen Cobeldick on 29 Jun 2020
>> a = 135500;
>> dx = 1000;
>> b = floor(a/dx)
b = 135

Show 1 older comment
Stephen Cobeldick on 29 Jun 2020
>> hh = [1.5, 5, 9.5, 16, 25, 37.5, 57.5, 95, 160, 250, 400, 600, 850, 1250, 2250];
>> z0 = 11.5;
>> KK = find(hh<=z0,1,'last')
KK = 3
Anom Sulardi on 29 Jun 2020
Hi Stephen,
Thank you so much. That's really help me a lot.
However, I have another problem. How can I indexing 4-D array matrix by using 2-d or 3-d array?
Let say, I want to index the 4-D matrix A with the A(3,5,7,10) and A(4,6,8,10). However, the first, second, and third array on indexing is exist inside the matrix a,b,c. Can matlab do this?
I try to use diag(C), but it doesn't work well.
A=rand(10,10,10,10);
a=[3;4];b=[5,6];c=[7,8];
C=A(a,b,c,10);
Stephen Cobeldick on 1 Jul 2020
Use sub2ind:
A = rand(10,10,10,10);
a = [3,4];
b = [5,6];
c = [7,8];
X = sub2ind(size(A),a,b,c,[10,10]);
C = A(X)

bharath pro on 29 Jun 2020
Edited: bharath pro on 29 Jun 2020

Instead of using imin<a<imax, try using an intersection of two commands for checking less than and greater than seperatly.

```a=6.5;
for i=1:10
imin=i;
imax=imin+1
if (imin<a)&&(a<imax)
b=imin;
end
if imax==10;
end
end
```

This will give the output as 6

#### 1 Comment

Anom Sulardi on 29 Jun 2020
thank you, it works really well.