3

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

Kagaratsch
  • 11,955
  • 4
  • 25
  • 72
  • Possible duplicate of https://mathematica.stackexchange.com/questions/129283/defining-a-function-via-pattern-matching-with-seriesdata – Anjan Kumar Jun 16 '17 at 05:10

2 Answers2

7

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)}$

Carl Woll
  • 130,679
  • 6
  • 243
  • 355
2

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))} *)

mikado
  • 16,741
  • 2
  • 20
  • 54