\Header{curve}{Draw Function Plots}
\alias{plot.function}{curve}
\keyword{hplot}{curve}
\begin{Description}\relax
Draws a curve corresponding to the given function or expression (in
\code{x}) over the interval \code{[from,to]}.\end{Description}
\begin{Usage}
\begin{verbatim}
curve(expr, from, to, n = 101, add = FALSE, type = "l",
      ylab = NULL, log = NULL, xlim = NULL, ...)
plot.function(fn, from = 0, to = 1, xlim, ...)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{expr}] an expression written as a function of \code{x}, or
alternatively a function which will be plotted.
\item[\code{fn}] a `vectorizing' numeric \R{} function.
\item[\code{from,to}] the range over which the function will be plotted.
\item[\code{n}] integer; the number of x values at which to evaluate.
\item[\code{add}] logical; if \code{TRUE} add to already existing plot.
\item[\code{xlim}] numeric of length 2; if specified, it serves as default
for \code{c(from, to)}.
\item[\code{...}] graphical parameters can also be specified as arguments.
\code{plot.function} passes all these to \code{curve}.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
The evaluation of \code{expr} is at \code{n} points equally spaced
over the range \code{[from, to]}.  The points determined in this way
are then joined with straight lines.  \code{fn(x)} or \code{expr}
(with \code{x} inside) must return a numeric of the same length as
\code{x}.

This used to be a quick hack which now seems to serve a useful purpose,
but can give bad results for functions which are not smooth.

For ``expensive'' \code{expr}essions, you should use smarter tools.\end{Details}
\begin{SeeAlso}\relax
\code{\Link{splinefun}} for spline interpolation, \code{\Link{lines}}.\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
par(mfrow=c(2,2))
curve(x^3-3*x, -2, 2)
curve(x^2-2, add = TRUE, col = "violet")

plot(cos, xlim = c(-pi,3*pi), n = 1001, col = "blue")

chippy <- function(x) sin(cos(x)*exp(-x/2))
curve(chippy, -8, 7, n=2001)

for(ll in c("","x","y","xy"))
   curve(log(1+x), 1,100, log=ll, sub=paste("log=",ll))
\end{ExampleCode}
\end{Examples}

