Online Algebra Calculator
Many of users do not use powerful Maxima computer algebra system for systematic work, but for ad hoc algebraic calculations – equations, functions, matrixes, etc. only. To do this job, it is not useful to download the whole application from a web site.
-- Option variable: 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. When the function evaluates to a number at both endpoints and these numbers have the same sign, 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(%o1) true (%i2)