1
$\begingroup$

Suppose the function

f[s2_,m_,m2_] = (s2 - m^2 + m2^2 -Sqrt[m^4 - 2m^2(s2+m2^2) + (s2-m2^2)^2])/(s2 - m^2 + m2^2 +Sqrt[m^4 - 2m^2(s2+m2^2) + (s2-m2^2)^2])

defined on the domain

$m > 0, \quad m2 > 0, \quad s2\geqslant(m+m2)^2$

This is real positive function, tending to one at $s2 = (m+m2)^2$. Mathematica's output for f[(m+m2)^2,m,m2] gives 1, as it must be. But when I try to evaluate the function for particular values of arguments, say, f[(5+0.1)^2,5,0.1], it returns complex numbers with the imaginary part not negligibly small, 1. -9.34975*10^-7i!

Will this cause any problems in numerical simulations involving the function?

$\endgroup$
1
  • 3
    $\begingroup$ A slight reformulation of your expression works wonders for numerical stability: f[s2_, m_, m2_] := (4 m2^2 s2)/(s2 - m^2 + m2^2 + Sqrt[(m + m2)^2 - s2] Sqrt[(m - m2)^2 - s2])^2 $\endgroup$ Aug 5, 2017 at 9:15

1 Answer 1

3
$\begingroup$

looks like floating point noise/rounding off related etc... Always safer to use Exact values, in particular since your function is complicated and has powers and sqrt roots all over.

 f[(5 + 1/10)^2, 5, 1/10]

Mathematica graphics

Compare to

 f[(5+0.1)^2,5,0.1]

Mathematica graphics

$\endgroup$

Your Answer

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

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