[R] finding derivative of a data series in R
nandan amar
nandan.amar at gmail.com
Fri May 27 13:22:42 CEST 2011
Thanks Dennis.
I got you.
My main consern was how to differentiate a series correctly.
I think the first procedure is more accurate.
Regards.
On 27 May 2011 16:27, Dennis Murphy <djmuser at gmail.com> wrote:
> Hi:
>
> A function and its spline approximation are not equivalent functions,
> hence neither are their corresponding derivatives. I modified an
> example from the splinefun() help page to illustrate this.
>
> op <- par(mfrow = c(2, 1))
> x <- seq(1, 9, by = 0.01)
> # u is the true function, u1-u3 are its symbolic derivatives wrt x
> # u1 = f', u2 = f'', u3 = f'''
> u <- expression(sin(pi * (x - 0.5)))
> u1 <- as.expression(D(u, 'x'))
> u2 <- as.expression(D(u1, 'x'))
> u3 <- as.expression(D(u2, 'x'))
> plot(x, eval(u), type = 'l', ylim = c(-30, 30),
> ylab = "", xlab = "",
> main = expression(f(x) == sin(pi * (x - 0.5))))
> lines(x, eval(u1), type = 'l', col = 'red')
> lines(x, eval(u2), type = 'l', col = 'blue')
> lines(x, eval(u3), type = 'l', col = 'green')
> # legend('topright', legend = c("f", "f'", "f''", "f'''"),
> # col = c('black', 'red', 'blue', 'green'), lwd = 2)
>
> # y2 is an evaluation of u at each x point
> y2 <- sin((x-0.5)*pi)
> # Construct the spline function approximation to u
> f <- splinefun(x, y2)
> # Plot the interpolation function and its first three derivatives
> curve(f(x), 1, 10, col = "black", lwd = 1.5, ylim = c(-30, 30),
> ylab = "", main = 'Spline interpolation of f')
> curve(f(x, deriv=1), 1, 10, col = 'red', lwd = 1.5, add = TRUE)
> curve(f(x, deriv=2), 1, 10, col = 'blue', lwd = 1.5, add = TRUE)
> curve(f(x, deriv=3), 1, 10, col = 'green', lwd = 1.5, add = TRUE)
> par(op)
>
> Notice that the peaks and troughs of the derivatives of the spline
> approximation are not at the same x locations as in the original
> function. Also notice the linearity in the derivatives when x is
> between 9 and 10.
>
> I suppose you could improve the approximations by setting some knot
> points, but I don't have the time to chase down that hypothesis for
> you right now. I'll leave that as homework :)
>
> Your example is simpler since it is polynomial, but the concept is the
> same: the derivative of the interpolator shouldn't necessarily match
> the derivative of the function exactly. Obviously, though, you want
> them to be close.
>
> HTH,
> Dennis
>
> On Fri, May 27, 2011 at 1:23 AM, nandan amar <nandan.amar at gmail.com> wrote:
>> Dear All,
>> I tried following for getting derivative of a polynomial in R
>>
>> i<- -10:10
>> x<-i*i*i+3*i*i+2
>> fun_spline<-splinefun(i,x)
>> plot(x,type="l")
>> lines(x,fx_spline(x, deriv=1), col='green')
>> lines(x,fx_spline(x, deriv=2), col='green')
>>
>> Now when I plot
>> 3*i*i + 6*i and 6*i + 6
>> the plot was not same for first deivative.
>> where as the 2nd derivative was same
>>
>> Is this a correct method for getting derivative.
>> where am I doing wrong as first derivative lines(x,fx_spline(x,
>> deriv=1), col='green') is not correct.
>>
>> amar
>> --
>> Amar Kumar Nandan
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
--
Amar Kumar Nandan
Karnataka, India, 560100
http://aknandan.co.nr
More information about the R-help
mailing list