NSolve unable to solve system of equations with domain specification

I have a system of two equations in two unknowns that I would like to solve with NSolve within a specified region.

However, while Mathematica solves the system if I omit the domain specification, it fails to do so when I include it.

Here is an example:

eq1 = (-0.9781476007338057 + Cos[x] Cos[y])^2 +
Cos[y]^2 Sin[x]^2 + (-0.20791169081775931 + Sin[y])^2 ==
0.04370479853238872;

eq2 = -0.058944236842231254 (-0.9781476007338057 + Cos[x] Cos[y]) -
0.20040259242104053 Cos[y] Sin[x] -
0.008317236704697833 (-0.20791169081775931 + Sin[y]) == 0;


NSolve returns four solutions:

NSolve[{eq1, eq2}, {x, y}]

{{x -> -3.13939, y -> 3.14158}, {x -> -3.12983,
y -> 2.72301}, {x -> 0.0022017, y -> 0.0000114031}, {x -> 0.0117594,
y -> 0.418582}}


Among these four solutions, I am only interested in the one that has positive $$x$$ and is sufficiently different from $$(0,0)$$, i.e., the last one. Hence I try to solve

NSolve[{eq1, eq2, x \[Element] Interval[{0.01, 0.5}]}, {x, y}]


which Mathematica returns unevaluated.

Can anybody help?

• FindRoot[{eq1, eq2}, {{x, .5}, {y, .5}}] Sep 30 '21 at 13:44
• First, there is more than one solution that has positive $x$ and is sufficiently different from $(0,0)$. Second, the equation is transcendental, not algebraic, although perhaps you didn't mean algebraic in its mathematical sense but meant "symbolic." Perhaps this: Solve[Rationalize[Rationalize@{eq1, eq2, 0.01 < x}, 0], {x, y}, Method -> Reduce] /. s_?NumericQ /; ! IntegerQ[s] && FreeQ[s, Pi] :> N@s or with the condition 0.01 < x || x > 0 && Abs[y] > 0.01 Sep 30 '21 at 14:45
• @MichaelE2: In view of the periodicity of $\sin$ and $\cos$ it's enough to consider the solutions on $(-\pi,\pi]\times(-\pi,\pi]$. Sep 30 '21 at 15:01
• @MichaelE2: Can you elaborate and ground " Your suggestion leaves the problem unfinished"? TIA. Sep 30 '21 at 15:24
• NSolve[{eq1, eq2, x > -Pi, x <= Pi, y > -Pi, y <= Pi}, {x, y}] results in {{x -> -3.13939, y -> 3.14158}, {x -> -3.12983, y -> 2.72301}, {x -> 0.0022017, y -> 0.0000114031}, {x -> 0.0117594, y -> 0.418582}} the same as NSolve[{eq1, eq2}, {x, y}]. Sep 30 '21 at 15:29

Restricting y too, we succeed:

NSolve[{eq1, eq2, x >= 0.01, x <= 0.5, y >= -5, y <= 5}, {x, y}, Reals]


or

NSolve[{eq1, eq2, x \[Element] Interval[{0.01, 0.5}], y >= -5, y <= 5}, {x, y}, Reals]


{{x -> 0.0117594, y -> 0.418582}}

• I am on Win7, Mma12.2 and it repeats the input back with both these variations. Is there some other option I have to use or is this new functionality? The functionality shown by OP works however.
– Syed
Sep 30 '21 at 14:04
• It's strange. The documentation says (at the bottom) NSolve was updated latest time in 2014 ( version 10.0). Works for me in 12.3.1 on Windows 10. Try it in cloud. Sep 30 '21 at 14:16
• @Syed - They also are unevaluated with v12.2 on a Mac Sep 30 '21 at 15:51

Combining the FindRoot usage suggested by @DerekH with manipulate:

Manipulate[
sol = FindRoot[{eq1, eq2}, {{x, xcoord}, {y, ycoord}}];
Show[{ContourPlot[Evaluate@{eq1, eq2}, {x, -10, 10}, {y, -10, 10},
PlotLabel -> Style[sol, Red, Bold], GridLines -> Automatic],
Graphics[{Red, PointSize[Medium], Point[{x, y} /. sol]}]
}],
{{xcoord, 0}, 0, 10, 0.2},
{{ycoord, 0}, 0, 10, 0.2}
]


If the OP wants to choose something sufficiently removed from the origin, there seem to be a lot of choices.

EDIT A more satisfying result would however be all the solutions in a bounded region.

solreduce =
Reduce[{x, y} \[Element] Disk[{0, 0}, 5] && eq1 && eq2, {x, y}]
sol3 = {ToRules@solreduce}


gives the ten closest results around origin bounded by the disk used to demarcate the region.

• The periodicity of Sin and Cos implies the periodicity of the solutions. It's enough to consider {x,-Pi,Pi} and {y,-Pi,Pi}. Sep 30 '21 at 14:58
• Agreed and the output of the Reduce shows that too. I have included this to show usage.
– Syed
Sep 30 '21 at 14:59