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].