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[0] == 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][[1]] - 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[[1]]; > > ListPlot[{st[0], 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[[1]]; > ListPlot[{st[0], 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 > > --
- References:
- Limitation on vector length in NDSolve?
- From: DmitryG <einschlag@gmail.com>
- Limitation on vector length in NDSolve?