TransWikia.com

Solve[] arbitrarily adding orders of magnitude which cancel?

Mathematica Asked by InertialObserver on March 21, 2021

Define the variables

m0 = .1349766;
mp = .13957018;
mX = (2 mp + 3 m0)/2;

Now suppose we wish to solve the following equation for equation Ep:

sols = Solve[(2 E0 Ep - 4 (E0 + Ep) mX + 4 mX^2 + m0^2)/(Sqrt[Ep^2 - mp^2] Sqrt[E0^2 - m0^2]) == 1, Ep]

Then, Mathematica returns

{{Ep -> (1.07446*10^47 + E0 (-4.59436*10^47 + 4.42011*10^47 E0) -  0.5 Sqrt[-3.79456*10^92 + E0 (2.32699*10^93 + E0 (1.73795*10^94 + E0 (-1.27726*10^95 + 1.89274*10^95 E0)))])/(3.05309*10^47 + E0 (-8.84022*10^47 + 4.84611*10^47 E0))}, 
{Ep -> (1.07446*10^47 + E0 (-4.59436*10^47 + 4.42011*10^47 E0) + 0.5 Sqrt[-3.79456*10^92 + E0 (2.32699*10^93 + E0 (1.73795*10^94 + E0 (-1.27726*10^95 + 1.89274*10^95 E0)))])/(3.05309*10^47 + E0 (-8.84022*10^47 + 4.84611*10^47 E0))}}

which is fine, I guess. But, as you can see, it’s introduced a bunch of factors of $10^{47}$ which cancel everywhere. This seems to me to be totally meaningless and could present a huge numerical hassle especially since none of my parameters are even remotely close to $10^{47}$.

So I guess my question is, how do I get Mathematica to stop introducing arbitrary factors of huge numbers in Solve[]?

One Answer

Perhaps this will work better?

mX = (2 mp + 3 m0)/2;

sols = Solve[(2 E0 Ep - 4 (E0 + Ep) mX + 4 mX^2 + 
      m0^2)/(Sqrt[Ep^2 - mp^2] Sqrt[E0^2 - m0^2]) == 1, Ep];

FullSimplify[sols]/.{m0 -> 0.1349766, mp -> 0.1397018}

Correct answer by MassDefect on March 21, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP