finding turning points of a dataset
Mostrar comentarios más antiguos
Dear all, I hope somebody can help me with the following problem: I have a vector of x. The numbers within this vector (1-n) change at a very slow rate (the difference between data points is too small). So you can not say when numbers really increase or decrease. However I can see that at some points the rate of change is getting faster which is in my case a real turning point. How can I check when changes between data points start accelerating? I hope I am clear enough. I really appreciate your help. Sobhan
2 comentarios
Image Analyst
el 3 de Mayo de 2012
Please upload a plot diagram of your data somewhere so we can see what it looks like.
Sobhan
el 4 de Mayo de 2012
Respuesta aceptada
Más respuestas (4)
Richard Brown
el 3 de Mayo de 2012
Editada: Richard Brown
el 3 de Nov. de 2012
Why don't you look for local maxima of curvature? This way you don't have to define any subjective tolerances. You may need to smooth your data first to make sure the finite difference derivative approximations work cleanly though.
To keep it simple, I'll assume your independent variable is evenly spaced and use a simple example (decaying exponential). We want to find the "knee"
dt = 0.01;
t = 0:dt:1;
y = exp(-10*t);
Compute first and second derivatives by finite differencing (centred)
yp = nan(size(y));
ypp = nan(size(y));
yp(2:end-1) = (y(3:end) - y(1:end-2))/(2*dt);
ypp(2:end-1) = (y(3:end) + y(1:end-2) - 2*y(2:end-1)) / (dt^2);
Compute the curvature
k = abs(ypp) ./ (1 + yp.^2).^1.5
Find the maximum and plot it on the curve. You could easily adapt this to find local maxima of k, etc.
[kmax, idx] = max(k);
plot(t, y, 'b', t(idx), y(idx), 'ro')
Also of interest to plot the curvature
figure()
plot(t, k)
edit: fixed wrong indices in plot command
2 comentarios
Nick
el 30 de Oct. de 2012
The first plot statement uses the wrong indices for t and y. It should be:
plot(t, y, 'b', t(idx), y(idx), 'ro')
Richard Brown
el 3 de Nov. de 2012
@Nick, thanks. fixed now
Sargondjani
el 1 de Mayo de 2012
0 votos
take the difference between each two points in the vector (use 'diff')
evaluate if these numbers 'grow faster'. Im not sure what your criterium is here. If you specify that, somebody might be able to help you further
2 comentarios
Sobhan
el 2 de Mayo de 2012
Sargondjani
el 2 de Mayo de 2012
my problem was that i dont know what your definition of acceleration is...
i mean, you say that the differences between points is too small to directly tell when there is change. this implies that some points are numerically EXACTLY the same and some are not. that means there is some sort of acceleration before your turning point as well
so you need to be more specific about what acceleration is...
Sobhan
el 4 de Mayo de 2012
0 votos
Masoud Hosseiny
el 29 de Jun. de 2018
0 votos
Hi. you can calculate the differential of data set and plot it at the same time.
1 comentario
Kriti Modi
el 3 de Jul. de 2018
Even I have similar kind of data set and wondering I need to do complex stuff or if i can find it with simple maths. Explaining it here. I have a data set about part number and I want to divide the data set in three category low , medium and high or may be one more. I could see it visually in the graph but this data set is always changing. I want to automate the process mathematically to find these points every time data is changing. I think I need to see maximum rate of change? Is there any way to find it?
Categorías
Más información sobre Linear Predictive Coding en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!