# Minimize incorrectly reports: There are no points that satisfy the constraints { }

I've been trying to minimize this:

NMinimize[
{0.0011436611039371792
(-22.749891688107795 - x + Log[0.010964912280701754 a]/(12 π) +
Log[0.010964912280701754 b]/(12 π))^2 +
0.00028717641571726865
(-20.905057129569222 - x +  Log[0.010964912280701754 a]/(20 π) +
Log[0.010964912280701754 b]/(20 π) + Log[0.010964912280701754 c]/(30 π))^2 +
0.01400511186583103
(-23.86830932925918 - x + Log[0.010964912280701754 c]/(12 π))^2,
1.1690159611663095*10^14 <= a <= 7.30286103392343*10^14,
4.563696268657563*10^15 <= b <= 4.56879715466054*10^15,
4.570970079902989*10^15 <= c <= 6.177387478825724*10^15},
{x, a, b, c}]


But I've been unsuccesful.

Mathematica claims:

NMinimize::nsol: There are no points that satisfy the constraints {}.

I have tried to plug in several points within the specified constraints and I've got a real number everytime. So as far as I can tell the problem is well defined, mathematically speaking.

Now after playing with the command for a while, I noticed that when I round all the numbers ending with , I get a result. Like so:

NMinimize[
{0.00114366
(-22.7499 - x + Log[0.0109649 a]/(12 π) + Log[0.0109649 b]/(12 π))^2 +
0.000287176
(-20.9051 - x + Log[0.0109649 a]/(20 π) + Log[0.0109649 b]/(20 π) +
Log[0.0109649 c]/(30 π))^2 +
0.0140051 (-23.8683 - x + Log[0.0109649 c]/(12 π))^2,
1.16902*10^14 <= a <= 7.30286*10^14,
4.5637*10^15 <= b <= 4.5688*10^15,
4.57097*10^15 <= c <= 6.17739*10^15},
{x, a, b, c}]

{0.00662112,
{x -> -22.8238, a -> 1.16902*10^14, b -> 4.5637*10^15, c -> 6.02703*10^15}}


So I suppose I could use Round to round all the long numbers down. However, getting this function takes quite a long code. I would have to use Round in a lot of places. Not even mentioning the loss of precision. Is there a quicker way to evaluate the former command without having to use 18 x Round all over the code? I haven't found the answer to this anywhere.

• Please, if possible, supply a simpler function to minimize exhibiting the same issue. – mjw Mar 24 '19 at 19:35
• I trimmed it down to this (when I leave more, it starts working and the long numbers are the point, so I cant skip all of those): NMinimize[{(-x + Log[0.010964912280701754 a]/(12 [Pi]))^2 + (Log[ 0.010964912280701754 c]/(12 [Pi]))^2 + b^2, 1.1690159611663095*10^14 <= a <= 7*10^14, 4.563696268657563*10^15 <= b <= 410^15, 4.570970079902989*10^15 <= c <= 6*10^15}, {x, a, b, c}] – Pavel Mar 24 '19 at 19:45

This seems to be a precision problem. This seems to work:

NMinimize[SetPrecision[
{0.0011436611039371792 (-22.749891688107795 - x +
Log[0.010964912280701754 a]/(12 π) +
Log[0.010964912280701754 b]/(12 π))^2 +
0.00028717641571726865 (-20.905057129569222 - x +
Log[0.010964912280701754 a]/(20 π) +
Log[0.010964912280701754 b]/(20 π) +
Log[0.010964912280701754 c]/(30 π))^2 +
0.01400511186583103 (-23.86830932925918 - x +
Log[0.010964912280701754 c]/(12 π))^2,
1.1690159611663095*10^14 <= a <= 7.30286103392343*10^14,
4.563696268657563*10^15 <= b <= 4.56879715466054*10^15,
4.570970079902989*10^15 <= c <= 6.177387478825724*10^15},
50
], {x, a, b, c},
WorkingPrecision -> 40]


{0.006618105360153810779221751614203418258948, { x -> -22.82319564674859110474727841393537665003, a -> 1.169015961166309531250000000000000000000*10^14, b -> 4.563696268657563000000000000000000000000*10^15, c -> 6.177387478825724000000000000000000000000*10^15 } }