[R] Integration of two lines
Hans W Borchers
hwborchers at googlemail.com
Tue Jan 25 15:39:23 CET 2011
Xavier Robin <Xavier.Robin <at> unige.ch> writes:
> Hello,
>
> I need to integrate the absolute difference between two lines measured
> on different points.
>
> # For example :
> x <- seq(0, 1, 1/100)
> f_x <- runif(101) + x
> y <- seq(0, 1, 1/23)
> f_y <- runif(24) + (1 - y)
>
> plot(x, f_x, type="l")
> lines(y, f_y)
>
> Then I would like to compute Integral( | f_x - f_y | )dx.
> (This is not the same as | Integral(f_x)dx - Integral(f_y)dx |.)
First define a function from those points:
fx <- approxfun(x, f_x)
fy <- approxfun(y, f_y)
f <- function(x) abs(fx(x)-fy(x))
and now you can apply integrate() or trapz():
xx <- sort(c(x, y))
yy <- f(xx)
trapz(xx, yy)
trapz() should return the more accurate (i.e. exact) result.
--Hans Werner
> Computing this integral looks non trivial. I guess I should interpolate
> the points of f_y over x and integrate both lines on these intervals.
> Even then I would miss points where the lines cross.
>
> There are functions to integrate below *one* line (I'm thinking about
> the trapz function in caTools).
> Do you know if there is a function to do this integration properly with
> two lines (and especially their absolute difference)?
>
> Regards,
> Xavier
>
>
More information about the R-help
mailing list