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:
- 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.
- Expansion of the expression in
a
about Infinity is not useful as it assumes thata
is absolutely larger. Meaninga
is larger than bothb
andc
. Therefore,
Normal[Series[(a + b) (b + c) (a + c), {a, \[Infinity], 0}]]
should not, and does not, work.
- 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 a
s 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.