3
$\begingroup$

Given a function f[x], I would like to have a function leadingSeries that returns just the leading term in the series around x=0. For example:

leadingSeries[(1/x + 2)/(4 + 1/x^2 + x)]

x

and

leadingSeries[(1/x + 2 + (1 - 1/x^3)/4)/(4 + x)]

-(1/(16 x^3))

Is there such a function in Mathematica? Or maybe one can implement it efficiently?

EDIT

I finally went with the following implementation, based on Carl Woll's answer:

lds[ex_,x_]:=( (ex/.x->(x+O[x]^2))/.SeriesData[U_,Z_,L_List,Mi_,Ma_,De_]:>SeriesData[U,Z,{L[[1]]},Mi,Mi+1,De]//Quiet//Normal)

The advantage is, that this one also properly works with functions whose leading term is a constant:

lds[Exp[x],x]

1

$\endgroup$
1

2 Answers 2

7
$\begingroup$

Update 1

Updated to eliminate SeriesData and to not return additional terms

Perhaps you could use:

leadingSeries[expr_, x_] := Normal[expr /. x->(x+O[x]^2) /. a_List :> Take[a, 1]]

Then for your examples:

leadingSeries[(1/x + 2)/(4 + 1/x^2 + x), x]
leadingSeries[Exp[x], x]
leadingSeries[(1/x + 2 + (1 - 1/x^3)/4)/(4 + x), x] // TeXForm

x

1

$-\frac{1}{16 x^3}$

One more example:

leadingSeries[x^100 (1/x + 2 + (1 - 1/x^2)/4)/(4 + x), x] // TeXForm

$-\frac{x^{98}}{16}$

This last example shows that leadingSeries works even when the leading term has a very high order. Using something like Series[expr, {x, 0, 1}] will not get the leading order, although it does return something that would be useful as a stepping stone towards the answer.

Update 2

Updated to support arbitrary expansion points

Here is a version for arbitrary expansion points:

leadingSeries[expr_, {x_, x0_}] := Normal[
    expr /. 
        x -> Series[x, {x, x0, 1}] /.
        Verbatim[SeriesData][a__, {b_, ___}, c__] :> SeriesData[a, {b}, c]
]

For example:

leadingSeries[Gamma[x],{x,Infinity}]//TeXForm

$\sqrt{2 \pi } \sqrt{\frac{1}{x}} e^{x \left(-\log \left(\frac{1}{x}\right)-1\right)}$

$\endgroup$
2
  • $\begingroup$ This is amazing! Simple and powerful. Thank you! $\endgroup$
    – Kagaratsch
    Jun 16, 2017 at 5:23
  • $\begingroup$ The only trouble is with things that start with a constant though... Exp[x] /. x -> (x + O[x]^2). But it should be easy enough to catch these cases. $\endgroup$
    – Kagaratsch
    Jun 16, 2017 at 5:26
2
$\begingroup$

Those using recent versions of Mathematica (12.1 or later, I believe) can achieve this with the built-in function Asymptotic

examples = {(1/x + 2)/(4 + 1/x^2 + x),
   Exp[x], (1/x + 2 + (1 - 1/x^3)/4)/(4 + x)};

Asymptotic[examples, x -> 0]
(* {x, 1, -(1/(16 x^3))} *)
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.