MathGroup Archive 2010

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

Search the Archive

Re: FindRoots?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg112136] Re: FindRoots?
  • From: Andrzej Kozlowski <akozlowski at gmail.com>
  • Date: Wed, 1 Sep 2010 06:28:41 -0400 (EDT)

On 31 Aug 2010, at 10:17, David Park wrote:

> True, Sin[1/x] will eventually break any root finding algorithm because we
> will always run out of time or space to store the answers if we push too
> close to zero.
> 
> However, this does provide a good example to show how well Ted's algorithm
> works. In this case the exact roots are 1/(n Pi) where n is a positive
> interger that runs between limits that span the region we are searching.
> 
> So, let's try some cases numerically. To search for roots between 0.01 and
> 0.1 n runs from 4 to 21 and there are 28 roots. Here are the results from
> RootSearch.
> 
> Needs["Ersek`RootSearch`"] 
> 
> RootSearch[Sin[1/x] == 0, {x, 0.01, 0.1}] 
> Length[%] 
> 
> {{x -> 0.0102681}, {x -> 0.0106103}, {x -> 0.0109762}, {x -> 
>   0.0113682}, {x -> 0.0117893}, {x -> 0.0122427}, {x -> 
>   0.0127324}, {x -> 0.0132629}, {x -> 0.0138396}, {x -> 
>   0.0144686}, {x -> 0.0151576}, {x -> 0.0159155}, {x -> 
>   0.0167532}, {x -> 0.0176839}, {x -> 0.0187241}, {x -> 
>   0.0198944}, {x -> 0.0212207}, {x -> 0.0227364}, {x -> 
>   0.0244854}, {x -> 0.0265258}, {x -> 0.0289373}, {x -> 
>   0.031831}, {x -> 0.0353678}, {x -> 0.0397887}, {x -> 
>   0.0454728}, {x -> 0.0530516}, {x -> 0.063662}, {x -> 0.0795775}} 
> 
> 28 
> 
> For the domain from 0.001 to 0.01 n runs from 32 to 318 and there are 287
> roots.
> 
> RootSearch[Sin[1/x] == 0, {x, 0.001, 0.01}, InitialPrecision :> 40, 
>  InitialSamples -> 5000, MaxBrentSteps -> 1000, 
>  MaxSecantSteps -> 1000, PrecisionGoal :> 10]; 
> Length[%] 
> 
> 287 
> 
> For the domain from 0.0001 to 0.001 n runs from 319 to 3183 and there are
> 2865 roots. RootSearch took about 20 minutes on this. (I'm not certain if I
> picked optimum values for the parameters to get the best efficiency.)
> 
> results3 =
>  RootSearch[Sin[1/x] == 0, {x, 0.0001, 0.001}, 
>   InitialPrecision :> 40, InitialSamples -> 30000, 
>   MaxBrentSteps -> 1000, MaxSecantSteps -> 1000, PrecisionGoal :> 10]; 
> Length[%] 
> 
> 2865 
> 
> I would consider this pretty good performance.
> 


Perhaps. But note that:

 sols = 
   N[Reduce[Sin[1/x] == 0 && 10^-4 < x < 10^-3, x], 10]; // Timing

{2.88873,Null}

Length[List @@ sols]

2865

So what do you need RootSearch for?


Andrzej Kozlowski


  • Prev by Date: fit with cdf of skew normal distriubtion
  • Next by Date: Re: FindRoots?
  • Previous by thread: Re: fit with cdf of skew normal distriubtion
  • Next by thread: Re: FindRoots?