https://github.com/cran/pracma
Tip revision: 3fdb68cc842f2ab3b59608f8e04d495763584f78 authored by Hans W. Borchers on 27 November 2015, 12:07:10 UTC
version 1.8.8
version 1.8.8
Tip revision: 3fdb68c
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))
}