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