Strange slope for points in a curve

1 visualización (últimos 30 días)
Kyle
Kyle el 3 de Oct. de 2014
Comentada: Mohammad Abouali el 3 de Oct. de 2014
Dear experts, I want to get the slope for each point from the curve defined below:
x = 1194:1206;
y =[114,115,117,118,119,120,122,123,124,126,127,128,129];
see the attached graph for the curve.
Directly applying the function "gradient" cannt get the correct slope - the slope will jump up an down. It's understandable that I don't have enough data points. I expect the slope changes gradually.
I expect not to use any interpretation or curve fitting method. Any suggestion is welcome. Many thanks

Respuesta aceptada

Mohammad Abouali
Mohammad Abouali el 3 de Oct. de 2014
There are two slopes at each point. The left slope and right slope? What you want to do about that?
  2 comentarios
Kyle
Kyle el 3 de Oct. de 2014
could you please suggest to calculate the right slope?
Mohammad Abouali
Mohammad Abouali el 3 de Oct. de 2014
It gonna still jumps up and down since your lines are not straight any way.
If you want first order accurate first derivatives do this
x = 1194:1206;
y =[114,115,117,118,119,120,122,123,124,126,127,128,129];
dYO1=(y(2:end)-y(1:end-1))./(x(2:end)-x(1:end-1)); % Or in this case it would be the same as diff(y);
figure, plot(x(1:end-1),dYO1,'o-');
You can calculate second order accurate first derivative as follow:
dYO2=(y(3:end)-y(1:end-2))./(x(3:end)-x(1:end-2));
figure, plot(x(2:end-1),dYO2,'ro-')
if you want the slope of the lines themselves (i.e. at the middle of the line) then dYO1 would be the accurate one ( at the center of the lines not at the point themselves)
xc=0.5*(x(1:end-1)+x(2:end));
plot(xc,dYo1);

Iniciar sesión para comentar.

Más respuestas (1)

Matt J
Matt J el 3 de Oct. de 2014
Editada: Matt J el 3 de Oct. de 2014
You cannot define a derivative without some sort of interpolation model. You can take first differences using diff(y), but that corresponds to a linear interpolation model.
  2 comentarios
Kyle
Kyle el 3 de Oct. de 2014
I tried using spline() function. Although it enhances the smoothness, the slope vs x still jumps up and down :(
Matt J
Matt J el 3 de Oct. de 2014
The slope is obviously going to jump up and down no matter what you do. Your points don't all lie on a straight line.

Iniciar sesión para comentar.

Categorías

Más información sobre Smoothing 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