Locating point on x-axis where the slope is decreasing
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Tessa Kol
le 10 Mar 2021
Commenté : Star Strider
le 10 Mar 2021
Dear all,
I used the following code to plot the angle over time:
figure
hold on
grid on
plot(Time, theta,'linewidth',1.5)
xlabel('Time [s]','FontWeight','bold')
ylabel('\theta [deg]','FontWeight','bold')
xlim([0 round(Time(end))])
legend('Opening angle','Location','northeast')
title('Opening angle')
The resulting graph is shown below. I want to index at what time the slope is decreasing. How can I do that?
The variables Time and theta to plot this graph can be found in the data.mat file.
0 commentaires
Réponse acceptée
Star Strider
le 10 Mar 2021
A reasonably robust way is to use the ischange function:
D = load('data.mat');
Time = D.Time;
theta = D.theta;
[TF,m,b] = ischange(theta, 'linear', 'Threshold',5);
chgpts = [find(TF); m(TF); b(TF)].';
chgidx = find(chgpts(:,2)<0,1);
figure
plot(Time, theta,'linewidth',1.5)
hold on
plot(Time(chgpts(chgidx(:,1))), theta(chgpts(chgidx(:,1))), 'xr')
hold off
grid on
xlabel('Time [s]','FontWeight','bold')
ylabel('\theta [deg]','FontWeight','bold')
xlim([0 round(Time(end))])
legend('Opening angle','Location','northeast')
title('Opening angle')
producing:
The ‘Time’ value is then:
ChangePointTime = Time(chgpts(chgidx(:,1)));
that here is 6.01 seconds.
4 commentaires
Plus de réponses (1)
Sargondjani
le 10 Mar 2021
Bascially you want to get the index when the change in theta becomes negative:
dtheta = diff(theta);
index = find(dtheta<0,1);%the 1 refers to the first entry where the statement is true
0 commentaires
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!