NDSolve -- n-body indexing ([[]]) problem
- To: mathgroup at smc.vnet.net
- Subject: [mg112204] NDSolve -- n-body indexing ([[]]) problem
- From: Greylander <greylander at gmail.com>
- Date: Sat, 4 Sep 2010 04:02:24 -0400 (EDT)
Hello.
I am attempting to some very simple 2-D, n-body problems. Here is an
example.
s = NDSolve[{y''[t] == Table[Table[Max[(y[t][[i]][[j]] + .001)^-3 - .
001, 0], {j, 1, 2}], {i, 1, 100}],
y'[0] == Table[{RandomReal[], RandomReal[]} - .5, {100}],
y[0] == Table[{RandomReal[], RandomReal[]}, {100}]},
y[t],
{t, 0, 20}]
The details of the y'' equation are not important. This could just as
easily be an n-body gravitation problem. As you can see from y[0], y
is a list of form { {x1,y1}, {x2,y2}, ... }, a list of N points --
coordinates of the N bodies. y'' for each coordinate of each point
can be a function of any/all of the other coordinates of the same
point or of the other particles.
The problem is that Mathematic applies the Part[] function prematurely
in y[t][[i]][[j]], which makes the y'' equation incorrect. I have
tried numerous approaches, some where I use Part[] on y[t], as above,
and others where I apply listable operations to y[t] as a whole. The
latter results in dimension mismatch error between the y'' equation
and the initial conditions. I have also tried Hold and ReleaseHold,
but if there is a way to get them to work here, I have not found it.
I have tried finding demo examples that do something like this, but
the only examples I have found so far treat each coordinate of each
body as a separate variable: x1, y1, x2, y2, x3, y3... and so forth.
This is not feasible for N=100s of particles, especially where I may
want N itself to be a parameter.
This is such a simple problem, that I am sure I am just overlooking
some aspect of the Mathematica language which makes this easy. Or
perhaps there is a somewhat different approach that achieves the same
(desired) result.
I need to understand the general approach to solving n-body problems
with NDSolve, with n large and arbitrary, so that making the dependent
variable a list or list-of-lists is necessary (unless there is some
other trick). The specific equations above are not important.
For example, when I specify the dependent variable y[t] -- is there
some way to specify it's list structure before it is otherwise
defined?
Hope someone out there can help. Thanks!