Raw File
piecewise.R
##
##  p i e c e w i s e . R  Piecewise Linear Function
##


piecewise <- function(x, y, abs = FALSE)
{
	n <- length(x)
	areas <- 0.0
	zeros <- if (y[1] == 0) c(x[1]) else c()
	for (i in 2:n) {
		if (y[i]*y[i-1] >= 0) {
			if (y[i] == 0) zeros <- c(zeros, x[i])
			areas <- c(areas, (y[i]+y[i-1]) * (x[i]-x[i-1]) / 2.0)
		} else {
			x0 <- (x[i-1]*y[i] - x[i]*y[i-1])/(y[i] - y[i-1])
			zeros <- c(zeros, x0)
			areas <- c(areas, y[i-1]*(x0-x[i-1])/2.0, y[i]*(x[i]-x0)/2.0)
		}
	}
	area <- if (abs) sum(abs(areas)) else sum(areas)
	return(list(area=area, zeros=zeros))
}
back to top