Re: perturbation methods example from stephen lynch's book?
- To: mathgroup at smc.vnet.net
- Subject: [mg100706] Re: perturbation methods example from stephen lynch's book?
- From: Simon <simonjtyler at gmail.com>
- Date: Thu, 11 Jun 2009 21:40:42 -0400 (EDT)
- References: <h0nul6$bdd$1@smc.vnet.net>
Hi Sean,
Although I haven't looked at Lynch's book before, I wrote some code
recently for Poincare-Lindstedt expansions, so I thought I'd give it a
go.
My P-L program was completely automatic and could, in theory, go to
arbitrary order. Automating the method of multiple time scales is a
harder proposition (even in the simplified version discussed by
Lynch), as I had to hold Mathematica's hand through some of the
steps.
Also, in Lynch's book, he only goes to order x(t)~x0(t, eps t)+O(eps)
-- the removal of the secular terms at O(eps) is used to fix the
coefficients in x0
This is the general DE he was investigating -- init. cond's are x(0)
=a, x'(0)=0:
DE[x_, t_, eps_, f_] := x''[t] + x[t] - eps f[x[t], x'[t]]
Produce the DEs up to O(eps)^2:
DE[x, t, eps, (1 - #1^2) #2 &] /. {x[t] -> x0[t, eps t] + eps x1[t,
eps t], Derivative[n_][x][t] :> D[x0[t, eps t] + eps x1[t, eps t], {t,
n}]};
ser = Series[% /. f_[t, eps t] :> f[t0, t1], {eps, 0, 1}] // Simplify
Solve the zero'th order DE:
DSolve[ser[[3]][[1]] == 0, x0, {t0, t1}]
The result is equivalent to:
x0Soln = x0 -> (R[#2] Cos[#1 + th[#2]] &);
Only the R(0) and th(0) terms are fixed by the initial conditions --
giving R(0)=a, th(0)=0.
(note that Lych said R(0)=a/2... I'm not sure why)
The derivatives of R and th are fixed by the removal of secular terms.
Here's the DE of order eps:
Collect[ser[[3]][[2]] /. x0 :> (R[#2] Cos[#1 + th[#2]] &) //
TrigReduce, {Sin[_], Cos[_]}, Simplify]
The resonant terms are removed from the DE by setting the coefficients
of the linear trigonometric terms to zero:
thsoln = DSolve[th'[t1] == 0 && th[0] == 0, th, t1]
Rsoln = DSolve[4 R[t1] - R[t1]^3 - 8 R'[t1] == 0 && R[0] == a, R, t1]
[[2]] // FullSimplify
Then we get Lynch's final result for x0:
x0[t1, t2] /. x0Soln /. Rsoln /. thsoln
I'm sorry I haven't got anything more elegant for this...
Simon
PS
I think there are a couple of typos in the examples 7 and 9... did
you also spot them?
PPS Lynch's code for example 8 works fine.
Dt is a total derivative... it assumes everything is a dependent
variable unless told otherwise - thus his earlier declaration
SetAttributes[{w1,epsilon},Constant].