我有2个向量和一个标量:
grid
即(N x 1); Value
即(N x 1); sval
,即(1,1); 如果我想在sval
上插入grid
,我知道我可以这样做:
intervalue = interp1(grid, Value, sval, 'PCHIP');
如果现在我想要衍生物,即函数Value
在特定点sval
的斜率怎么办?
答案 0 :(得分:4)
正如评论中所述,您可以通过forward finite difference近似来近似导数:
slope = diff(Value) ./ diff(grid);
可替换地:
slope = gradient(Value(1:end-1),grid);
这是numerical differentiation的简单方法。有关MATALB中数值区分的详细指南,请参阅this answer。
以下是具有所需插值的有限差分方法的示例:
% Define function y = x^3
grid = 1:100;
Value = grid .^ 3;
% Approximate derivative via the local slope
slope = diff(Value) ./ diff(grid);
% Or: slope = gradient(Value(1:end-1),grid);
slope_grid = grid(1:end-1);
% Interpolate derivative
sval = 33.5;
sval_slope = interp1(slope_grid, slope, sval, 'PCHIP');
我们可以看到结果:
figure;
plot(grid, 3*grid.^2)
hold on
plot(slope_grid, slope)
legend('Reference', 'Approximation', 'Location', 'NorthWest')