MathGroup Archive 2001

[Date Index] [Thread Index] [Author Index]

Search the Archive

a bug in Solve

  • To: mathgroup at smc.vnet.net
  • Subject: [mg30892] a bug in Solve
  • From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
  • Date: Sun, 23 Sep 2001 02:16:32 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

It seems to me that I have come across a rather devious bug in Solve 
which causes it to fail to solve systems of trigonometric equations 
which in fact it ought to be (or "is") able to solve.

Here is an example:

Consider the system of equations:

eqs = {Cos[x] == -Sqrt[(2/85)*(19 + Sqrt[21])],
    Sin[x] == (1/4)*(-Sqrt[(2/85)*(19 + Sqrt[21])] +
       Sqrt[(42/85)*(19 + Sqrt[21])]),
    Cos[y] == (1/21)*(7 + 3*Sqrt[21]),
    Sin[y] == (1/84)*(77*Sqrt[(2/85)*(19 + Sqrt[21])] - 
13*Sqrt[(42/85)*(19 + Sqrt[21])]),
    Cos[z] == (1/4)*(Sqrt[(2/85)*(19 + Sqrt[21])] -
       Sqrt[(42/85)*(19 + Sqrt[21])]),
    Sin[z] == -Sqrt[(2/85)*(19 + Sqrt[21])]}

Trying to solve this directly leads to a misleading answer:

In[37]:=
Solve[eqs, {x, y, z}]

 From In[37]:=
Solve::ifun:Inverse functions are being used by Solve, so some solutions 
may \
not be found.
Out[37]=
{}

However, if we break up the system into three systems of equations in a 
single variable Mathematica solves them correctly:

eqs1 = Partition[eqs, 2];

In[39]:=
MapThread[Solve, {eqs1, {x, y, z}}]

 From In[39]:=
Solve::ifun:Inverse functions are being used by Solve, so some solutions 
may \
not be found.

 From In[39]:=
Solve::ifun:Inverse functions are being used by Solve, so some solutions 
may \
not be found.

 From In[39]:=
Solve::ifun:Inverse functions are being used by Solve, so some solutions 
may \
not be found.

 From In[39]:=
General::stop:Further output of Solve::ifun will be suppressed during 
this \
calculation.

Out[39]=
{{{x -> ArcCos[-Sqrt[(2/85)*(19 + Sqrt[21])]]}},
   {{y -> ArcCos[(1/21)*(7 + 3*Sqrt[21])]}},
   {{z -> -ArcCos[(1/340)*(Sqrt[170*(19 + Sqrt[21])] -
          Sqrt[3570*(19 + Sqrt[21])])]}}}

Finally, let me explain how I came across this. Consider the matrix:

In[40]:=
Z = {{1/3 + Sqrt[3/7], -(1/3) + 2/Sqrt[21], -(1/3) + 1/Sqrt[21]},
     {-(1/3) + 1/Sqrt[21], 1/3 + Sqrt[3/7], 1/3 - 2/Sqrt[21]},
     {-(1/3) + 2/Sqrt[21], 1/3 - 1/Sqrt[21], 1/3 + Sqrt[3/7]}};

It is easy to check that it belongs to SO(3)

In[41]:=
Z.Transpose[Z]//Simplify

Out[41]=
{{1,0,0},{0,1,0},{0,0,1}}

In[42]:=
Det[Z]

Out[42]=
1

Now load the Geometry`Rotations` package:

<< Geometry`Rotations`

Since Z is in SO(3) we should be able to find the Euler angles of Z but 
using Solve produces:

In[44]:=
Solve[Thread[Flatten[RotationMatrix3D[a,b,c]]==Flatten[Z]],{a,b,c}]

 From In[44]:=
Solve::ifun: Inverse functions are being used by Solve, so some 
solutions may \
not be found.

Out[44]=
{}

However,

In[45]:=
Reduce[Thread[Flatten[RotationMatrix3D[a,b,c]]==Flatten[Z]],{Cos[a],
     Cos[b],Cos[c]}]

Out[45]=
Cos[a] == -Sqrt[(2/85)*(19 + Sqrt[21])] &&
    Cos[b] == (1/21)*(7 + 3*Sqrt[21]) &&
    Cos[c] == (1/4)*(Sqrt[(2/85)*(19 + Sqrt[21])] -
       Sqrt[(42/85)*(19 + Sqrt[21])]) &&
    Sin[a] == (1/4)*(-Sqrt[(2/85)*(19 + Sqrt[21])] +
       Sqrt[(42/85)*(19 + Sqrt[21])]) &&
    Sin[b] == (1/84)*(77*Sqrt[(2/85)*(19 + Sqrt[21])] -
       13*Sqrt[(42/85)*(19 + Sqrt[21])]) &&
    Sin[c] == -Sqrt[(2/85)*(19 + Sqrt[21])] ||
   Cos[a] == Sqrt[(2/85)*(19 + Sqrt[21])] &&
    Cos[b] == (1/21)*(7 + 3*Sqrt[21]) &&
    Cos[c] == (1/4)*(-Sqrt[(2/85)*(19 + Sqrt[21])] +
       Sqrt[(42/85)*(19 + Sqrt[21])]) &&
    Sin[a] == (1/4)*(Sqrt[(2/85)*(19 + Sqrt[21])] -
       Sqrt[(42/85)*(19 + Sqrt[21])]) &&
    Sin[b] == (1/84)*(-77*Sqrt[(2/85)*(19 + Sqrt[21])] +
       13*Sqrt[(42/85)*(19 + Sqrt[21])]) &&
    Sin[c] == Sqrt[(2/85)*(19 + Sqrt[21])]

This seems to suggest that the reason why Mathematica can't make the 
final step and return a solution for a,b and c is probably  related to 
the problem I begun with.

Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/


  • Prev by Date: Re: RGBColor [?,?,?]
  • Next by Date: Re: Problem with Interval Calculations?
  • Previous by thread: Mathematica notebook saving bug ?
  • Next by thread: Open Write?