Finding the slope after drawing a trend/linear fit

5 visualizaciones (últimos 30 días)
Reji G
Reji G el 16 de Nov. de 2023
Comentada: Star Strider el 17 de Nov. de 2023
I have an excel data. I want to find the slope after fitting a linear fit on it. In the attached plot, I manually drawn the fit line in black, I need the matlab code for it. So that the program will do it. I've attached my data too.

Respuesta aceptada

Star Strider
Star Strider el 16 de Nov. de 2023
Alternatively —
files = dir('*.xlsx');
T1 = readtable(files.name)
T1 = 5001×2 table
T x _______ ________ 0 0.04851 4e-06 0.051774 8e-06 0.050142 1.2e-05 0.04851 1.6e-05 0.04851 2e-05 0.050142 2.4e-05 0.050142 2.8e-05 0.050142 3.2e-05 0.050142 3.6e-05 0.050142 4e-05 0.050142 4.4e-05 0.051774 4.8e-05 0.04851 5.2e-05 0.051774 5.6e-05 0.051774 6e-05 0.050142
VN = T1.Properties.VariableNames;
T = T1.T;
x = T1.x;
[xmax,idx] = max(x);
idxrng = 1:idx;
DM = [T(idxrng) ones(size(x(idxrng)))]; % Design Matrix
B = DM \ x(idxrng) % Another Option Is 'polyfit'
B = 2×1
84.3962 0.0217
FitLine = DM * B; % Use 'polyval' With 'polyfit'
xr(1) = 0.004;
yr(1) = [xr 1] * B;
yr(2) = 0.2;
xr(2) = (yr(2)-B(2))/B(1);
figure
plot(T,x)
hold on
plot(T(idxrng), FitLine, '-k', 'LineWidth',3)
plot([1 1]*xr(1), [yr(1) yr(2)], '-r')
plot([xr(1) xr(2)], [1 1]*yr(2), '-r')
hold off
grid
xlabel(VN{1})
ylabel(VN{2})
text(xr(1), yr(2), sprintf('\\uparrow\nSlope = %.2f', B(1)), 'Horiz','left', 'Vert','top')
.
  4 comentarios
Reji G
Reji G el 17 de Nov. de 2023
I've updated excel sheet with required data. T is common. Plot T&w, T&x, T&y, T&z. I want to draw a fit in increasing direction in the positive half cycles(As shown in the previous diagram) and the slope between each fit lines drawn for T&w, T&x, T&y, T&z.
Star Strider
Star Strider el 17 de Nov. de 2023
If you want regression lines for the outset of each variable, this works —
files = dir('*.xlsx');
T1 = readtable(files.name)
T1 = 5001×5 table
T w x y z _______ ________ _________ __________ __________ 0 0.04851 -0.047776 -0.066858 0.0019753 4e-06 0.051774 -0.04288 -0.063591 0.00034241 8e-06 0.050142 -0.046144 -0.057056 0.0019753 1.2e-05 0.04851 -0.047776 -0.052155 0.00034241 1.6e-05 0.04851 -0.046144 -0.047254 0.0019753 2e-05 0.050142 -0.044512 -0.042353 0.0036082 2.4e-05 0.050142 -0.046144 -0.035819 0.0019753 2.8e-05 0.050142 -0.046144 -0.027651 0.0019753 3.2e-05 0.050142 -0.047776 -0.02275 0.0019753 3.6e-05 0.050142 -0.044512 -0.019483 0.00034241 4e-05 0.050142 -0.044512 -0.012948 0.00034241 4.4e-05 0.051774 -0.046144 -0.0047799 0.0019753 4.8e-05 0.04851 -0.046144 -0.0015127 0.0036082 5.2e-05 0.051774 -0.047776 0.0033882 0.0019753 5.6e-05 0.051774 -0.046144 0.0099227 0.00034241 6e-05 0.050142 -0.044512 0.018091 0.0052411
VN = T1.Properties.VariableNames;
T = T1.T;
figure
tiledlayout(2,2)
for k = 1:size(T1,2)-1
nexttile
v = T1{:,k+1};
plot(T, v)
grid
title(VN{k+1})
[vmax,idx] = max(v);
idxrng = 1:idx;
DM = [T(idxrng) ones(size(T(idxrng)))]; % Design Matrix
B = DM \ v(idxrng); % Another Option Is 'polyfit'
FitLine = DM * B; % Use 'polyval' With 'polyfit'
hold on
plot(T(idxrng), FitLine, '-k', 'LineWidth',3)
hold off
xlabel(VN{1})
ylabel(VN{k+1})
text(mean(xlim), 0.9*max(ylim), sprintf('Regression Line Slope = %.3f',B(1)), 'Horiz','center', 'Vert','top')
end
The regression lines do not connect the first and first maximum points in all variables because they are fitting all the data between those points. If you want something else, plese be specific.
.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Curve Fitting Toolbox en Help Center y File Exchange.

Productos


Versión

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by