AllRoots
- To: mathgroup at yoda.physics.unc.edu
- Subject: AllRoots
- From: akyildiz at maths.ox.ac.uk ( Yilmaz Akyildiz tel 2-73558)
- Date: Mon, 19 Oct 92 11:27:13 BST
(*
The previous version of the programme does not work for the initial
interval [0, 2 Pi].
It must be because of the limitations with RealInterval.
One way to get around this problem is to fatten the initial interval
a bit in case it involves symbolic numbers.
The following version is OK now.
akyildiz at maths.oxford.ac.uk
*)
lefthalf[RealInterval[{x_, y_}]] := RealInterval[{x,(x+y)/2.}];
righthalf[RealInterval[{x_, y_}]] := RealInterval[{(x+y)/2.,y}];
containszero[RealInterval[{x_,y_}]] := (x <= 0 <= y);
bisect[int_RealInterval] := {lefthalf[int],righthalf[int]};
intbisec[f_, a_, b_, tol_] :=
With[
{step = Select[(bisect/@#)//Flatten, containszero[N[f[#]]]&]& },
Nest[step, {RealInterval[N[{a-tol/2.,b+tol/2.}]]},
Ceiling[Log[2,N[(b-a)]/tol]]]
];