Derivative of piecewise polynomial using ppval
37 次查看(过去 30 天)
显示 更早的评论
I have a problem about derivative of piecewise polynomial. Here is my code
function y=ppval_drv(pp,x,deriv)
%x=0:10;
%y=f(x);
%xx=linspace(0,10,200);
y=f(x);
pp=spline(x,y);
t=pp.coefs;
[m n]=size(t);
d=[n-deriv:-1:1;ones(deriv-1,n-deriv)];
d=cumsum(d,1);
d=prod(d,1);
I don't know what to do next. Can anyone give me a hint for this one? Thanks
0 个评论
采纳的回答
John D'Errico
2016-3-31
编辑:John D'Errico
2016-4-5
For a cubic spline, a derivative is actually pretty easy to do, as just a matrix multiply. (For that matter any order spline in a pp form is trivial to differentiate.)
% pd is the polynomial degree of the polynomial segments,
% so for a spline created by spline, we have pd=3.
pd = 3;
D = diag(pd:-1:1,1);
% given deriv as the order of the derivative to compute
% just loop
for i = 1:deriv
pp.coefs = pp.coefs*D;
end
Untested code, but it should work.
2 个评论
Dimitry Chuprakov
2021-7-29
Here is the path to correct ppder version for taking derivative of any piecewise polynomial including PCHIP.
Jon
2021-10-20
Inspired approach! I love its simplicity just using a single matrix multiply. I think you were aiming for clarifying the approach here, but, I think you actually could even further vectorize it using
pp.coefs = pp.coefs*D^deriv
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!