# findZeros: Find zeros of functions In ProjectMOSAIC/mosaic: Project MOSAIC Statistics and Mathematics Teaching Utilities

## Description

Compute numerically zeros of a function or simultaneous zeros of multiple functions.

## Usage

 ```1 2 3 4 5 6 7 8``` ```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")) ```

## Arguments

 `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. `sin(x) ~ x`. All free variables (all but the variable on the right side) named in the expression must be assigned a value via `...` `...` 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. `Inf` is a legitimate value, but is interpreted in the numerical sense as the non-Inf largest floating point number. This can also be specified replacing `x` with the name of the variable. See the examples. `near` a value near which zeros are desired `within` only look for zeros at least this close to near. `near` and `within` provide an alternative to using `xlim` to specify the search space. `nearest` the number of nearest zeros to return. Fewer are returned if fewer are found. `npts` How many sub-intervals to divide the `xlim` into when looking for candidates for zeros. The default is usually good enough. If `Inf` is involved, the intervals are logarithmically spaced up to the largest finite floating point number. There is no guarantee that all the roots will be found. `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 `c(-Inf,Inf)` for a modest number of zeros near `near`. `sortBy` specifies how the zeros found will be sorted. Options are 'byx', 'byy', or 'radial'. `form` Expression to be solved

## Details

Searches numerically using `uniroot`.

Uses findZerosMult of findZeros to solve the given expression

## Value

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.

## Author(s)

Daniel Kaplan ([email protected])

Cecylia Bocovich

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23``` ```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) ```

ProjectMOSAIC/mosaic documentation built on Jan. 18, 2019, 2:44 p.m.