1 | initial version |
Here is how it works. In fact it is only slightly different from the above, but the two things that helped were canonicalize_radical()
and mapping the simplify to the final vector.
v1 = var('v1');
v2 = var('v2');
v3 = var('v3');
e1 = vector([1,0,0]);
v = vector([v1, v2, v3]);
T=(v1^2 + v2^2 + v3^2);
u = v/sqrt(T);
z=u.cross_product(e1);
c=u.dot_product(e1);
mat=Matrix( [[0, -z[3-1], z[2-1]], [z[3-1], 0, -z[1-1]], [-z[2-1], z[1-1], 0]] );
mrot=(matrix.identity(3) + mat + (1/(1+c)) * mat*mat);
mrot = mrot*sqrt(T);
mrot = mrot.apply_map(lambda e: e.canonicalize_radical());
view(["mrot*sqrt(T)", mrot])
e = mrot/sqrt(T)*u;
e = e.apply_map(lambda e: e.full_simplify())
e
Multiplying sqrt(T)
into mrot
and taking it out again when multiplying with u
is only for better readability.