coordmaker.mw

The following program will produce the coordinates of the representation of group S4, Conjugacy Class 1, Example 1.

> restart;

> with(linalg):

Warning, the protected names norm and trace have been redefined and unprotected

> with(LinearAlgebra):

Warning, the name GramSchmidt has been rebound

> w:=1;

w := 1

Z is a matrix which will be used to compute the equilibrium stress later.

> z:=matrix([[2,0,0],[0,2,0],[0,0,2]]);

z := matrix([[2, 0, 0], [0, 2, 0], [0, 0, 2]])

ng1, ng2, and ng3 are each the matricies for cable 1, cable 2, and the strut, respectively.

> ng1:=matrix([[0,1,0],[-1,0,0],[0,0,1]]);

ng1 := matrix([[0, 1, 0], [-1, 0, 0], [0, 0, 1]])

> ng2:=matrix([[0,0,-1],[-1,0,0],[0,1,0]]);

ng2 := matrix([[0, 0, -1], [-1, 0, 0], [0, 1, 0]])

> ng3:=matrix([[1,0,0],[0,-1,0],[0,0,-1]]);

ng3 := matrix([[1, 0, 0], [0, -1, 0], [0, 0, -1]])

The following lines compute (1-g1)+(1-inverse(g1))+w(1-g2)+w(1-inverse(g2))+t(1-g3)+t(1-inverse(g3)), where g1, g2, and g3 are represented by ng1, ng2, and ng3. (g1, g2, and g3 are used in thw code as the matricies that generate all of S4.) w is the stress ratio between cable 1 and cable 2, and t is the resultant equilibrium stress on the strut.

> a:=matrix(evalm(z-ng1-transpose(ng1)));

a := matrix([[2, 0, 0], [0, 2, 0], [0, 0, 0]])

> tb:=matrix(evalm(z-ng2-transpose(ng2)));

tb := matrix([[2, 1, 1], [1, 2, -1], [1, -1, 2]])

> wmat:=matrix([[w,0,0],[0,w,0],[0,0,w]]);

wmat := matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])

> b:=evalm(tb.wmat);

b := matrix([[2, 1, 1], [1, 2, -1], [1, -1, 2]])

> td:=evalm(z-ng3-transpose(ng3));

td := matrix([[0, 0, 0], [0, 4, 0], [0, 0, 4]])

> tmat:=matrix([[t,0,0],[0,t,0],[0,0,t]]);

tmat := matrix([[t, 0, 0], [0, t, 0], [0, 0, t]])

> d:=evalm(td.tmat);

d := matrix([[0, 0, 0], [0, 4*t, 0], [0, 0, 4*t]])

> evalm(a+b+d);

matrix([[4, 1, 1], [1, 4+4*t, -1], [1, -1, 2+4*t]])

Finding the determinant of the above matrix will produce the equilibrium stress for t.

> det(%);

20+88*t+64*t^2

> solve(%=0,t);

-11/16+1/16*41^(1/2), -11/16-1/16*41^(1/2)

Taking t to be the least negative value of the above choices:

> t:=-1/8*(2+6*w+3*w^2-(4+8*w+8*w^2+12*w^3+9*w^4)^(1/2))/(1+w);

t := -11/16+1/16*41^(1/2)

> tmat:=matrix([[t,0,0],[0,t,0],[0,0,t]]);

tmat := matrix([[-11/16+1/16*41^(1/2), 0, 0], [0, -11/16+1/16*41^(1/2), 0], [0, 0, -11/16+1/16*41^(1/2)]])

> d:=evalm(td.tmat);

d := matrix([[0, 0, 0], [0, -11/4+1/4*41^(1/2), 0], [0, 0, -11/4+1/4*41^(1/2)]])

> evalm(a+b+d);

matrix([[4, 1, 1], [1, 5/4+1/4*41^(1/2), -1], [1, -1, -3/4+1/4*41^(1/2)]])

The kernel of this matrix will then produce the seed for the representation, which will produce each point in the representation.

