Re: Plot3D with NDSolve

*To*: mathgroup at smc.vnet.net*Subject*: [mg81665] Re: Plot3D with NDSolve*From*: Szabolcs Horvát <szhorvat at gmail.com>*Date*: Mon, 1 Oct 2007 04:43:14 -0400 (EDT)*References*: <fdnlg5$klu$1@smc.vnet.net>

sean_incali wrote: > Hello group, > > Let's say I can solve the following DE that depends on 2 paparmeters a > and b, and plot it accordingly. > > eqn = y'[x] == b/(a y[x]) > par = {a -> 1, b -> 1} > > solution = NDSolve[{eqn /. par, y[0] == 0.1}, y, {x, 0.1, 5}]; > > Plot[y[x] /. solution, {x, 0.1, 5}]; > > Above shows a 2d graph in x and y axes. > > > What I want to do is now use one of the parameter as z axis. > > So I need to solve the DE while varying a from 1 to 5 for instance. > > Then I want to graph the solutions as a 3D object. with x. y and a > axis (where a will be the new z axis.) > > I guess I can use Table to iterate the whole procedure, but I wanted > to see how others would approach it. > I would use Table too: sol = Join @@ Table[y /. NDSolve[{y'[x] == 1/(a*y[x]), y[0] == 0.1}, y, {x, 0.1, 5}], {a, 1, 5, 0.1}]; mat = Through[sol[Range[0.1, 5, 0.1]]]; ListPlot3D[mat] > For instance, if I use > > eqn = y'[x] == b/(a y[x]) > par = {b -> 1} > > solution = Table[NDSolve[{eqn /. par, y[0] == 0.1}, y, {x, 0.1, 5}], > {a, 1, 5}]; > > Plot[Evaluate[y[x] /. solution], {x, 0.1, 5}]; > > It will shows all the solutions in one 2D graph. I want to see them in > 3D. > > On the side note.. Why does the Plot require the "Evaluate" in the > second code I posted and not in the first code??? > This is because (in Mathematica <= 5.2) if Plot gets a single expression as its first argument (instead of a list), it expects it to evaluate to a single number (not a list of numbers). But here I would use Evaluate[] in the first case too to avoid evaluating ReplaceAll for each point. > If someone can explain that that will be great also. > > Thanks in advance as usual. > > sean > > -- Szabolcs