Here's another way: Have all the functions stored in one. The following computes 100 solutions to an ode satisfying 100 differential initial conditions.
{sol} = NDSolve[{x'[t] == Sin[x[t]], x[0] == Range[100]/8}, x, {t, 0, 7}]

Since they're wrapped up in one function, they're a bit hard disentangle:
Plot[x[t] /. sol // Evaluate, {t, 0, 7}]

But not impossible:
ListLinePlot[
Transpose[{x["Grid"] /. sol // Flatten, #}] & /@
Transpose[x["ValuesOnGrid"] /. sol]
]

If you insist on actual functions, then we can extract the values of the function and its derivatives (which NDSolve
stores in the solution), and thread them through individual Interpolations
.
xsol = With[{x0 = x["Grid"] /. sol},
With[{y0 = Transpose[x["ValuesOnGrid"] /. sol],
p0 = Transpose[x'[t] /. sol /. t -> Flatten[x0]]},
MapThread[
Interpolation[Thread[{x0, #1, #2}]] &,
{y0, p0}]
]];
Plot[Evaluate@Through[xsol[t]], {t, 0, 7}]

NDSolve[Table[{x[i]'[t] == 2, x[i][0] == 0}, {i, 2}], Table[x[i][t], {i, 2}], t]
$\endgroup$ – george2079 Jul 20 '15 at 19:11Subscripts
that we have to parse on our own. $\endgroup$ – march Jul 20 '15 at 22:33