2012-06-18 2 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

Создание производных от необработанных данных является рискованным, если вы не очень осторожны. Не зря этот процесс известен как «множитель ошибок». Если вы не знаете уровень шума ваших данных и не предпринимаете каких-либо действий (например, сплайн), чтобы удалить шум до дифференциации, вы вполне можете на самом деле получить страшную кривую.