Strange slope for points in a curve
1 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
Mohammad Abouali
2014-10-3
There are two slopes at each point. The left slope and right slope? What you want to do about that?
2 个评论
Mohammad Abouali
2014-10-3
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);
更多回答(1 个)
Matt J
2014-10-3
编辑:Matt J
2014-10-3
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 个评论
Matt J
2014-10-3
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Smoothing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!