find for sign changes
103 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Kugen Raj
am 17 Mär. 2012
Kommentiert: Walter Roberson
am 4 Mär. 2021
Columns 49 through 56
0.8710 0.9483 1.0408 1.1538 1.2956 1.4796 1.7292 2.0885
Columns 57 through 64
2.6538 3.6815 6.1847 119.1838 -118.8424 -5.8436 -3.3407 -2.3137
Above is part of my results. I need to find for value that changes from positive to negative. In the above data, after 119.1838(column 60) the -118.8424(column 61) appears. I need to find this value. Hoe can I do this?
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 17 Mär. 2012
find(x(1:end-1)>0 & x(2:end) < 0)
Another approach that might be close enough for your purposes:
find(diff(x>=0),1)
4 Kommentare
Jan
am 18 Mär. 2012
But what happens with your first approach for [1, 0, -1]?
The OP must decide this detail.
Walter Roberson
am 18 Mär. 2012
In the case of [1, 0, -1] there is no position at which the value is positive and the next value is negative :)
Weitere Antworten (3)
Jan
am 17 Mär. 2012
Walter's method detects multiple sign changes also. This finds the first negative number only, but this meets your problem description also:
index = find(x < 0, 1, 'first')
0 Kommentare
Rasmus Herlo
am 22 Jan. 2020
Bearbeitet: Rasmus Herlo
am 22 Jan. 2020
Finding any place where the sign changes, either from neg to pos or from pos to neg could also be done in general by this:
Idx_Change = sort([strfind(x>=0, [0 1]) strfind(x>=0, [1 0])]);
1 Kommentar
Alireza Ahani
am 4 Mär. 2021
@Walter Roberson is right,
but when I checked with a dataset that includes zero-down-crosing event, they would be ignored, so I added some lines to his:
ZDCI = find(x(1:end-1)>0 & x(2:end) < 0); % zero down crossing index
Zero_indx = find(x == 0);
k = find( x(Zero_indx-1) > 0);
ZDCI = sort([ZDCI Zero_indx(k)]);
1 Kommentar
Walter Roberson
am 4 Mär. 2021
If the task is zero down crossing and zeros can be encountered, then the above code is not correct, as it does not take into account multiple zeros. For example for zero down crossing, you might have +1 followed by 5 zeros, followed by -1. The zeros could, for example, be present due to filtering of values that were close to zero, such as due to measurement noise on a sigmoid that crossed zero. Detection for such cases cannot be restricted to any fixed finite number of look-back.
Siehe auch
Kategorien
Mehr zu Get Started with MATLAB finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!