有没有一种简单的方法来计算数据给出的非线性函数的导数?
例如:
x = 1 / c(1000:1)
y = x^-1.5
ycs = cumsum(y)
plot (x, ycs, log="xy")
如何从“x”和“ycs”给出的函数计算导数函数?
有没有一种简单的方法来计算数据给出的非线性函数的导数?
例如:
x = 1 / c(1000:1)
y = x^-1.5
ycs = cumsum(y)
plot (x, ycs, log="xy")
如何从“x”和“ycs”给出的函数计算导数函数?
还将提出一个平滑样条拟合的示例,然后预测导数。在这种情况下,结果与@dbaupp 描述的 diff 计算非常相似:
spl <- smooth.spline(x, y=ycs)
pred <- predict(spl)
plot (x, ycs, log="xy")
lines(pred, col=2)
ycs.prime <- diff(ycs)/diff(x)
pred.prime <- predict(spl, deriv=1)
plot(ycs.prime)
lines(pred.prime$y, col=2)
除非您非常小心,否则从原始数据生成衍生品是有风险的。这个过程被称为“误差倍增器”并非毫无意义。除非您知道数据的噪声内容并在微分之前采取一些措施(例如样条)来消除噪声,否则您很可能最终会得到一条可怕的曲线。
函数的导数是dy/dx,可以近似为Δy/Δx,即“y的变化超过x的变化”。这可以用 R 写成
ycs.prime <- diff(ycs)/diff(x)
现在ycs.prime
在每个 处包含函数导数的近似值:但是它是长度为 999 的向量,因此在进行任何分析或绘图时x
需要缩短x
(即使用x[1:999]
or )。x[2:1000]
还有gradient
来自 pracma 包。
grad <- pracma::gradient(ycs, h1 = x)
plot(grad, col = 1)