using the find function to find intersection of two lines

1 回表示 (過去 30 日間)
shobhit mehrotra
shobhit mehrotra 2015 年 4 月 15 日
コメント済み: Renato Agurto 2015 年 4 月 16 日
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 件のコメント
Renato Agurto
Renato Agurto 2015 年 4 月 15 日
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?
shobhit mehrotra
shobhit mehrotra 2015 年 4 月 16 日
Yes every time it crosses 18 so the answer would be 2 & 10

サインインしてコメントする。

採用された回答

Titus Edelhofer
Titus Edelhofer 2015 年 4 月 15 日
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 件のコメント
Renato Agurto
Renato Agurto 2015 年 4 月 16 日
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))

サインインしてコメントする。

その他の回答 (1 件)

Adam
Adam 2015 年 4 月 15 日
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 件のコメント
Titus Edelhofer
Titus Edelhofer 2015 年 4 月 15 日
That's better than mine, because my code always selects the point to the left, Adam's picks the one that's nearer ...

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

タグ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by