Borrar filtros
Borrar filtros

find first time where data crosses 1

31 visualizaciones (últimos 30 días)
Benjamin
Benjamin el 11 de Abr. de 2019
Comentada: Mark Sherstan el 11 de Abr. de 2019
I have data stored in variables r and f. At some point the variable f goes above 1. How can I return the value of r the FIRST time f goes above 1? Interpolation of the r-value to find where f goes above 1 may be needed to be more precise. Any help would be greatly appreciated!

Respuestas (2)

Mark Sherstan
Mark Sherstan el 11 de Abr. de 2019
This example should help you with your data set
x = -2*pi:pi/12:2*pi;
y = 2*sin(x);
idx = find(y>1);
solution = idx(1)
fprintf("Solution at index %0.0f, x = %0.2f, y = %0.2f\n",solution,x(solution),y(solution))
figure(1)
hold on
plot(x,y)
plot(x(solution),y(solution),'*r')
  2 comentarios
Benjamin
Benjamin el 11 de Abr. de 2019
Editada: Benjamin el 11 de Abr. de 2019
Does this actually interpolate though? I have this:
ix = find(y > 1, 1, 'first');
ix_r(count) = r(:,ix);
ix_r = ix_r';
but the problem is that it just returns r for when f exceeds the threshold of 1. How can I interpolate to find exactly where it would cross 1? then interpolate r
Mark Sherstan
Mark Sherstan el 11 de Abr. de 2019
You can use the built in function interp1 as you have a region of interest.

Iniciar sesión para comentar.


Star Strider
Star Strider el 11 de Abr. de 2019
I created ‘zci’ to do just that:
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0); % Returns Approximate Zero-Crossing Indices Of Argument Vector
Then either use the interp1 function to do the interpolation, or create your own linear interpolation function:
x = 0:0.2:5; % Create Data
y = x.^2 - rand(size(x))*5; % Create Data
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0); % Returns Approximate Zero-Crossing Indices Of Argument Vector
yzi = zci(y-1);
lintrp = [[x(yzi(1));x(yzi(1)+1)] ones(2,1)] \ [y(yzi(1));y(yzi(1)+1)] % Linear Interpolation
xint = (1-lintrp(2))/lintrp(1); % y=1 X-Value
figure
plot(x, y, xint, 1, '+')
grid
Experiment to get the result you want.

Categorías

Más información sobre Interpolation en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by