# Failure to minimize a given function under assumptions

Suppose the function

f[Ss_, s2_, t1_, m_, mp_, vf_, af_] = -(1/(96 π^3 s2^3 (mp^2-Ss)^4))(m^2-s2)^2 (af^2 (m^2 (4 mp^6+mp^4 (-3 s2-8 Ss+2 t1)+mp^2 (-3 s2^2+s2 t1+4 Ss (Ss-t1))+Ss (s2^2-s2 (Ss+t1)+2 Ss t1))+s2 (2 mp^6+mp^4 (6 s2-4 Ss+t1)+2 mp^2 (-3 s2^2+s2 (6 Ss+t1)+Ss (Ss-t1))+Ss (2 s2^2-2 s2 (Ss+t1)+Ss t1)))+vf^2 (m^2 (4 mp^6+mp^4 (-3 s2-8 Ss+2 t1)+mp^2 (-3 s2^2+s2 t1+4 Ss (Ss-t1))+Ss (s2^2-s2 (Ss+t1)+2 Ss t1))+s2 (2 mp^6+mp^4 (-6 s2-4 Ss+t1)+2 mp^2 (-3 s2^2+s2 t1+Ss (Ss-t1))+Ss (2 s2^2-2 s2 (Ss+t1)+Ss t1))))


is given with the additional definitions

lambda[a_, b_, c_] = a^2 + b^2 + c^2 - 2*(a*b + a*c + b*c);
t1lowerneutral = 2*mp^2 - 1/(2*Ss)*((Ss + mp^2)*(Ss - s2 + mp^2) + (Ss - mp^2)*Sqrt[lambda[Ss, s2, mp^2]]);
t1upperneutral = 2*mp^2 - 1/(2*Ss)*((Ss + mp^2)*(Ss - s2 + mp^2) - (Ss - mp^2)*Sqrt[lambda[Ss, s2, mp^2]]);


and assumptions

assumptions =
t1 > t1lowerneutral && t1 < t1upperneutral && s2 > m^2 &&
s2 < (Sqrt[Ss] - mp)^2 && Ss > (mp + m)^2 + 0.1 && mp > 0 &&
mp < 0.5 && m > 0


I want to minimize it numerically for the values m = 0.5, mp = 0.5, vf = af = 1, so I write

NMiminize[
{f[Ss, s2, t1, 0.5, 0.5, 1, 1], assumptions /. {mp -> 0.5, m -> 0.5}},
{Ss, s2, t1}]


But it returns me the result

NMinimize::nsol: There are no points that satisfy the constraints
{False}.
{∞, {Ss -> Indeterminate, s2 -> Indeterminate, t1 -> Indeterminate}}

From the expression for the function I see that it has only one singular point Ss -> mp^2. Moreover, it is the function bounded from above (and from below), and therefore I don't understand why it returns Indeterminate.

• If you evaluate assumptions /. {mp -> 0.5, m -> 0.5} you get False, so something in your assumptions is self contradictory -- irrespective of the minimization problem. I think it's the mp->0.5, which contradicts mp<0.5. – bill s Aug 13 '17 at 15:50

The "edge case" of your mp<.5 and mp->.5 is one issue. There is some deeper buried issue with your assumptions that I haven't been able to untangle. I believe I'm seeing that even with your assumptions that in NMinimize one or more of your square roots can go complex. But until then just apply a little brute force which your system seems to respond fairly sensibly to.

m = 0.5;
mp = 0.5;
f[Ss_,s2_,t1_,m_,mp_,vf_,af_]:= -(1/(96 \[Pi]^3 s2^3(mp^2-Ss)^4))*
(m^2-s2)^2(af^2(m^2(4 mp^6+mp^4(-3 s2-8 Ss+2 t1)+mp^2(-3 s2^2+
s2 t1+4 Ss(Ss-t1))+Ss(s2^2-s2(Ss+t1)+2 Ss t1))+s2(2 mp^6+mp^4(6 s2-
4 Ss+t1)+2 mp^2(-3 s2^2+s2(6 Ss+t1)+Ss(Ss-t1))+Ss(2 s2^2-2 s2(Ss+
t1)+Ss t1)))+vf^2(m^2(4 mp^6+mp^4(-3 s2-8 Ss+2 t1)+mp^2(-3 s2^2+
s2 t1+4 Ss(Ss-t1))+Ss(s2^2-s2(Ss+t1)+2 Ss t1))+s2(2 mp^6+mp^4(-
6 s2-4 Ss+t1)+2 mp^2(-3 s2^2+s2 t1+Ss(Ss-t1))+Ss(2 s2^2-2 s2(Ss+
t1) + Ss t1))));
lambda[a_, b_, c_] := a^2 + b^2 + c^2 - 2*(a*b + a*c + b*c);
t1lowerneutral = 2*mp^2-1/(2*Ss)*((Ss+mp^2)*(Ss-s2+mp^2)+(Ss-mp^2)*
Sqrt[lambda[Ss, s2, mp^2]]);
t1upperneutral = 2*mp^2-1/(2*Ss)*((Ss+mp^2)*(Ss-s2+mp^2)-(Ss-mp^2)*
Sqrt[lambda[Ss, s2, mp^2]]);
besterr = Infinity;
Do[
Ss = RandomReal[{(mp + m)^2 + 0.1, 40}];
s2 = RandomReal[{m^2, (Sqrt[Ss] - mp)^2}];
t1 = RandomReal[{t1lowerneutral, t1upperneutral}];
If[besterr > f[Ss, s2, t1, m, mp, 1, 1],
besterr = f[Ss, s2, t1, m, mp, 1, 1]; Print[{besterr, Ss, s2, t1}]]
, {10^5}]


and in a handful of seconds that will show where your function becomes very slightly negative.

Adjust the upper bound on Ss and the number of iterations and see how it behaves.