How to differentiate a piecewise function?

26 Ansichten (letzte 30 Tage)
ahed salman
ahed salman am 7 Jul. 2018
Kommentiert: ahed salman am 7 Jul. 2018
Hi to all. I have a piecewise function and I want to differentiate it but the derivative will not exist at endpoints. I tried to interpolate it such that the edges are more smooth and the derivative is continuous, but when I plot it, I still get the harsh edges. What to do now? This is my code:
t=0:60;
L =(15-t/2).*(t>=0 & t<=20)+...
(5).*(t>20 & t<=40 )+(-15+t/2).*(t>40 & t<=60 );
P=interp1(t,L,'pchip');
hold on
plot (t,P,'linewidth',4)
xlim([0 70])
ylim([0 20])

Akzeptierte Antwort

Image Analyst
Image Analyst am 7 Jul. 2018
Since you know the formula, you have an advantage - you can just use the known derivative:
t=0:60;
L =(15-t/2).*(t>=0 & t<=20)+...
(5).*(t>20 & t<=40 )+(-15+t/2).*(t>40 & t<=60 );
P=interp1(t,L,'pchip');
% Plot L vs. t
subplot(3, 1, 1);
plot (t, L, 'LineWidth', 4)
xlim([0 70])
ylim([0 20])
grid on;
xlabel('t', 'FontSize', 20);
ylabel('L', 'FontSize', 20);
% Plot P vs. t
subplot(3, 1, 2);
plot (t, P, 'LineWidth', 4)
xlim([0 70])
ylim([0 20])
grid on;
xlabel('t', 'FontSize', 20);
ylabel('P', 'FontSize', 20);
% Since we know the formula and when it starts and stops each piece
% we can compute the derivative analytically:
dLdt = zeros(1,length(L));
range1 = t>=0 & t<=20;
dLdt(range1) = -0.5;
range2 = t>40 & t<=60;
dLdt(range2) = 0.5;
% Plot dLdt vs. t
subplot(3, 1, 3);
plot (t, dLdt, 'b^-', 'LineWidth', 2)
xlim([0 70])
grid on;
xlabel('t', 'FontSize', 20);
ylabel('dLdt', 'FontSize', 20);
ax = gca;
ax.XAxisLocation = 'origin';

Weitere Antworten (0)

Kategorien

Mehr zu Interpolation finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by