How to use find here?

1 view (last 30 days)
Ghazal Hnr
Ghazal Hnr on 9 Jul 2017
Edited: Ghazal Hnr on 9 Jul 2017
Hi, I have the points of a curve. After I plot it, I want to find the points that the curve is on zero. I tried this code:
on1 = find(d_gsr == 0)
but matlab gave me this answer:
on1 =
Empty matrix: 1-by-0
Would anyone help me to do this?

Accepted Answer

Star Strider
Star Strider on 9 Jul 2017
If you want to find the zero-crossings, this little utility function will return the indices of the approximate zero-crossings of your data:
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0); % Returns Approximate Zero-Crossing Indices Of Argument Vector
Use it as:
zero_idx = zci(Your_Dependent_Data_Vector);
then to find the approximate values of your independent variable at those indices:
x_approx = Your_Independent_Data_Vector(zero_idx);
There might be a ‘false’ zero-crossing at the end of the ‘zero_idx’ vector. This is due to the wrap-around done by the circshift function. That index can be discarded.
  2 Comments
Ghazal Hnr
Ghazal Hnr on 9 Jul 2017
I really appreciate, your codes really help me.
Star Strider
Star Strider on 9 Jul 2017
As always, my pleasure.

Sign in to comment.

More Answers (2)

KSSV
KSSV on 9 Jul 2017
You define a small value and find the abs values less then or equal to this value. This is the approach to seek the values from flottants.
theps=0.0001 ;
on1 = find(abs(d_gsr) <= theeps);
  1 Comment
Ghazal Hnr
Ghazal Hnr on 9 Jul 2017
Edited: Ghazal Hnr on 9 Jul 2017
again it gives me the same answer

Sign in to comment.


Image Analyst
Image Analyst on 9 Jul 2017
Attach your data. Chances are there are no elements that have a pure zero as a value. I'm guessing that what you want is where your data points cross the y axis but there are actually no elements at that x location. For example if you have (x,y) = (4, 10), and the next element at (5, -3), a line connecting them will cross the y=0 line at some x value. And I'm guessing that you want the x value. But there is no element of your x array that has that value. So you'll need to find it using functions like fzero(), roots(), etc.
  4 Comments
Image Analyst
Image Analyst on 9 Jul 2017
Yes, that's one way. Or use interp1 on both x and y to get a bunch of points in between and then use the method KSSV showed you. This is a discrete approximation, which may well be close enough, rather than a theoretical/analytical answer like fzero() fill give, but for that you need to assume some model, like the "line" between points is a straight line or cubic spline, etc.
I didn't even go to the website because if you can't open the website and get the data from it, then I probably won't be able to either.
Ghazal Hnr
Ghazal Hnr on 9 Jul 2017
Edited: Ghazal Hnr on 9 Jul 2017
Sorry but I'm not able to open matlab website correctly, I've already downloaded the data.
Thank you for your help.

Sign in to comment.

Categories

Find more on Spline Postprocessing in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!