# Question about array alternating between positive and negative

6 ビュー (過去 30 日間)
William Fantin 2019 年 5 月 15 日
コメント済み: James Tursa 2019 年 5 月 15 日
Hello,
I have solved a differential equation symbolically and then evaulated it based on user input. The result is different every time. Each time I obtain an array from the graph. For example, lets say I get an array, a=[-1,1,2,-2,1,5,-4,1]. Is there a way to find out how many times the sign of an array changes from positive to negative? The reason I am trying to do this is I need to know how many times the curve crosses the origin.
Thanks!

#### 0 件のコメント

サインイン to comment.

### 採用された回答

James Tursa 2019 年 5 月 15 日

Seems like there should be a shorter way, but assuming you are looking for all 0 crossings and not just the positive to negative ones:
sum(logical(diff(sign(a))))
This will double book the exact 0's, however. So if you expect you might get those, you will need something more sophisticated.

#### 2 件のコメント

William Fantin 2019 年 5 月 15 日
IT WORKED!!!! THANK YOU!!! i had sunusoidal motion about the x-axis and it crossed 6 times and your method gave me 6! what did you mean it wont exactly count zeros correctly?
THanks again
James Tursa 2019 年 5 月 15 日
E.g.,
>> a = [-2 -3 0 1 2 -3 5]
a =
-2 -3 0 1 2 -3 5
>> sum(logical(diff(sign(a))))
ans =
4
There's really only three 0 crossings, but the calculation above gave a result of 4. The 0 crossing from -3 --> 0 --> 1 got double booked because the sign changed twice even though it was only one crossing. So if you expect you might get exact 0's you will need a more sophisticated method to detect them and check for 0 crossings vs 0 peaks etc and adjust the answer accordingly.

サインイン to comment.

### その他の回答 (0 件)

サインイン してこの質問に回答します。

Translated by