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; |
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]]); |
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]]); |
> | ng2:=matrix([[0,0,-1],[-1,0,0],[0,1,0]]); |
> | 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))); |
> | tb:=matrix(evalm(z-ng2-transpose(ng2))); |
> | wmat:=matrix([[w,0,0],[0,w,0],[0,0,w]]); |
> | b:=evalm(tb.wmat); |
> | td:=evalm(z-ng3-transpose(ng3)); |
> | tmat:=matrix([[t,0,0],[0,t,0],[0,0,t]]); |
> | d:=evalm(td.tmat); |
> | evalm(a+b+d); |
Finding the determinant of the above matrix will produce the equilibrium stress for t.
> | det(%); |
> | solve(%=0,t); |
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); |
> | tmat:=matrix([[t,0,0],[0,t,0],[0,0,t]]); |
> | d:=evalm(td.tmat); |
> | evalm(a+b+d); |
The kernel of this matrix will then produce the seed for the representation, which will produce each point in the representation.
> | kernel(%); |
> | tk:=%[1]; |
> | k:=matrix([[tk[1]],[tk[2]],[tk[3]]]); |
g1, g2, and g3 are the matricies which will generate S4.
> | g1:=matrix([[0,-1,0],[-1,0,0],[0,0,-1]]); |
> | g2:=matrix([[0,0,1],[1,0,0],[0,1,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))); |
> |