22 views (last 30 days)

Show older comments

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.

Star Strider
on 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.

Sargondjani
on 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

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

Start Hunting!