Keith Briggs

This page was last modified 2024-01-21  

.
.


home 
·publications 
·thesis 
·talks 
·meetings 
·records 
·maths notes « 
·software 
·languages 
·music 
·travel 
·cv 
·memberships 
·students 
·maps 
·place-names 
·people 
·photos 
·links 
·ex libris 
·site map 


.
Solutions to Trefethen's problems from 
"Hundred-dollar, Hundred-digit challenge",
SIAM News volume 35, number 1.

Keith Briggs 2002 Mar 25

Notes on high-precision arithmetic:

    http://keithbriggs.info/xrc.html
    www.nersc.gov/~dhbailey/mpdist/mpdist.html
    www.shoup.net/ntl/


Problem 1 
---------

  integrate_0^1 cos(log(x)/x)/x dx

  Solution:
  
    0.3233674316777787...

  Method:

     integrate_0^1 cos(log(x)/x)/x dx
   = integrate_0^infty W'(y) cos(y) dy
   = sum_{n=1; n odd}^infty integrate_{-pi}^{pi} W'(u+n*pi) cos(u) du ...(1)

  where W=Lambert's W function: W(x)exp(W(x))=x; W'(x)=W(x)/(x(1+W(x))).

  The advantage of this representation is that each integral is a product
  of cos with slowly varying function (W(x)~log(x)).   Thus, it is very well
  approximated by an expansion

  integrate_{-pi}^{pi} W'(u+n*pi) cos(u) du ~=
    a_2/2! W^{(3)}(n*pi) + a_4/4! W^{(5)}(n*pi) + ...                 ...(2)

  where a_k = integrate_{-pi}^{pi} x^k cos(x) dx.
  
  Both the a_k and the derivatives W^{(k+1)} of W can be computed from 
  simple recurrences.    Already at n=13, two terms of this expansion
  give sufficient accuracy.   Thus, we do the first few terms in the sum (1)
  by numerical integration, then switch to (2) for the rest of the sum.
  
  We may estimate the truncation error as follows: W^{(3)}(x) is asymptotically
  2/(x*log(x))^3 for large x.   Bounding this by 2/x^3, we can sum the tail 
  as being < 4*pi/x^2.   From this we estimate that 10^6 terms
  are sufficient for 10 dp in the final result.

  Doing a more accurate tail estimation:

     sum_{k=n}^infty W^{(3)}(k*pi) 
  ~= 2*pi sum_{k=n}^infty 1/(x*log(x))^3 
  ~  2*pi integral_n^infty 1/(x*log(x))^3 dx
  =  2*pi [ -2Ei(-2log(n)) + (1-2log(n))/(2n^2 log(n)^2) ]

  This suggests that the tail is:
  <8e-9   at n=1000 
  <4e-11  at n=10000
  <2e-13  at n=100000
  <2e-15  at n=1000000

Problem 2
---------

  Circular mirror of radius 1/3 at each point of Z^2.
  Photon starts at (1/2,1/10) with velocity (1,0).
  What is its position at time 10?

  Method:

  1. Run a quick-and-dirty python program (trefethen2.py) using
     IEEE double arithmetic to get a sequence of bounces, which we
     will afterwards confirm with precise arithmetic.
     This program will also output data for feeding to "graph" to make
     a postscript figure (trefethen2-fig.ps).
     The sequence of the centres of circular mirrors computed is
     [[1, 0], [-1, 1], [0,  2], [ 0,  1], [-1, 2], [ 0,  0], [-1, 0], [0, 1],
      [0, 0], [-1, 0], [0, -1], [-1, -1], [-1, 0], [-1, -1], [ 1, 0]];

  2. Run a C++ program (trefethen2-xr.cc) which will recompute
     everything in such a way that the final time and velocity vector
     are accurate to any requested precision (e.g. 10 decimals).
     If the sequence of bounces above was wrong, this program will crash
     with a "sqrt of negative argument" error.

  Solution:

     x(10)    = -0.736292698609618310775737171866
     y(10)    = -0.669642696363571375194376070966
     distance =  0.99526291944335416089031180942

  More precisely:
     x(10)   = -0.736292698609618310775737171866391720451575491031024118015570
                32135829096701522929400945112122000980773908774827834875197238
                77531369315078617517331539949084939398476219513951166249120103
                0045569289350602e0
     y(10)   = -0.669642696363571375194376070967098466862227372928775421597411
                09381282909191783522403449125396431985636370847144665160568810
                35768639394200390550524425747382398387223992432483782229188924
                2655423072136579e0 
     distance = 0.9952629194433541608903118094267216210294669227341543498032088
                580729861796228306320991749818976188760306062973261905117220872
                365706973813827798622298601793010235848291712247521533893738542
                1202854314982e0

Problem 3
---------

  A=
  1/1  1/2  1/4  1/7  1/11 ...
  1/3  1/5  1/8  1/12 1/17 ...
  1/6  1/9  1/13 1/18 1/24 ...
  1/10 1/14 1/19 1/25 1/32 ...
  1/15 1/20 1/26 1/33 1/41 ...
  ....

  What is the 2-norm of A considered as a operator on l^2?
  
  Solution:

    1.27422415274...

  Method:
  
    We have  1/A_{ij}=(i+1)(i+2(j+1))/2+j(j-1)/2 (indexing from 0)
    and therefore must maximize over x_j: sqrt(sum_i (sum_j A_{ij}*x_j)^2)
    subject to sum_i x_i^2=1
    
    I truncated these sums at n=4000 and performed the constrained
    optimization.


