Maxima Function
find_root (expr, x, a, b)
find_root(f,a,b)
find_root_error
find_root_abs
find_root_rel
Finds a root of the expression expr or the function f
over the closed interval [a, b].
The expression expr may be an equation,
in which case find_root
seeks a root of lhs(expr) - rhs(expr)
.
Given that Maxima can evaluate expr or f over [a, b]
and that expr or f is continuous,
find_root
is guaranteed to find the root,
or one of the roots if there is more than one.
find_root
initially applies binary search.
If the function in question appears to be smooth enough,
find_root
applies linear interpolation instead.
The accuracy of find_root
is governed by find_root_abs
and find_root_rel
.
find_root
stops when the function in question
evaluates to something less than or equal to find_root_abs
,
or if successive approximants x_0, x_1 differ by no more than
find_root_rel * max(abs(x_0), abs(x_1))
.
The default values of find_root_abs
and find_root_rel
are both zero.
find_root
expects the function in question to have a different sign at the endpoints
of the search interval.
If this condition is not met,
the behavior of find_root
is governed by find_root_error
.
When find_root_error
is true
,
find_root
prints an error message.
Otherwise find_root
returns the value of find_root_error
.
The default value of find_root_error
is true
.
If f evaluates to something other than a number at any step in the search algorithm,
find_root
returns a partially-evaluated find_root
expression.
The order of a and b is ignored; the region in which a root is sought is [min(a, b), max(a, b)].
Examples:
(%i1) f(x) := sin(x) - x/2; x (%o1) f(x) := sin(x) - - 2 (%i2) find_root (sin(x) - x/2, x, 0.1, %pi); (%o2) 1.895494267033981 (%i3) find_root (sin(x) = x/2, x, 0.1, %pi); (%o3) 1.895494267033981 (%i4) find_root (f(x), x, 0.1, %pi); (%o4) 1.895494267033981 (%i5) find_root (f, 0.1, %pi); (%o5) 1.895494267033981 (%i6) find_root (exp(x) = y, x, 0, 100); x (%o6) find_root(%e = y, x, 0.0, 100.0) (%i7) find_root (exp(x) = y, x, 0, 100), y = 10; (%o7) 2.302585092994046 (%i8) log (10.0); (%o8) 2.302585092994046