finding the slope of each segement in a fitted curve

2 views (last 30 days)
having the following plot,
Is there a method that would allow me to find the slope of each segment in this plot or at least, how I cann retrieve the x , y coordinates for the points on the plot so I can use them to find the slope?
attached is the data I am fitting, the x coordinate is GDALT variable and the y coordinate is the NE variabel. I used the curve fitting toolbox to generate this plot.
Salma fathi
Salma fathi on 14 Apr 2022
Edited: Salma fathi on 14 Apr 2022
Thank you for your reply, I believe I can do that also by using interpolating via 'cubic spline' instead of 'linear' in the curve fitting toolbox and it would give the same result right?
But I am still not sure how this will help me in finding the slope at the indicated points in the plot...

Sign in to comment.

Accepted Answer

Chunru on 14 Apr 2022
T = readtable('');
idx = isnan(T.NE);
T(idx, :) = [];
x = T.GDALT;
y = T.NE;
plot(x, y, 'o-')
% The slope for each segment
slope = diff(y)./diff(x)
slope = 15×1
1.0e+10 * 0.1733 0.4733 1.0267 1.1600 0.8067 0.3600 -0.1067 -0.3467 -0.4267 -0.4267

More Answers (1)

Akira Agata
Akira Agata on 14 Apr 2022
By applying interpolation, you can decrease and, as a result, the deviation will be more accurate.
The following is an example.
BTW, you don't need to use Curve Fitting Toolbox for interpolation. The function interp1 is in the basic MATLAB.
T = readtable('');
idx = isnan(T.NE);
T(idx, :) = [];
x = linspace(T.GDALT(1), T.GDALT(end));
y = interp1(T.GDALT, T.NE, x, 'spline');
dy = diff(y)/uniquetol(diff(x));
yyaxis left
plot(T.GDALT, T.NE, 'bo')
hold on
plot(x, y, 'b-')
yyaxis right
ylabel('\Delta GDALT / \Delta NE')
legend({'Original', 'Smoothed', 'Slope'})
  1 Comment
Salma fathi
Salma fathi on 14 Apr 2022
Thank you for the great explanation, I have a better understanding now. Much appreciated.

Sign in to comment.




Community Treasure Hunt

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

Start Hunting!