This is the first time I use Mathematica, and I wonder how to use Solve and Reduce. The following code is taken from a geometric problem; if you are interested in the setup, see below.

My problem is that the following code

a1 := 180 Degree - a;
x0 := {0, 0, 0};
d1 := {1, 0, 0};
x1 := x0 + d1;
d2 := {Cos[a1], Sin[a1], 0};
x2 := x1 + d2;
d3 := RotationMatrix[b,d2] . RotationMatrix[a1, Cross[d1, d2]] . d2
x3 := x2 + d3;
d4 := RotationMatrix[b,d3] . RotationMatrix[a1, Cross[d2, d3]] . d3
x4 := x3 + d4;
a := 90 Degree; 
Reduce[x0==x4, b, Reals]

evaluates to False; however, if I run

b := 0;
x0 == x4;

I obtain True as expected.

Question: Why does Reduce evaluate to False although a solution b=0 exists?

Geometric meaning: consider 4 straight lines of length 1 in R^3 with an angle a at each vertex. Denote by b the angle enclosed by the two planes described by any edge and its two adjacent edges. For which choice of b can we close the loop?


1 Answer 1


RotationMatrix involves a lot of instances of Conjugate. You can get rid of them with ComplexExpand and Simplify:

a1 = 180 Degree - a;
x0 = {0, 0, 0};
d1 = {1, 0, 0};
x1 = x0 + d1;
d2 = {Cos[a1], Sin[a1], 0};
x2 = x1 + d2;
d3 = Simplify@ ComplexExpand[RotationMatrix[b, d2].RotationMatrix[a1, Cross[d1, d2]].d2];
x3 = x2 + d3;
d4 = Simplify@ ComplexExpand[RotationMatrix[b, d3].RotationMatrix[a1, Cross[d2, d3]].d3];
x4 = x3 + d4;
a = 90 Degree;
Reduce[x0 == x4, b, Reals]

C[1] ∈ Integers && b == 2 π C[1]

Still, it is not okay for Reduce to evaluate to False. It should stay rather unevaluated if it cannot decide correctly. I think you should report this to Wolfram Support.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.