       Re: Limitation on vector length in NDSolve?

• To: mathgroup at smc.vnet.net
• Subject: [mg122182] Re: Limitation on vector length in NDSolve?
• From: Oliver Ruebenkoenig <ruebenko at wolfram.com>
• Date: Wed, 19 Oct 2011 05:34:57 -0400 (EDT)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com
• References: <201110151002.GAA03126@smc.vnet.net>

```
Hi,

On Sat, 15 Oct 2011, DmitryG wrote:

> Dear All,
>
> Working on vectorization of solutions of systems of ODEs, I have
> stumbled upon a problem that is likely a limitation on the length of
> the vectors that can be processed by NDSolve. Below a critical length
> that is 845 in my case, the calculation is fast but above the critical
> length it suddenly becomes very slow, although the results are
> correct. Probably NDSolve switches to another and less efficient
> method.
>

There is no such limit in NDSolve.

> The task is to solve the system of equations
>
> ds[t][[i]]/dt==-s[t][[i]]Sum[ f[i-j]s[t][[j]] ,{j,1,NN}],
> i=1..NN,             f[i_]=Exp[-a i^2],          a=0.0001;
>
> with some initial conditions
>
> Below are two solutions, with vectorization (very slow!) and with
> vectorization.
>
>
> ***************************************************************************
> (* Definitions *)
> tMax = 10.;
> NN = 200;  (* Number of sites *)
> a = 0.001;
> f[i_] = Exp[-a i^2];
> IniConds = s == Table[1.  i/NN, {i, 1, NN}];
>
> (* Solution with direct summation in the RHS - slow *)
> Eqs = \!\(
> \*SubscriptBox[\(\[PartialD]\), \(t\)]\(s[t]\)\) == -Table[
>     s[t][[i]] Sum[f[i - j] s[t][[j]], {j, 1, NN}], {i, 1, NN}];

If I look at NN=5 I see that there is a t in the equations, coming from
s[t][] - is that really intended?

You might want to look a SolvedDelayed->True and set up the problem as a
matrix problem. You find an example of how to set up a system of equations
and then use NDSolve to time integrate it here

http://library.wolfram.com/infocenter/Conferences/7549/

Oliver

> AbsoluteTiming[
> Sol = NDSolve[{Eqs, IniConds}, s, {t, 0, tMax},
>   StartingStepSize -> 1/100,
>   Method -> {"FixedStep", Method -> "ExplicitEuler"}]]
> st[t_] := s[t] /. Sol[];
>
> ListPlot[{st, st[.003], st[0.01], st[0.05], st[0.5]}]
>
>
> (* Vectorized solution *)
> AbsoluteTiming[fMatr = Table[f[i - j], {i, 1, NN}, {j, 1, NN}];]
> H[s_] := fMatr.s;
> Eqs = \!\(\*SubscriptBox[\(\[PartialD]\), \(t\)]\(s[t]\)\) == -s[t]
> H[s[t]];
>
> AbsoluteTiming[
> Sol = NDSolve[{Eqs, IniConds}, s, {t, 0, tMax},
>   StartingStepSize -> 1/100,
>   Method -> {"FixedStep", Method -> "ExplicitEuler"}]]
> st[t_] := s[t] /. Sol[];
> ListPlot[{st, st[.003], st[0.01], st[0.05], st[0.5]}]
>
> **************************************************************************
>
> I do not know if the problem depends on the computer because at the
> moment I have Mathematica on my laptop only. It would be great if you
> checked the issue. With NN around the critical value 845, the non-
> vectorized solution should not be run because it never ends.
>
> Thank you for your insights,
>
> Dmitry
>
>

--

```

• Prev by Date: Manipulate in a series of commands
• Next by Date: Clear all variables but not functions
• Previous by thread: Limitation on vector length in NDSolve?
• Next by thread: A possible typo in the program of "Mathematica Navigator" by Heikki