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

MathGroup Archive 2007

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

Search the Archive

Re: Better recursive method?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg72835] Re: Better recursive method?
  • From: "Roman" <rschmied at gmail.com>
  • Date: Sun, 21 Jan 2007 06:30:16 -0500 (EST)
  • References: <eosh0f$9bs$1@smc.vnet.net>

Hi nandan,

I think the problem is that your pi() and tau() functions are evaluated
analytically if you give analytic expressions for theta, and this takes
large amounts of time. If you look at ByteCount[pi[i,PI/4]], this seems
to grow exponentially with i, which is always a bad sign.

Fix this by asking for S1[N[PI/4]] for instance, while n also is
globally assigned a definite value.

Roman.

nandan wrote:
> Hallo:
>
> I have following recursive functions:
> pi(i, theta) := (2n-1)/(n-1) cos(theta) pi(i-1, theta) - n/(n-1)
> pi(i-2,theta)
> tau(i,theta) := n pi(i, theta) - (n+1) pi(i-1,theta)
>
> with intial values:
> pi(0,theta) := 0
> pi(1,theta) := 1
>
> These should calculate the following function:
> S1(theta) := sum(i=1-nstop) (2i+1)/(i(i+1)) (a(i) pi(i,theta) - b(i)
> tau(i,theta)) (where nstop=40)
>
> This should be pretty easy to calculate for Mathematica. I have written
> it the following way:
> pi[0,theta] := 0;
> pi[1,theta] := 1;
> pi[i_, theta_] := pi[i, theta] =(2n-1)/(n-1) Cos[theta] pi[i-1, theta]
> - n/(n-1) pi[i-2,theta]
> tau[i_,theta_] := n pi[i, theta] - (n+1) pi[i-1,theta]
> S1Temp[i_,theta_] := (2i+1)/(i(i+1)) (a[i] pi[i,theta] - b[i]
> tau[i,theta])
> S1(theta) := Sum[ S1Temp[i,theta], {i, 1, nstop}]
>
> Well, it works fine, but it takes enormous time. I have introduced
> recursive function to save time for calculation of Legendre Polynomials
> of which the function 'pi' and 'tau' consist of. But the same function
> if I write with 2 loops each for 'theta' and 'i' in IDL, it calculates
> in fraction of a second. Even the simple calculation of 'pi[40,pi/4]'
> took more than 350 seconds.
>
> What could be the problem in my logic. Is there any other better way to
> write recursive functions in Mathematica?
> 
> Any help will be appreciated!
> 
> Regards,
> nandan


  • Prev by Date: Re: how to quickly read a >10MB big file
  • Next by Date: Re: how to quickly read a >10MB big file
  • Previous by thread: Re: Better recursive method?
  • Next by thread: Re: Better recursive method?