

ExamplesAuxiliary FunctionsThe function PolyOrderList[equations, x[t], eps, maxOrder] substitutes Sum[eps^i x[i][t], {i, 0, maxOrder}] for x[t] into the differential equation and the initial conditions, and calculates the resulting equations of orders 0 to maxOrder.
PolyOrderList[{x''[t] + eps (x'[t])^3 + x[t] == 0, x[0] == a, x'[0] == b}, x[t], eps, 3] GeneralOrderList[equations, x[t], eps, asList]uses a given list asList of gauge functions (part of an asymptotic sequence) in the small parameter eps, instead of polynomials. It substitutes Sum[asList[[i]] x[i][t], {i, Length[asList]}] for x[t] into the differential equation and the initial conditions and prints and returns the resulting equations in rising order. The printing of the equations can be turned off with the option PrintEquations > True. The option ReturnGaugeFcts > True produces a list of the resulting equation and the corresponding gauge functions.
GeneralOrderList[ {x''[t] + Sin[eps x[t]] == 0, x[0] == 1, x'[0] == 1}, x[t], eps, {1, Sin[eps], Sin[eps]^2}]
GeneralOrderList[ {(x + eps y[x]) y'[x] + y[x] == 0, y[1] == 1/eps}, y, eps, {1/eps, 1, eps}] The option PrintEquations > False turns off printing the equations. The corresponding gauge functions are added to the result by setting the option ReturnGaugeFcts > True.
GeneralOrderList[ {(x + eps y[x]) y'[x] + y[x] == 0, y[1] == 1/eps}, y, eps, {1/eps, 1, eps}, PrintEquations > False, ReturnGaugeFcts > True] It is sometimes necessary to split a combined list of differential equations and initial conditions into those two parts:
Separate[{x''[t] + eps (x'[t])^3 + x[t] == 0, x[0] == a, x'[0] == b}, x[t], t] The following function returns the order of the highest derivative in a list of equations:
MaxDerivative[{x''[t] + eps (x'[t])^3 + x[t] == 0, x[0] == a, x'[0] == b}]
Asymptotic ExpansionsThe coefficient c[i] of the asymptotic expansion of a function f[eps] (for eps > 0) with respect to a list g of gauge functions (in eps) is calculated (for n = 1, ... , m) according to:c[n] = Limit[(f[eps]  Sum[c[i] g[[i]], {i, n1}])/g[[n]], eps > 0, Direction > 1]. The function AsymptoticCoefficients[f[eps, ...], gaugeFcts, eps] returns the list of the coefficients {c[1], ... , c[m]}:
AsymptoticCoefficients[Sin[eps + x], eps, Table[eps^j, {j, 0, 6}]] AsymptoticExpansion[f[eps, ...], gaugeFcts, eps] calculates the asymptotic expansion of the given function f, i.e., Sum[c[i] g[[i]], {i, m}].
AsymptoticExpansion[Sin[eps + x], eps, Table[eps^j, {j, 0, 6}]] Lists of gauge functions can be ordered with the help of AsymptoticSort[list, eps]. Gauge functions of the same order are combined into sublists.
AsymptoticSort[ {Log[eps], Sin[eps], 1/eps, 2 eps^2, Sin[eps]^2, 1/Sin[eps], eps Log[eps], 3 eps}, eps]
Regular Perturbation, Straightforward ExpansionsThe asymptotic expansion of the solution of ordinary differential equations is generated by substituting Sum[eps^i x[i][t], {i, 0, maxOrder}] for x[t] into the equation and solving the resulting equations (in increasing order).PolyOrderSolutionList[equations, x[t], t, eps, maxOrder] returns the list of the asymptotic expansions of the solution (of the equations equations, in the function x[t], with the small parameter eps) up to the desired maximum order. Initial conditions are passed as equations, analogously to the parameters of DSolve.
PolyOrderSolutionList[ { x''[t] + eps (x'[t])^3 + x[t] == 0, x[0] == 1, x'[0] == 0 }, x[t], t, eps, 2] Witch the option AllOrders > False, PolyOrderSolutionList (and GeneralOrderSolutionList) only returns the highest order approximation.
PolyOrderSolutionList[ { x''[t] + eps (x'[t])^3 + x[t] == 0, x[0] == 1, x'[0] == 0 }, x, t, eps, 2, AllOrders > False] The transformation rules are similar to the results of DSolve.
Plot[x[t] /. %[[1]] /. eps > .1, {t, 0, 10}]
Expansions with Respect to General Asymptotic SequencesGeneralOrderSolutionList[equations, x[t], t, eps, asList] returns uses a general asymptotic list of gauge functions instead of polynomials. This can be useful in cases where PolyOrderSolutionList fails.
PolyOrderSolutionList[ {(x + eps y[x]) y'[x] + y[x] == x, y[1] == 1/eps}, y, x, eps, 1, AllOrders > False] This solution does not satisfy the initial condition:
y[1] /. %[[1]]
GeneralOrderSolutionList[ {(x + eps y[x]) y'[x] + y[x] == x, y[1] == 1/eps}, y, x, eps, {1/eps, 1, eps}, AllOrders > False]
y[1] /. %[[1]]
Strained CoordinatesThe method of strained coordinates is useful when the exact solution has a different frequency than the solution of the unperturbed system (eps = 0). Straightforward expansions of such equations produce secular terms (growing polynomially in the independent variable) and therefore are not uniform asymptotic expansions for infinite domains.The method of LinstedtPoincarŽ works with an almost identical transformation of the independent variable t to an new variable s, according to: t = s (1 + Sum[eps^i o[i], {i, 0, maxOrder}]). The o[i] are chosen such that the secular terms vanish. The following straightforward expansion has such a secular term (6 t eps Sin[t]):
PolyOrderSolutionList[ {x''[t]+x[t]+eps x[t]^3==0, x[0]==1, x'[0]==0}, x[t], t, eps, 1] The method of strained coordinates results in a better approximation. StrainedSolutionList[equations, x[t], t, eps, maxOrder] returns this expansion (the parameters are analogous to PolyOrderSolutionList).
StrainedSolutionList[ {x''[t]+x[t]+eps x[t]^3==0, x[0]==1, x'[0]==0}, x[t], t, eps, 1]
Plot[ Evaluate[x[t] /. Last /@ {%, %%} /. eps > .3], {t, 0, 50}]
Matched and Composite ExpansionsIf the small parameter (eps) multiplies the highest derivative, a straightforward expansion does not work, because there are not enough free constants to satisfy the initial conditions. Physically spoken, there is a boundary layer, where the changes of the functions have a different scale. The method of matched and composite expansions enlarges this boundary layer with a suitable coordinate transformation (e.g., tau = t/eps). It solves the equations in the boundary layer and outside of it by asymptotic expansions. The solutions are matched, such that they agree in an overlapping region, and combined.Such expansions can display the physical properties of solutions more clearly than the formulas for the exact solution (if available). Of course, the asymptotic expansion of the exact solution should be asymptotically equivalent to the composite solution. The following example shows a simple equation which can not be expanded in a straightforward fashion:
PolyOrderSolutionList[ {eps x''[t]+x'[t]+x[t]==0, x[0]==a, x[1]==b}, x[t], t, eps, 1] The auxiliary function BoundaryLayerEquation[equation, bndRel, x[t], t, tau, eps] calculates the equation for the boundary layer by transforming the independent variable t to tau, where t and tau are connected according to a given equation, e.g.: tau==t/eps. For a small eps, this enlarges the interval from t=0 to a small positive value of t.
BoundaryLayerEquation[ eps x''[t]+x'[t]+x[t]==0, tau==t/eps, x[t], t, tau, eps] The function MatchedSolutionList[equations, bndRel, x[t], t, tau, eps, maxOrder] returns the list of the solutions up to the desired order.
MatchedSolutionList[ {eps x''[t]+x'[t]+x[t]==0, x[0]==a, x[1]==b}, tau==t/eps, x[t], t, tau, eps, 2] We can choose different initial conditions:
MatchedSolutionList[ {eps x''[t]+x'[t]+x[t]==0, x[0]==1, x'[0]==0}, tau==t/eps, x[t], t, tau, eps, 2] In this following example, DSolve gives us the exact solution:
DSolve[ {eps x''[t]+x'[t]+x[t]==0, x[0]==1, x'[0]==0}, x[t], t] Note that the dependence on the small parameter eps can be seen much more clearly in the expansion! Up to PerturbationODE 
[Top] 