1
2
3Testing("LeviCivita");
4Verify(LeviCivita({1,2,3}),1);
5Verify(LeviCivita({2,1,3}),-1);
6Verify(LeviCivita({1,1,3}),0);
7
8Testing("Kronecker delta");
9Verify(KroneckerDelta(1,2),0);
10Verify(KroneckerDelta(3,3),1);
11Verify(KroneckerDelta(i,i),1);
12Verify(KroneckerDelta({2,2,2}),1);
13Verify(KroneckerDelta(1 .. 5),0);
14Verify(KroneckerDelta({i,i,k,j,l}),0);
15Verify(KroneckerDelta({2*i,2*i,2*i}),1);
16
17Testing("VectorProducts");
18[
19  Local(l,m,n);
20  l:={1,0,0};
21  m:={0,1,0};
22  n:={0,0,1};
23
24  Verify(l X m, {0,0,1});
25  Verify(m X n, {1,0,0});
26  Verify(n X l, {0,1,0});
27  Verify(l X n, {0,-1,0});
28
29  Verify(l . m, 0);
30  Verify(m . n, 0);
31  Verify(n . l, 0);
32
33  Verify(l . l, 1);
34];
35
36
37[
38  Local(a,b);
39
40/* Strangeness: change variable below into a, and the crossproducts
41 * later on fail!
42 */
43  a:={1,2,3};
44  b:={3,1,5};
45  Verify( a . b , 20);
46  Verify(CrossProduct({1,2,3} , {4,2,5}) , {4,7,-6});
47];
48Verify(aa,Hold(aa));
49
50[
51  Local(a,b);
52  NextTest("Inproduct");
53  a:={1,2,3};
54  b:={3,1,5};
55  Verify( a . b , 20);
56];
57
58Verify(CrossProduct({1,2,3} , {4,2,5}) , {4,7,-6});
59Verify({1,2,3} X {4,2,5},{4,7,-6});
60Clear(a,b);
61
62NextTest("Identity matrices");
63Verify(Identity(4),
64   { {1,  0,  0,  0} ,
65     {0,  1,  0,  0} ,
66     {0,  0,  1,  0} ,
67     {0,  0,  0,  1} });
68
69
70NextTest("Check linear algebra");
71/* Normalize */
72Testing("Normalize");
73Verify(Normalize({3,4}),{3/5,4/5});
74/* DiagonalMatrix */
75Testing("DiagonalMatrix");
76Verify(DiagonalMatrix({2,3,4}),{{2,0,0},{0,3,0},{0,0,4}});
77/* ZeroMatrix */
78Testing("ZeroMatrix");
79Verify(ZeroMatrix(2,3),{{0,0,0},{0,0,0}});
80/* Transpose */
81Testing("Transpose");
82Verify(Transpose({{a,b},{c,d}}),{{a,c},{b,d}});
83/* Determinant */
84Testing("Determinant");
85Verify(Determinant({{2,3},{3,1}}),-7);
86Verify( Determinant(ToeplitzMatrix(1 .. 10)), -2816 );
87// check that Determinant gives correct symbolic result
88TestYacas(Determinant({{a,b},{c,d}}),a*d-b*c);
89
90Testing("Matrix product");
91Verify({{a,b},{c,d}} * {{e,f},{g,h}}, {{a*e+b*g,a*f+b*h},{c*e+d*g,c*f+d*h}});
92Verify(TrapError({{a,b,x},{c,d,y}} * {{e,f},{g,h}}, True), True);
93
94[
95  Local(ll);
96  ll:={ {1,2,3},
97        {2,-1,4},
98        {3,4,3}
99      };
100  /* CoFactor */
101  Testing("CoFactor");
102  Verify(N(CoFactor(ll,1,2)),6);
103  /* Minor */
104  Testing("Minor");
105  Verify(N(Minor(ll,1,2)),-6);
106  /* Inverse */
107  Testing("Inverse");
108  Verify(Inverse(ll)*ll,Identity(3));
109  Verify(Inverse({{1,0},{2,3}})*{{1,0},{2,3}}, Identity(2));
110  Verify(Inverse({{1,2},{0,3}})*{{1,2},{0,3}}, Identity(2));
111  /* SolveMatrix */
112  Testing("SolveMatrix");
113  Verify(ll*SolveMatrix(ll,{1,2,3}),{1,2,3});
114  /* Trace */
115  Testing("Trace");
116  Verify(Trace(ll),1-1+3);
117  /* IsVector */
118  Verify(IsList(ll),True);
119  Verify(IsList({1,2,3}),True);
120  /* IsMatrix */
121  Verify(IsMatrix(ll),True);
122  Clear(ll);
123];
124
125[
126  Local(A);
127  Verify( IsSymmetric(Identity(10)), True );
128  Verify( IsOrthogonal(2*Identity(10)), False );
129  A := {{1,2,2},{2,1,-2},{-2,2,-1}};
130  Verify( IsOrthogonal(A/3), True );
131  Verify( IsSymmetric(Identity(10)), True );
132  Verify( IsSymmetric({{1}}),True );
133  A := {{1,0,0,0,1},{0,2,0,0,0},{0,0,3,0,0},{0,0,0,4,0},{1,0,0,0,5}};
134  Verify( IsSymmetric(A),True );
135  A := {{0,2,0,0,1},{0,0,3,0,0},{0,0,0,4,0},{1,0,0,0,5}};
136  Verify( IsSymmetric(A),False);
137  A := {{0,-1},{1,0}};
138  Verify( IsSkewSymmetric(A), True );
139  Verify( IsSkewSymmetric(Identity(10)), False );
140  Verify( IsSkewSymmetric(ZeroMatrix(10,10)), True );
141  Verify( IsIdempotent(Identity(20)), True );
142  Verify( IsIdempotent(ZeroMatrix(10,10)), True );
143];
144
145Verify( VandermondeMatrix({1,2,3,4}),{{1,1,1,1},{1,2,3,4},{1,4,9,16},{1,8,27,64}});
146
147Verify( JacobianMatrix( {x^4*y,Cos(y)}, { x, y}), {{4*x^3*y,x^4},{0,-Sin(y)}} );
148
149Verify( WronskianMatrix( {Sin(x),Cos(x)}, x) , {{Sin(x),Cos(x)},{Cos(x),-Sin(x)}} );
150
151Verify( Determinant(HilbertMatrix(5)), 1/266716800000 );
152
153Verify( HilbertMatrix(6)*HilbertInverseMatrix(6), Identity(6) );
154
155Verify( FrobeniusNorm({{1,2},{3,4}}), Sqrt(30) );
156
157Verify( Norm({1,2,3}), Sqrt(14) );
158
159Verify( OrthogonalBasis({{1,1,0},{2,0,1},{2,2,1}}) , {{1,1,0},{1,-1,1},{-1/3,1/3,2/3}} );
160Verify( OrthogonalBasis({{1,0,1,0},{1,1,1,0},{0,1,0,1}}), {{1,0,1,0},{0,1,0,0},{0,0,0,1}} );
161Verify( OrthonormalBasis({{1,0,1,0},{1,1,1,0},{0,1,0,1}}),
162	{{Sqrt(1/2),0,Sqrt(1/2),0},{0,1,0,0},{0,0,0,1}} );
163Verify( OrthonormalBasis({{1,1,1},{0,1,1},{0,0,1}}),
164	{{Sqrt(1/3),Sqrt(1/3),Sqrt(1/3)},
165	{-Sqrt(2/3),Sqrt(1/6),Sqrt(1/6)},
166	{0,-Sqrt(1/2),Sqrt(1/2)}} );
167
168[
169  Local(A,b);
170  A:={{1,2,4},{1,3,9},{1,4,16}};
171  b:={2,4,7};
172  Verify( MatrixSolve(A,b) , {1,(-1)/2,1/2} );
173  A:={{2,4,-2,-2},{1,2,4,-3},{-3,-3,8,-2},{-1,1,6,-3}};
174  b:={-4,5,7,7};
175  Verify( MatrixSolve(A,b), {1,2,3,4} );
176];
177
178[
179  Local(A,R);
180  A:={{4,-2,4,2},{-2,10,-2,-7},{4,-2,8,4},{2,-7,4,7}};
181  R:=Cholesky(A);
182  Verify( R, {{2,-1,2,1},{0,3,0,-2},{0,0,2,1},{0,0,0,1}} );
183  Verify( A, Transpose(R)*R );
184];
185
186[
187  Local(A,L,U);
188  A:={{2,1,1},{2,2,-1},{4,-1,6}};
189  {L,U} := LU(A);
190  Verify( L*U, A );
191];
192