Problem 4
---------

  minimize  exp(sin(50x))
           +sin(60exp(y))
           +sin(70sin(x))
           +sin(sin(80y))
           -sin(10(x+y))
           +(x^2+y^2)/4

  Solution:

    -3.30686864747523728...
    at 
    x=-0.0244030796943785 y=2.10612427155358

  Method:
  
     Random search followed by gradient optimization.

     Check with gp:
     43 100
     x=-0.0244030796962585; y=0.210612427157718
     objective:
     exp(sin(50*x))+sin(60*exp(y))+sin(70*sin(x))+sin(sin(80*y))-sin(10*(x+y))+(x^2+y^2)/4
     gradient: 
     x/2+50*exp(sin(50*x))*cos(50*x)-10*cos(10*(x+y))+70*cos(x)*cos(70*sin(x)
     y/2+60*exp(y)*cos(60*exp(y))-10*cos(10*(x+y))+80*cos(80*y)*cos(sin(80*y))

Problem 5
---------

  Find the cubic minimizing sup-norm error for 1/gamma(z) on unit disk.

  Solution:
    
    min sup-norm error = 0.2143352346...

  Minimizing cubic:
    
    0.0055418508 + 1.0197619z + 0.62521197z^2 - 0.60334332z^3
                                                        
  Method:

  1. Since 1/gamma(z) has a Taylor series around 0 with real coefficients, 
  so will the best approximating polynomial.

  2. By the maximum modulus theorem, the maximum approximation error
  in the unit disk will occur on the boundary.

  3. A rough check shows the max error occurs near t=0.2233, 0.36 and at 1/2,
  where z=exp(2*pi*i*t).

  4. Expand 1/gamma(z) around the first two of these points to get 
  accurate values to fit to.  (1/gamma(-1)=0 for t=1/2)

  5. Use a gradient optimizer to get the 4 coefficients of the cubic; 
  to find the max error near the above two approximate t values use a 
  Brent one-dimensional optimizer in the argument t for each gradient step.

Problem 6 NB: this solution is incorrect!
---------

  Particle walks on Z^2.  
  P(up)=1/4, P(dn)=1/4, P(rt)=1/4+eps, P(lt)=1/4-eps.
  P(eventual return to origin)=1/2.
  What is eps?
  
  Solution:

    0.108996971771294...

  Method:

    Compute probabilities on 4000*4000 lattice, use bisection to find eps.

Problem 7
---------

  A is a 20000*20000 integer matrix
  
  A(i,i) = prime(i)
  A(i,j) = 1 if |i-j|=1,2,4,8,...,16384
         = 0 else
  
  What is (A^-1)_{11}?

  Solution: 
  
    0.72507834626840116746868771925116096886918059447950895787816...

  Method:

    Solve A*x = [1,0,0,0,...,0]^T; solution is x_1.
    Conjugate gradient works well since A is sparse symmetric 
    positive definite.   Neither A nor A^-1 need be stored.

  
Problem 8
---------
  
  Square domain [0,2]*[0,2], 3 edges held at 0, one edge (x=2) at 5.
  u_t=u_{xx}+u_{yy}
  At what time does u at (1,1) reach 1?

  Solution: 

    0.42401138703368836379743366859326...
  
  Method:

   Solving the heat equation with Fourier series, we find that the
   temperature u at (1,1) at time t is

     (5/4) + 40/pi^2 sum_{m=1; m odd}^{infty} sum_{n=1; n odd}^{infty} 
       (-1)^{(m+n)/2} n/m 1/(m^2+n^2) exp[-(m^2+n^2)*pi^2*t/4]

   where the 5/4 term is the equilibrium temperature.
   Bisection easily finds the required value of t.

Problem 9
---------

  argmax_{a in [0,5]} (2+sin(10a)) * integrate_0^2 x^a * sin(a/(2-x)) dx

  Solution: 
  
    a = 0.78593367197930...

  Method: 
  
    The integral is easier to handle if we rewrite it as

      integrate_{1/2}^infinity (2-1/u)^a/u^2 * sin(a*u) du

    I used an adaptive integration algorithm optimized for
    oscillatory integrands, together with a golden-search search.


Problem 10
----------

  Rectangle R=[-5,5]*[-1/2,1/2]
  Particle starts Brownian motion at (0,0)
  What is probability of first exit through a short side of R?

  Solution: 
 
    2*1.918793989625613051703566593102...e-7
    = 0.00000038375879792512261034071331862048...

  Method: 
  
    Unless I have misunderstood something, this problem is easy!
    Solve Fokker-Planck equation on R with appropriate boundary conditions,
    p(x,y)=prob(first exit through right edge of R starting at (x,y))
    which just gives Laplace's equation p_{xx} + p_{yy} = 0 
    BC: 0 on left, bottom, top edges; 1 on right edge
    Solution by separation of variables is

    p(0,0) = sum_{m=1, m odd}^{5nfty} 4/(m*pi)*sinh(5*m*pi)/sinh(10*m*pi)

    Already 2 terms give almost 30 d.p.
    This is the probability of first exit through the right-hand edge;
    we double this for the probability of first exit through either short edge.

This website uses no cookies. This page was last modified 2024-01-21 10:57 by Keith Briggs private email address.