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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Titus Edelhofer
Titus Edelhofer am 15 Apr. 2015
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 Kommentar

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))

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Adam
Adam am 15 Apr. 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 Kommentar

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

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Data Type Identification finden Sie in Hilfe-Center und File Exchange

Produkte

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by