> kernel(%);

{vector([-9/20-1/20*41^(1/2), 1, 4/5+1/5*41^(1/2)])}

> tk:=%[1];

tk := vector([-9/20-1/20*41^(1/2), 1, 4/5+1/5*41^(1/2)])

> k:=matrix([[tk[1]],[tk[2]],[tk[3]]]);

k := matrix([[-9/20-1/20*41^(1/2)], [1], [4/5+1/5*41^(1/2)]])

g1, g2, and g3 are the matricies which will generate S4.

> g1:=matrix([[0,-1,0],[-1,0,0],[0,0,-1]]);

g1 := matrix([[0, -1, 0], [-1, 0, 0], [0, 0, -1]])

> g2:=matrix([[0,0,1],[1,0,0],[0,1,0]]);

g2 := matrix([[0, 0, 1], [1, 0, 0], [0, 1, 0]])

> g3:=matrix([[0,0,-1],[0,1,0],[1,0,0]]);

g3 := matrix([[0, 0, -1], [0, 1, 0], [1, 0, 0]])

Multiplying be each of the following will produce the coordinates for each vertex of the representation.

> evalf(transpose(evalm(g1.k)));
evalf(transpose(evalm(g2.k)));

evalf(transpose(evalm(g3.k)));

evalf(transpose(evalm(g1.g2.k)));

evalf(transpose(evalm(g1.g3.k)));

evalf(transpose(evalm(g2.g2.k)));

evalf(transpose(evalm(g2.g3.k)));

evalf(transpose(evalm(g3.g3.k)));

evalf(transpose(evalm(g1.g2.g2.k)));

evalf(transpose(evalm(g1.g2.g3.k)));

evalf(transpose(evalm(g1.g3.g3.k)));

evalf(transpose(evalm(g2.g2.g3.k)));

evalf(transpose(evalm(g2.g3.g3.k)));

evalf(transpose(evalm(g3.g3.g3.k)));

evalf(transpose(evalm(g1.g2.g2.g3.k)));

evalf(transpose(evalm(g1.g2.g3.g3.k)));

evalf(transpose(evalm(g1.g3.g3.g3.k)));

evalf(transpose(evalm(g2.g2.g3.g3.k)));

evalf(transpose(evalm(g2.g3.g3.g3.k)));

evalf(transpose(evalm(g1.g2.g2.g3.g3.k)));

evalf(transpose(evalm(g1.g2.g3.g3.g3.k)));

evalf(transpose(evalm(g2.g2.g3.g3.g3.k)));

evalf(transpose(evalm(g1.g2.g2.g3.g3.g3.k)));

matrix([[-1., .7701562118, -2.080624847]])

matrix([[2.080624847, -.7701562118, 1.]])

matrix([[-2.080624847, 1., -.7701562118]])

matrix([[.7701562118, -2.080624847, -1.]])

matrix([[-1., 2.080624847, .7701562118]])

matrix([[1., 2.080624847, -.7701562118]])

matrix([[-.7701562118, -2.080624847, 1.]])

matrix([[.7701562118, 1., -2.080624847]])

matrix([[-2.080624847, -1., .7701562118]])

matrix([[2.080624847, .7701562118, -1.]])

matrix([[-1., -.7701562118, 2.080624847]])

matrix([[1., -.7701562118, -2.080624847]])

matrix([[-2.080624847, .7701562118, 1.]])

matrix([[2.080624847, 1., .7701562118]])

matrix([[.7701562118, -1., 2.080624847]])

matrix([[-.7701562118, 2.080624847, -1.]])

matrix([[-1., -2.080624847, -.7701562118]])

matrix([[1., -2.080624847, .7701562118]])

matrix([[.7701562118, 2.080624847, 1.]])

matrix([[2.080624847, -1., -.7701562118]])

matrix([[-2.080624847, -.7701562118, -1.]])

matrix([[1., .7701562118, 2.080624847]])

matrix([[-.7701562118, -1., -2.080624847]])

>