MathGroup Archive 2003

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

Search the Archive

Re: multistep iterative methods

  • To: mathgroup at smc.vnet.net
  • Subject: [mg40383] Re: [mg40324] multistep iterative methods
  • From: Omega Consulting <info at omegaconsultinggroup.com>
  • Date: Thu, 3 Apr 2003 01:44:15 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

At 03:52 AM 4/1/2003, Selwyn Hollis wrote:
>I'd like to throw this out as a challenge to the group: What's the most
>efficient way to implement in Mathematica an explicit multistep
>iterative method such as, say, the 4-step Adams-Bashforth method for
>solving y' = f(t,y):
>
>y[k+1]:= y[k] + (h/24)*(55*f[k] - 59*f[k-1] + 37*f[k-2] - 9*f[k-3])
>
>where y[0], y[1], y[2], y[3] are "given," and f[i] denotes f[t0 +i*h,
>y[i]]. The desired output would be the list
>
>{y[0], y[1], y[2], ... , y[n]}.
>
>A suitable toy problem is
>
>y' = -2t*y^2,  y(0) = 1,
>
>with h = 0.01, n = 1000 (?), and the starting values taken from the
>exact solution y = 1/(1+t^2):
>
>y[0]=1, y[1] = 0.9999, y[2] = 0.9996, y[3] = .999101.
>
>Thanks in advance.
>
>-------
>Selwyn Hollis

I don't know about most efficient, but this does the trick.

In[1]:= h=.01;

Here is a function definition that uses caching. When it encounters a new 
y[k] it calculates the value and then saves it. When you reuse the value, 
it doesn't get recalculated. That makes it faster but it uses more memory.

In[2]:= y[k_] := y[k] = y[k-1]+(h/24)*(55*f[k-1]-59*f[k-2]+37*f[k-3]-9*f[k-4])

In[3]:= f[k_] := -2 h k y[k]^2

In[4]:=
y[0]=1;
y[1]=.9999;
y[2]=.9996;
y[3]=.999101;

In[8]:= Timing[lst=Table[y[k],{k,1000}];]
Out[8]= {0.15 Second,Null}

Compare the values:

In[9]:= y[1000]
Out[9]=0.00990099

In[10]:=1./(1+(h 1000)^2)
Out[10]=0.00990099

--------------------------------------------------------------
Omega Consulting
"The final answer to your Mathematica needs"
http://omegaconsultinggroup.com



  • Prev by Date: Re: multistep iterative methods
  • Next by Date: Re: Import[ ] & ReadList[ ]; "Word" and "Record"
  • Previous by thread: Re: multistep iterative methods
  • Next by thread: Re: Re: multistep iterative methods