Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2002
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2002

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

Search the Archive

RE: Slow iteration in a functional program

  • To: mathgroup at smc.vnet.net
  • Subject: [mg35646] RE: [mg35630] Slow iteration in a functional program
  • From: "David Park" <djmp at earthlink.net>
  • Date: Wed, 24 Jul 2002 02:06:13 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Matthew,

Check out Section 2.4.9 in The Mathematica Book - Functions That Remember
Values They Have Found.

I think that will prevent the recalculation.

David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/



-----Original Message-----
From: Matthew Rosen [mailto:mrosen at cfa.harvard.edu]
To: mathgroup at smc.vnet.net


Everyone,
  I've been trying to recast an iterative calculation I do as a
procedural program in C as an elegant functional program in
Mathematica 4.1. The Mathematica code is much more transparent, but
the resultant execution time is more than two orders of magnitude
longer. Any suggestions would be greatly appreciated.The following is
a schematic of the problem.


There are three equations in the iteration variable, n:

   G[n_] := ListIntegrate[xsec Phi[n]]      Both xsec and Phi[n] are
400 points long.

   P[n_] := G[n]/(G[n]+(a constant)+D[n])   D[n] is a simple algebraic
function of n.

   Phi[1] = Flux;                             Flux is 400 points long.
   Phi{n_] := Phi[n-1] Exp[-(1-P[n-1])*xsec


The goal is to evaluate P[n_] for an n around 1000. After running, I
need to know all the values of P[n] and Phi[n] at each n from 1 to
nmax. Note, P[n] is a number and Phi[n] is 400 points long.

Currently,

Timing[P[1]] = 0.1 s
Timing[P[2]] = 0.2 s
Timing[P[5]] = 8.4 s.

I dont dare try to evaluate P[1000] as I need to do. Every time I
evaluate these functions they recalculate from scratch. I think I
need to somehow tell Mathematica to save the intermediate values.
Curious is that the calculation time is going up like n^2, not like n
as I would have thought. The equivalent procedural c-code runs in
less than 1 second to evaluate P[1000].

Thanks in advance for any guidance!

-Matt Rosen
--
Matthew Rosen
Harvard-Smithsonian Center for Astrophysics
Mail Stop 59
60 Garden Street
Cambridge, MA 02138

e: mrosen at cfa.harvard.edu
o: (617) 496-7614



  • Prev by Date: MatrixForm Oddity
  • Next by Date: Re: Problem using a loop to generate data for Point function
  • Previous by thread: Slow iteration in a functional program
  • Next by thread: Re: Slow iteration in a functional program