Re: Plotting a function of an interpolated function
- To: mathgroup at smc.vnet.net
- Subject: [mg53068] Re: Plotting a function of an interpolated function
- From: Adam Getchell <agetchell at physics.ucdavis.edu>
- Date: Wed, 22 Dec 2004 04:53:09 -0500 (EST)
- References: <200412171018.FAA16026@smc.vnet.net> <200412180900.EAA02294@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
DrBob wrote:
>I'll take the last problem first -- the Plot:
>
>Plot[W[\[Phi]], {t, 0, 100/m}]
>
>It can't be evaluated until Phi is computed, but regardless of what Phi turns out to be, the plot is determined anyway:
>
>Clear[m, mp, G, P, \[Rho], \[Phi], W,
> Inflaton]
>V = Function[x, (1/2)*m^2*x^2];
>\[Rho] = Function[x, D[x, t]^2/2 + V[x]];
>H = Function[x, Sqrt[((8*Pi*G)/3)*
> \[Rho][x]]];
>P = Function[x, D[x, t]^2/2 - V[x]];
>Inflaton = Derivative[2][\[Phi]][t] +
> 3*H[\[Phi][t]]*Derivative[1][\[Phi]][t] +
> Derivative[1][V][\[Phi][t]];
>W = Function[x, P[x]/\[Rho][x]];
>W[\[Phi]]
>
>-1
>
>W is constant, so the Plot should show -1 across the board (if it works at all).
>
>Now for the problem with Phi. Your definition of Phi isn't the best, but if you must use it, the Plot needs Evaluate:
>
>m = 10^16;
>mp = 1.2211*10^19;
>G = mp^(-2);
>Clear[\[Phi]]
>\[Phi] = \[Phi][t] /. First[NDSolve[
> {Inflaton == 0, Derivative[1][\[Phi]][
> 0] == 0, \[Phi][0] == 1}, \[Phi][t],
> {t, 0, 100/m}, MaxSteps -> 10^6]];
>Plot[Evaluate[W[\[Phi]]], {t, 0, 100/m}]
>
>But I don't see the expected constant -1. Instead, I see a Sin wave, I think due to noise.
>
>(W simplified to -1 when its argument was a symbol, but when the argument is numeric, the fraction P[x]/rho[x] appears to be vulnerable to numerical problems.)
>
>Define Phi this way, and I get a much more reasonable result:
>
>Clear[\[Phi]]
>\[Phi] = \[Phi] /. First[NDSolve[
> {Inflaton == 0, Derivative[1][\[Phi]][
> 0] == 0, \[Phi][0] == 1}, \[Phi],
> {t, 0, 100/m}, MaxSteps -> 10^6]];
>Plot[W[\[Phi][t]], {t, 0, 100/m}]
>
>The curve wavers, but it's -1 to machine precision, as expected.
>
>
Sure, thanks for the help. I ended up rewriting the function like so:
mGUT = 10^16;
mp = 1.2211*10^19;
G = mp^(-2);
P = Function[x, D[x, t]^2/2 -
V[x]];
W = Function[x, P[x]/\[Rho][x]];
parameters["m"] =
{m -> mGUT};
plotW[phi0_, tmax_,
opts___] :=
Plot[Evaluate[
W[Phi[phi0, tmax]] /.
parameters["m"]],
{t, 0, tmax}, PlotRange ->
All, Frame -> True,
PlotPoints -> 2500,
FrameLabel -> {"t",
"W(t)",
"Pressure coefficient",
""}, opts]
line[5] = {Hue[0.3]};
plotW[10^19, 10000/mGUT,
PlotStyle -> {line[5]}];
And it plotted exactly what I was looking for, which was the reheat time
after inflation when w diverges significantly from -1.
>Bobby
>
>
Thanks again!
-- Adam Getchell
- References:
- Plotting a function of an interpolated function
- From: Adam Getchell <agetchell@physics.ucdavis.edu>
- Re: Plotting a function of an interpolated function
- From: DrBob <drbob@bigfoot.com>
- Plotting a function of an interpolated function