How to find the indices of a point on a curve

10 vues (au cours des 30 derniers jours)
yousef Yousef
yousef Yousef le 28 Oct 2015
Commenté : dpb le 5 Nov 2015
Hi I have a curve with one maximum,I need to find the indices of the the two 0.707 points. Thanks

Réponses (3)

dpb
dpb le 28 Oct 2015
If you have the curve as computed points, see
doc interp1
Switch the normal X,Y meanings to interpolate with Y as the independent variable instead of X in this case. Also, NB: You'll need to do this in two separate calls, one with the values to the left and another with those to the right of the maximum as interp1 must have unique values for the interpolating function.
This will solve for the precise location; not necessarily integer. If you want the nearest index, then either a) round the above results or b) use
[~,ix]=min(abs(y-sqrt(2)/2*ymax));
Again you'll have to do the above piecewise accounting for the length of the subvectors in the returned indices as there's no guarantee the locations will be symmetric or the same on both sides except under very particular circumstances.
  3 commentaires
dpb
dpb le 28 Oct 2015
Well, I don't know what form your data are in...
yousef Yousef
yousef Yousef le 29 Oct 2015
Hi My data is in the form of vector

Connectez-vous pour commenter.


Thorsten
Thorsten le 29 Oct 2015
Modifié(e) : Thorsten le 29 Oct 2015
If y is your curve, in general you will not have values that are exactly 0.707 of your maximum. So the idea is to use the 2 values that differ the least from the desired value 0.707*max(y):
[~, idx] = sort(abs(y-0.707*max(y)));
idx = idx(1:2);
  4 commentaires
yousef Yousef
yousef Yousef le 29 Oct 2015
I have got 64 and 96
Thorsten
Thorsten le 29 Oct 2015
Modifié(e) : Thorsten le 29 Oct 2015
I see. These are the index values into your x. So if you have
x = -90:0.5:90;
x707 = x(idx)
x([64 96])
ans =
-58.50 -42.50
Note that I figured out x=-90:0.5:90 by eye and trial and error from your plot. You have to use the actual values of x of course.

Connectez-vous pour commenter.


yousef Yousef
yousef Yousef le 5 Nov 2015
clear all clc Angle=[5 10 20 60 180 190 195 300 305]; collision=[]; for i=1:length(Angle)-1 d=[]; targetValue = Angle(i); tolerance = 5; diff = abs(Angle-targetValue); tt=find(diff>0 & diff <= tolerance);
if ( tt>0) d=[d 2]; else d=[d 1]; end collision=[collision;d]; end
  1 commentaire
dpb
dpb le 5 Nov 2015
Use the {} Code button to format your code.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Interpolation dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by