KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > JSci > maths > algebras > so3_1Dim4


1 package JSci.maths.algebras;
2
3 import JSci.maths.*;
4 import JSci.maths.matrices.AbstractComplexMatrix;
5 import JSci.maths.matrices.AbstractComplexSquareMatrix;
6 import JSci.maths.matrices.ComplexSquareMatrix;
7 import JSci.maths.vectors.AbstractDoubleVector;
8 import JSci.maths.vectors.DoubleVector;
9 import JSci.maths.fields.ComplexField;
10
11 /**
12 * The so3_1Dim4 class encapsulates so(3,1) algebras using
13 * the 4 dimensional (fundamental) representation.
14 * Elements are represented by vectors with a matrix basis.
15 * @version 1.2
16 * @author Mark Hale
17 */

18 public final class so3_1Dim4 extends LieAlgebra {
19 // Rotations
20
private final static Complex t1[][]={
21                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO},
22                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO},
23                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,ComplexField.MINUS_I},
24                 {Complex.ZERO,Complex.ZERO,Complex.I,Complex.ZERO}
25         };
26         private final static Complex t2[][]={
27                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO},
28                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.I},
29                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO},
30                 {Complex.ZERO,ComplexField.MINUS_I,Complex.ZERO,Complex.ZERO}
31         };
32         private final static Complex t3[][]={
33                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO},
34                 {Complex.ZERO,Complex.ZERO,ComplexField.MINUS_I,Complex.ZERO},
35                 {Complex.ZERO,Complex.I,Complex.ZERO,Complex.ZERO},
36                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO}
37         };
38 // Boosts
39
private final static Complex t4[][]={
40                 {Complex.ZERO,ComplexField.MINUS_I,Complex.ZERO,Complex.ZERO},
41                 {ComplexField.MINUS_I,Complex.ZERO,Complex.ZERO,Complex.ZERO},
42                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO},
43                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO}
44         };
45         private final static Complex t5[][]={
46                 {Complex.ZERO,Complex.ZERO,ComplexField.MINUS_I,Complex.ZERO},
47                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO},
48                 {ComplexField.MINUS_I,Complex.ZERO,Complex.ZERO,Complex.ZERO},
49                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO}
50         };
51         private final static Complex t6[][]={
52                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,ComplexField.MINUS_I},
53                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO},
54                 {Complex.ZERO,Complex.ZERO,Complex.ZERO,Complex.ZERO},
55                 {ComplexField.MINUS_I,Complex.ZERO,Complex.ZERO,Complex.ZERO}
56         };
57         /**
58         * Basis.
59         */

60         private final static AbstractComplexSquareMatrix basisMatrices[]={
61                 new ComplexSquareMatrix(t1),
62                 new ComplexSquareMatrix(t2),
63                 new ComplexSquareMatrix(t3),
64                 new ComplexSquareMatrix(t4),
65                 new ComplexSquareMatrix(t5),
66                 new ComplexSquareMatrix(t6)
67         };
68
69         private final static so3_1Dim4 _instance = new so3_1Dim4();
70         /**
71         * Constructs an so(3,1) algebra.
72         */

73         private so3_1Dim4() {
74                 super("so(3,1) [4]");
75         }
76         /**
77         * Singleton.
78         */

79         public static final so3_1Dim4 getInstance() {
80                 return _instance;
81         }
82         /**
83         * Returns an element as a matrix (vector*basis).
84         */

85         public AbstractComplexSquareMatrix getElement(final AbstractDoubleVector v) {
86                 AbstractComplexMatrix m=basisMatrices[0].scalarMultiply(v.getComponent(0));
87                 m=m.add(basisMatrices[1].scalarMultiply(v.getComponent(1)));
88                 m=m.add(basisMatrices[2].scalarMultiply(v.getComponent(2)));
89                 m=m.add(basisMatrices[3].scalarMultiply(v.getComponent(3)));
90                 m=m.add(basisMatrices[4].scalarMultiply(v.getComponent(4)));
91                 m=m.add(basisMatrices[5].scalarMultiply(v.getComponent(5)));
92                 return (AbstractComplexSquareMatrix)m.scalarMultiply(Complex.I);
93         }
94         /**
95         * Returns the Lie bracket (commutator) of two elements.
96         * Same as the vector cross product.
97         */

98         public AbstractDoubleVector multiply(final AbstractDoubleVector a, final AbstractDoubleVector b) {
99                 double array[]=new double[6];
100                 array[0]=a.getComponent(2)*b.getComponent(1)-a.getComponent(1)*b.getComponent(2)+
101                         a.getComponent(4)*b.getComponent(5)-a.getComponent(5)*b.getComponent(4);
102                 array[1]=a.getComponent(0)*b.getComponent(2)-a.getComponent(2)*b.getComponent(0)+
103                         a.getComponent(5)*b.getComponent(3)-a.getComponent(3)*b.getComponent(5);
104                 array[2]=a.getComponent(1)*b.getComponent(0)-a.getComponent(0)*b.getComponent(1)+
105                         a.getComponent(3)*b.getComponent(4)-a.getComponent(4)*b.getComponent(3);
106                 array[3]=a.getComponent(2)*b.getComponent(4)-a.getComponent(1)*b.getComponent(5)+
107                         a.getComponent(5)*b.getComponent(1)-a.getComponent(4)*b.getComponent(2);
108                 array[4]=a.getComponent(0)*b.getComponent(5)-a.getComponent(2)*b.getComponent(3)+
109                         a.getComponent(3)*b.getComponent(2)-a.getComponent(5)*b.getComponent(0);
110                 array[5]=a.getComponent(1)*b.getComponent(3)-a.getComponent(0)*b.getComponent(4)+
111                         a.getComponent(4)*b.getComponent(0)-a.getComponent(3)*b.getComponent(1);
112                 return new DoubleVector(array);
113         }
114         /**
115         * Returns the basis used to represent the Lie algebra.
116         */

117         public AbstractComplexSquareMatrix[] basis() {
118                 return basisMatrices;
119         }
120 }
121
122
Popular Tags