2012-06-18 14 views
2

有沒有簡單的方法來計算數據給出的非線性函數的導數?在r中計算數據函數的導數

例如:

x = 1/c(1000:1) 

y = x^-1.5 
ycs = cumsum(y) 

plot (x, ycs, log="xy") 

如何計算由'x'和'ycs'給出的函數的導數函數?

+0

在此示例中,您的期望結果究竟是什麼? –

+0

所有的答案都假設你實際上並不知道函數的基礎類型。如果你知道模型,你可以簡單地做非線性迴歸。 – Roland

回答

10

也打算提出一個平滑樣條擬合的例子,然後預測導數。在這種情況下,結果與@dbaupp所描述的差異計算非常相似:

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) 
5

函數的導數是dy/dx,它可以用Δy/Δx來近似,即「y在x上的變化的變化」。這可以作爲R寫成

ycs.prime <- diff(ycs)/diff(x) 

現在ycs.prime包含在每個x的近似函數的導數:但它是長度999的向量,所以將需要縮短x(即使用x[1:999]x[2:1000])進行任何分析或繪圖時。

6

除非您非常小心,否則從原始數據生成衍生產品具有風險。這個過程稱爲「錯誤乘數」並非沒有任何意義。除非您知道數據的噪音含量,並且在分化之前採取一些行動(例如樣條線)來消除噪音,否則確實會產生令人恐懼的曲線。