以数字方式获得衍生

时间:2017-03-05 20:10:23

标签: matlab interpolation derivative

我有2个向量和一个标量:

  • grid即(N x 1);
  • Value即(N x 1);
  • sval,即(1,1);

如果我想在sval上插入grid,我知道我可以这样做:

intervalue = interp1(grid, Value, sval, 'PCHIP');

如果现在我想要衍生物,即函数Value在特定点sval的斜率怎么办?

1 个答案:

答案 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')

enter image description here