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?

 채택된 답변

Walter Roberson
Walter Roberson 2012년 3월 17일

3 개 추천

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

Jan
Jan 2012년 3월 17일
"From positive" means >=0 instead of >0.
Walter Roberson
Walter Roberson 2012년 3월 18일
Wikipedia: "In mathematics, every real number other than zero is either positive or negative"
In other words, zero is not positive so "from positive" means >0
Jan
Jan 2012년 3월 18일
But what happens with your first approach for [1, 0, -1]?
The OP must decide this detail.
Walter Roberson
Walter Roberson 2012년 3월 18일
In the case of [1, 0, -1] there is no position at which the value is positive and the next value is negative :)

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

Jan
Jan 2012년 3월 17일

1 개 추천

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')
Rasmus Herlo
Rasmus Herlo 2020년 1월 22일
편집: Rasmus Herlo 2020년 1월 22일

0 개 추천

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])]);
Alireza Ahani
Alireza Ahani 2021년 3월 4일

0 개 추천

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

Walter Roberson
Walter Roberson 2021년 3월 4일
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.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Entering Commands에 대해 자세히 알아보기

제품

태그

질문:

2012년 3월 17일

댓글:

2021년 3월 4일

Community Treasure Hunt

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

Start Hunting!

Translated by