Appearance of the secular terms in the pertubative expantion  in an unharmonic oscillation

Saburo HIGUCHI

Harmonic Oscillation

x'' (t)  +  x (t) = 0

harmsol = 
        NDSolve[{x''[t] + x[t] == 0, 
            x[0] == 1, x'[0] == 0}, 
          x[t], {t, 0, 100}];

harm = 
      Plot[ x[t]  /.  harmsol[[1]], {t, 0, 10}, 
        PlotStyle -> {RGBColor[1, 0, 0]}, 
        AxesLabel -> {t, x[t]}]

Unharmonic Oscillation (numerical solution)

x'' (t) + 
        x (t) = -e (((x (t)))^3)

For e=1/10

unhsol = 
        NDSolve[ {x''[t]  +  x[t] == -e x[t]^3, 
              x[0] == 1, x'[0] == 0}  /.  e -> 1/10 , 
          x[t], {t, 0, 100}];

unharm = 
      Plot[ x[t]  /.  unhsol, {t, 0, 10}, 
        PlotStyle -> {RGBColor[1, 0, 1]}, 
        AxesLabel -> {t, x[t]}]

Unharmonic Oscillation (perturbative solution)

x'' (t) + 
        x (t) = -e (((x (t)))^3)

The perturbative solution is

xpert[t_]  :=  
      A Cos[t]  +  
        e ( A^3/32 Cos[3 t]  -  A^3  3/8  t Sin[t]); 
    xpert[t]

where the amplitude A is fixed by the initial condition

amp = NSolve[xpert[0] == 1 , A];

For e=1/10

N[amp  /.  e -> 1/10 ]

pert = 
      Plot[xpert[t]   /.  amp[[3]]  /.  e -> 1/10 , {t, 0, 
          10}, PlotStyle -> {RGBColor[0, 1, 1]}, 
        AxesLabel -> {t, x[t]}]

Comparison

Show[harm, unharm, pert]

Show[harm, unharm, pert, 
      PlotRange -> {{4, 5}, Automatic}]

Large t behavior

Plot[{xpert[t]  /.  amp[[3]]  /.  e -> 1/10 ,  
        x[t]  /.  unhsol , 
 x[t]  /.  harmsol}, {t, 
        0, 100}, 
      PlotStyle -> {RGBColor[0, 1, 1], RGBColor[1, 0, 1], 
          RGBColor[1, 0, 0]}, AxesLabel -> {t, x[t]}]

Unharmonic Oscillation (Poincare-Lindstedt Expansion)

xpl[t_] :=  
        A Cos[  ( 1 +  3 A^2/8  e) t]  +  
          e A^3/32 Cos[ 3 (1 + 3  A^2/8 e ) t];

pl = 
      Plot[xpl[t]   /.  amp[[3]]  /.  e -> 1/10 , {t, 0, 
          10}, PlotStyle -> {RGBColor[0, 0.5, 1]}, 
        AxesLabel -> {t, x[t]}]

Comparison 2

Show[unharm, pl, harm]

Plot[{xpl[t]  /.  amp[[3]]  /.  e -> 1/10 ,  
        x[t]  /.  unhsol }, {t, 0, 100}, 
      PlotStyle -> {RGBColor[0, 1, 1], RGBColor[1, 0, 1]}, 
      AxesLabel -> {t, x[t]}]