Re: newbie: explicit function works, "function object" doesn't
- To: mathgroup at smc.vnet.net
- Subject: [mg96267] Re: [mg96207] newbie: explicit function works, "function object" doesn't
- From: "David Park" <djmpark at comcast.net>
- Date: Tue, 10 Feb 2009 05:54:28 -0500 (EST)
- References: <32689826.1234178726482.JavaMail.root@m02>
Tom,
It is generally good practice to have ALL symbols in a function definition
be part of the definition itself and not just 'hanging loose'. This made a
difference in the Manipulate statement because the control parameters are
local variables within the Manipulate statement. That is why it would not
work for you until you put the definitions and solution inside the
Manipulate statement.
First solve the differential equation and obtain a function for theta that
contains the parameters in the definition of the function. In this case the
parameters are entered as what are called SubVaues in Mathematica. You could
remove the semicolons to see the intermediate steps.
Clear[theta];
linearPendulum = {theta''[t] == -omega^2 theta[t]};
Part[DSolve[{linearPendulum, theta'[0] == v0, theta[0] == theta0},
theta, t], 1, 1];
theta[omega_, theta0_, v0_][t_] = theta[t] /. %
(omega theta0 Cos[omega t] + v0 Sin[omega t])/omega
We can see that we now have a way to express the function with any
particular set of parameters.
theta[2, 3, 1][t]
1/2 (6 Cos[2 t] + Sin[2 t])
Now the Manipulate statement is much simpler. All we need is the Plot
statement. Dynamic plots like this are much better if they are displayed
with a fixed PlotRange. However, you might want to add an additional control
to set the vertical plot range.
Manipulate[
Plot[theta[omega, theta0, v0][t], {t, -2 \[Pi], 2 \[Pi]},
Frame -> True,
AxesStyle -> LightGray,
PlotRange -> {{-2 \[Pi], 2 \[Pi]}, {-5, 5}}],
{{omega, 1}, 0.0001, 5, Appearance -> "Labeled"},
{{theta0, 1}, 0, 5, Appearance -> "Labeled"},
{{v0, 1}, 0, 5, Appearance -> "Labeled"}]
Now you should be able to do the damped oscillator.
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/
From: Tom Roche [mailto:tlroche at gmail.com]
summary: I've got a function that I can Manipulate, but I can't
Manipulate the things to which the function is assigned. I'm assuming
this is due to a syntax error.
details:
As advertised by the Subject:, I'm new to Mathematica (specifically M7
running on a linux cluster) so please excuse any lapses in
terminology. I'd also appreciate pointers to specific docs rather than
just an RTFM. Also feel free to refer to my notebook @
http://www.unc.edu/~tr/classes/GEOL861/hw1Notebook.nb
I'm trying initially to model a linearized pendulum
theta''[t] == -omega^2 theta[t]
(where omega=g/l) with the simple initial conditions
theta'[0]==v0
theta[0]==theta0
Using
soln = DSolve[{linearPendulum, theta'[0] == v0, theta[0] == theta0},
theta[t], t]
I get the solution
theta[t] -> (omega*theta0*Cos(omega*t) + (v0*Sin(omega*t)))/omega
However, when I try to Manipulate[Plot[soln...]], I get ... nothing.
Not an error, and I do get the appropriate UI, but I don't get a plot.
>From what I've read, it seems Manipulate wants an expression like the
RHS of 'soln', which I'll refer to here as a "function." (Please
correct my usage as needed.) I got a "function object" with ReplaceAll
happysoln[t_] = theta[t] /. soln[[1]]
similar to a working example I've seen. But
Manipulate[Plot[happysoln...]] also fails silently, like the previous.
However, when I manipulate the "function" directly
Manipulate[Plot[(omega theta0 Cos[omega t] + v0 Sin[omega t])/omega,
{t, -2 Pi, 2 Pi}], {{omega, 1}, 0, 5}, {{theta0, 1}, 0, 5}, {{v0, 1},
0, 5}]
it works as designed: I get the UI with the plot, which I can twiddle
with the sliders.
Why can I Manipulate the function, but not the containers of the
function (i.e. soln, happysoln)? More importantly, with what syntax
can I Manipulate those containers?
TIA, Tom Roche <Tom_Roche at pobox.com>