MathGroup Archive 1992

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re:AllRoots

  • To: mathgroup <mathgroup at yoda.physics.unc.edu>
  • Subject: Re:AllRoots
  • From: HAY at leicester.ac.uk
  • Date: Sat, 10 OCT 92 00:39:22 GMT

RE the recent note from akyildiz at vax.oxford.ac.uk

A more functional form of the code is


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]};

step[f_][{ints__RealInterval}] := 
   Select[(bisect/@{ints})//Flatten, containszero[f[#]]&];
	
intbisecF[f_Function, a_, b_, tol_] :=
   Nest[step[f], {RealInterval[{a,b}]}, Ceiling[Log[2,(b-a)/tol]]];

 
 

It might be better style to combine the last two functions:


intbisecF[f_Function, a_, b_, tol_] :=
   With[
      {step =	Select[(bisect/@#)//Flatten, containszero[f[#]]&]& },
      Nest[step, {RealInterval[{a,b}]}, Ceiling[Log[2,(b-a)/tol]]]
	  ];


These seem to take about 75% of the time: the second form is marginally quicker
than the first


From
Allan Hayes
Department of Mathematics
The University
Leicester LE1 7RH
U.K.
hay at leicester.ac.uk





  • Prev by Date: Fortran Format
  • Next by Date: Memory management by Share[]?
  • Previous by thread: AllRoots
  • Next by thread: AllRoots