
How to differentiate a piecewise function?
26 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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])
0 Kommentare
Akzeptierte Antwort
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)
Siehe auch
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!