using the find function to find intersection of two lines

Hi,
I have a vector A :
A = [ 10 20 30 40 50 60 50 40 30 20 10]
I want to find the nearest index where it crosses 18, so in this case it would be 2 and 10.
AA = find(A=18)
Thanks!

2 comentarios

Do you want to find the index for every time it crosses 18:
for example if
A = [10 20 30 40 50 60 50 40 30 21 10]
the answer would still be 2 and 10... or just 2?
Yes every time it crosses 18 so the answer would be 2 & 10

Iniciar sesión para comentar.

 Respuesta aceptada

Hi,
you are looking for sign changes of A-18:
find((A(2:end)-18).*(A(1:end-1)-18) < 0)
Hope this helps,
Titus

1 comentario

I just want to complement the answer, so the right index is shown if is nearer as the left:
tmp = find((A(2:end)-18).*(A(1:end-1)-18) < 0)
B = tmp + (abs(A(tmp) - 18) > abs(A(tmp+1)-18))

Iniciar sesión para comentar.

Más respuestas (1)

Adam
Adam el 15 de Abr. de 2015
find( A == 18 + min( abs( A - 18 ) ) )
is a one-liner to do what you want. Personally I would probably do it as multiple lines, but the idea is the same.

1 comentario

That's better than mine, because my code always selects the point to the left, Adam's picks the one that's nearer ...

Iniciar sesión para comentar.

Categorías

Productos

Etiquetas

Preguntada:

el 15 de Abr. de 2015

Comentada:

el 16 de Abr. de 2015

Community Treasure Hunt

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

Start Hunting!

Translated by