# Approximating expression where one variable is much bigger than another one

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.

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 ]

• ...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! Apr 30 '19 at 13:15