I'm trying to approximate a generic function F[a,b,c], such as (a + b) (b + c) (a + c) or (a + 2b) (b + c) (a + c), with the assumption a>>b. Meaning a is comparatively larger than b, but not necessarily larger than c. Nor is b necessarily larger than c. In limit form, I believe what I wish to express is Limit[F[a,b,c],{a/b->Infinity}]

The expected result, for the given examples, is a (b + c) (a + c)

I have tried all the usual ways of performing this, such as:

Normal[(a + b) (b + c) (a + c) /. {a -> a + O[b]}]

Normal[Series[(a + b) (b + c) (a + c), {a, \[Infinity], 0}]]

Normal[Series[(a + b) (b + c) (a + c) /. b -> c/\[Epsilon], {\[Epsilon], 0, 0}]] /. {\[Epsilon] -> c/b}

None of which work, as I suspected. All of these methods don't really capture a>>b, but instead use some feature of the expression to simulate the behavior of a>>b. For instance:

  1. The big O notation trick works for expressions with decoupled cross terms, such as:

Normal[(a + b) (a + c) /. {a -> a + O[b]}] -> a (a + c)

but doesn't really work because ultimately Normal resolves these two expressions differently:

Normal[a b + b O[b]] -> a b

Normal[a b + c O[b]] -> 0

which is not an issue, because that is what big O notation is meant to capture. This just means big O is not the way to go when trying for a>>b approximations, expect for certain cases.

  1. Expansion of the expression in a about Infinity is not useful as it assumes that a is absolutely larger. Meaning a is larger than both b and c. Therefore,

Normal[Series[(a + b) (b + c) (a + c), {a, \[Infinity], 0}]]

should not, and does not, work.

  1. The epsilon trick feels like it should work and does if we apply it toward a reciprocal function, such as:

Normal[Series[1/((a + b) (b + c)) /. a -> b/\[Epsilon], {\[Epsilon], 0, 1}]] /. {\[Epsilon] -> b/a} -> 1/(a (b + c))

but fails for the original function and it's inverse:

Normal[Series[1/((a + b) (b + c) (a + c)) /. a -> b/\[Epsilon], {\[Epsilon], 0, 1}]] /. {\[Epsilon] -> b/a} -> 0

I'm uncertain as to why, but I believe it has to do with the fact that there are two as now being substituted.

Is there a way of doing this in Mathematica? Ideally, I'd like the method to work with the expression and the expression's inverse.


1 Answer 1


You know a>>b. Just substitute b -> eps a , make a series expansion for small eps and reset the normalized result with eps -> b/a. That's all.

Simplify[Normal[ Series[(a + b) (b + c) (a + c) /. b -> eps a , {eps, 0,1}]] /. eps -> b/a ]
(*(a + c) (b c + a (b + c))*)
  • $\begingroup$ That's not returning the result a(b+c)(a+c) $\endgroup$ Commented Apr 30, 2019 at 11:24
  • $\begingroup$ This result is not the first order expansion of the expression!! $\endgroup$ Commented Apr 30, 2019 at 11:32
  • $\begingroup$ ...supplement: Your result a(b+c)(a+c) is not the first order expansion of the expression because (b+c)(a+c) also contributes to the expansion! $\endgroup$ Commented Apr 30, 2019 at 13:15

Your Answer

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

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