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 > > ______________________________________________ R-help@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.