Learn R Programming

Bolstad (version 0.2-41)

sintegral: Numerical integration using Simpson's Rule

Description

Takes a vector of \(x\) values and a corresponding set of postive \(f(x)=y\) values, or a function, and evaluates the area under the curve: $$ \int{f(x)dx} $$.

Usage

sintegral(x, fx, n.pts = max(256, length(x)))

Arguments

x

a sequence of \(x\) values.

fx

the value of the function to be integrated at \(x\) or a function

n.pts

the number of points to be used in the integration. If x contains more than n.pts then n.pts will be set to length(x)

Value

A list containing two elements, value - the value of the intergral, and cdf - a list containing elements x and y which give a numeric specification of the cdf.

Examples

Run this code
# NOT RUN {
## integrate the normal density from -3 to 3
x = seq(-3, 3, length = 100)
fx = dnorm(x)
estimate = sintegral(x,fx)$value
true.val = diff(pnorm(c(-3,3)))
abs.error = abs(estimate-true.val)
rel.pct.error =  100*abs(estimate-true.val)/true.val
cat(paste("Absolute error :",round(abs.error,7),"\n"))
cat(paste("Relative percentage error :",round(rel.pct.error,6),"percent\n"))

## repeat the example above using dnorm as function
x = seq(-3, 3, length = 100)
estimate = sintegral(x,dnorm)$value
true.val = diff(pnorm(c(-3,3)))
abs.error = abs(estimate-true.val)
rel.pct.error =  100*abs(estimate-true.val)/true.val
cat(paste("Absolute error :",round(abs.error,7),"\n"))
cat(paste("Relative percentage error :",round(rel.pct.error,6)," percent\n"))

## use the cdf

cdf = sintegral(x,dnorm)$cdf
plot(cdf, type = 'l', col = "black")
lines(x, pnorm(x), col = "red", lty = 2)

## integrate the function x^2-1 over the range 1-2
x = seq(1,2,length = 100)
sintegral(x,function(x){x^2-1})$value

## compare to integrate
integrate(function(x){x^2-1},1,2)


# }

Run the code above in your browser using DataLab