Below is something that works in V8.0.4. Apparently something in Solve
was improved in V9, even though the docs indicate it was last modified in V8.
theta = 0.1; phi = 0.1;
a = 1 - 3 Sin[theta]^2*Cos[phi]^2;
b = 1 - 3 Sin[theta]^2*Cos[phi - (2 Pi/3)]^2;
c = 1 - 3 Sin[theta]^2*Cos[phi - (4 Pi/3)]^2;
Chop @ N @ Solve[
TrigExpand @ Rationalize[
a*b*Sin[(Sqrt[3] x - 3 y)/2] == a*c*Sin[(Sqrt[3] x + 3 y)/2] == -b*c*Sin[Sqrt[3] x],
0],
{x, y}] // AbsoluteTiming
Solve::ifun: Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete solution information. >>
(*
{6.69512,
{{x -> 0, y -> 0}, {x -> 0, y -> -6.28319}, ... {x -> 1.22392, y -> -6.2801}}}
*)
Comments:
The Solve::ifun
warning indicates that Reduce
might be a better function to use. Reduce
will give all the solutions with C[1]
, C[2]
parameters. Just replace Solve
with Reduce
, or use the option Solve[..., Method -> Reduce]
. You can be confident that roots are not missed.
TrigExpand
seems to break the terms down into easier-to-chew bites, probably because the arguments to the trigonometric functions become either (Sqrt[3] x)/2
or y/2
, which might make it easier to isolate x
or y
. (It would by hand, which led me to try it.)
Rationalize[..., 0]
turns the approximate real numbers into rational numbers, which have an exact representation. As @m_goldberg observes in an answer, Solve
usually happier with exact numbers.
Unexplained
@m_goldberg's solution, to use exact numbers for theta
and phi
, does not work in the above. My only guess is that the coefficients a
, b
, and c
have such complicated exact expressions that Solve
has a difficult time with them.
I also cannot explain why it works with the rounded coefficients. It seems highly unlikely to me that decimal places have a role in trigonometric functions or numbers that internally are represented in binary.