Find zeros of functions
Compute numerically zeros of a function or simultaneous zeros of multiple functions.
findZeros( expr, ..., xlim = c(near - within, near + within), near = 0, within = Inf, nearest = 10, npts = 1000, iterate = 1, sortBy = c("byx", "byy", "radial") ) ## S3 method for class 'formula' solve( form, ..., near = 0, within = Inf, nearest = 10, npts = 1000, iterate = 1, sortBy = c("byx", "byy", "radial") )
expr |
A formula. The right side names the variable with respect to which the zeros should be found.
The left side is an expression, e.g. |
... |
Formulas corresponding to additional functions to use in simultaneous zero finding and/or specific numerical values for the free variables in the expression. |
xlim |
The range of the dependent variable to search for zeros. |
near |
a value near which zeros are desired |
within |
only look for zeros at least this close to near. |
nearest |
the number of nearest zeros to return. Fewer are returned if fewer are found. |
npts |
How many sub-intervals to divide the |
iterate |
maximum number of times to iterate the search. Subsequent searches take place with the range
of previously found zeros. Choosing a large number here is likely to kill performance without
improving results, but a value of 1 (the default) or 2 works well when searching in |
sortBy |
specifies how the zeros found will be sorted. Options are 'byx', 'byy', or 'radial'. |
form |
Expression to be solved |
Searches numerically using uniroot
.
Uses findZerosMult of findZeros to solve the given expression
A dataframe of zero or more numerical values. Plugging these into the expression on the left side of the formula should result in values near zero.
a dataframe with solutions to the expression.
Daniel Kaplan (kaplan@macalester.edu)
Cecylia Bocovich
findZeros( sin(t) ~ t, xlim=c(-10,10) ) # Can use tlim or t.lim instead of xlim if we prefer findZeros( sin(t) ~ t, tlim=c(-10,10) ) findZeros( sin(theta) ~ theta, near=0, nearest=20) findZeros( A*sin(2*pi*t/P) ~ t, xlim=c(0,100), P=50, A=2) # Interval of a normal at half its maximum height. findZeros( dnorm(x,mean=0,sd=10) - 0.5*dnorm(0,mean=0,sd=10) ~ x ) # A pathological example # There are no "neareset" zeros for this function. Each iteration finds new zeros. f <- function(x) { if (x==0) 0 else sin(1/x) } findZeros( f(x) ~ x, near=0 ) # Better to look nearer to 0 findZeros( f(x) ~ x, near=0, within=100 ) findZeros( f(x) ~ x, near=0, within=100, iterate=0 ) findZeros( f(x) ~ x, near=0, within=100, iterate=3 ) # Zeros in multiple dimensions (not run: these take a long time) # findZeros(x^2+y^2+z^2-5~x&y&z, nearest=3000, within = 5) # findZeros(x*y+z^2~z&y&z, z+y~x&y&z, npts=10) solve(3*x==3~x) # plot out sphere (not run) # sphere = solve(x^2+y^2+z^2==5~x&y&z, within=5, nearest=1000) # cloud(z~x+y, data=sphere)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.