[4565] | 1 | |
---|
| 2 | //#define WANT_STREAM |
---|
| 3 | |
---|
| 4 | |
---|
| 5 | #include "include.h" |
---|
| 6 | |
---|
| 7 | #include "newmat.h" |
---|
| 8 | |
---|
| 9 | #include "tmt.h" |
---|
| 10 | |
---|
| 11 | #ifdef use_namespace |
---|
| 12 | using namespace NEWMAT; |
---|
| 13 | #endif |
---|
| 14 | |
---|
| 15 | |
---|
| 16 | /**************************** test program ******************************/ |
---|
| 17 | |
---|
| 18 | |
---|
| 19 | void trymat2() |
---|
| 20 | { |
---|
| 21 | // cout << "\nSecond test of Matrix package\n\n"; |
---|
| 22 | Tracer et("Second test of Matrix package"); |
---|
| 23 | Tracer::PrintTrace(); |
---|
| 24 | |
---|
| 25 | int i,j; |
---|
| 26 | |
---|
| 27 | Matrix M(3,5); |
---|
| 28 | for (i=1; i<=3; i++) for (j=1; j<=5; j++) M(i,j) = 100*i + j; |
---|
| 29 | Matrix X(8,10); |
---|
| 30 | for (i=1; i<=8; i++) for (j=1; j<=10; j++) X(i,j) = 1000*i + 10*j; |
---|
| 31 | Matrix Y = X; Matrix Z = X; |
---|
| 32 | { X.SubMatrix(2,4,3,7) << M; } |
---|
| 33 | for (i=1; i<=3; i++) for (j=1; j<=5; j++) Y(i+1,j+2) = 100*i + j; |
---|
| 34 | Print(Matrix(X-Y)); |
---|
| 35 | |
---|
| 36 | |
---|
| 37 | Real a[15]; Real* r = a; |
---|
| 38 | for (i=1; i<=3; i++) for (j=1; j<=5; j++) *r++ = 100*i + j; |
---|
| 39 | { Z.SubMatrix(2,4,3,7) << a; } |
---|
| 40 | Print(Matrix(Z-Y)); |
---|
| 41 | |
---|
| 42 | { M=33; X.SubMatrix(2,4,3,7) << M; } |
---|
| 43 | { Z.SubMatrix(2,4,3,7) = 33; } |
---|
| 44 | Print(Matrix(Z-X)); |
---|
| 45 | |
---|
| 46 | for (i=1; i<=8; i++) for (j=1; j<=10; j++) X(i,j) = 1000*i + 10*j; |
---|
| 47 | Y = X; |
---|
| 48 | UpperTriangularMatrix U(5); |
---|
| 49 | for (i=1; i<=5; i++) for (j=i; j<=5; j++) U(i,j) = 100*i + j; |
---|
| 50 | { X.SubMatrix(3,7,5,9) << U; } |
---|
| 51 | for (i=1; i<=5; i++) for (j=i; j<=5; j++) Y(i+2,j+4) = 100*i + j; |
---|
| 52 | for (i=1; i<=5; i++) for (j=1; j<i; j++) Y(i+2,j+4) = 0.0; |
---|
| 53 | Print(Matrix(X-Y)); |
---|
| 54 | for (i=1; i<=8; i++) for (j=1; j<=10; j++) X(i,j) = 1000*i + 10*j; |
---|
| 55 | Y = X; |
---|
| 56 | for (i=1; i<=5; i++) for (j=i; j<=5; j++) U(i,j) = 100*i + j; |
---|
| 57 | { X.SubMatrix(3,7,5,9).Inject(U); } |
---|
| 58 | for (i=1; i<=5; i++) for (j=i; j<=5; j++) Y(i+2,j+4) = 100*i + j; |
---|
| 59 | Print(Matrix(X-Y)); |
---|
| 60 | |
---|
| 61 | |
---|
| 62 | // test growing and shrinking a vector |
---|
| 63 | { |
---|
| 64 | ColumnVector V(100); |
---|
| 65 | for (i=1;i<=100;i++) V(i) = i*i+i; |
---|
| 66 | V = V.Rows(1,50); // to get first 50 vlaues. |
---|
| 67 | |
---|
| 68 | { |
---|
| 69 | V.Release(); ColumnVector VX=V; |
---|
| 70 | V.ReSize(100); V = 0.0; V.Rows(1,50)=VX; |
---|
| 71 | } // V now length 100 |
---|
| 72 | |
---|
| 73 | M=V; M=100; // to make sure V will hold its values |
---|
| 74 | for (i=1;i<=50;i++) V(i) -= i*i+i; |
---|
| 75 | Print(V); |
---|
| 76 | |
---|
| 77 | |
---|
| 78 | // test redimensioning vectors with two dimensions given |
---|
| 79 | ColumnVector CV1(10); CV1 = 10; |
---|
| 80 | ColumnVector CV2(5); CV2.ReSize(10,1); CV2 = 10; |
---|
| 81 | V = CV1-CV2; Print(V); |
---|
| 82 | |
---|
| 83 | RowVector RV1(20); RV1 = 100; |
---|
| 84 | RowVector RV2; RV2.ReSize(1,20); RV2 = 100; |
---|
| 85 | V = (RV1-RV2).t(); Print(V); |
---|
| 86 | |
---|
| 87 | X.ReSize(4,7); |
---|
| 88 | for (i=1; i<=4; i++) for (j=1; j<=7; j++) X(i,j) = 1000*i + 10*j; |
---|
| 89 | Y = 10.5 * X; |
---|
| 90 | Z = 7.25 - Y; |
---|
| 91 | M = Z + X * 10.5 - 7.25; |
---|
| 92 | Print(M); |
---|
| 93 | Y = 2.5 * X; |
---|
| 94 | Z = 9.25 + Y; |
---|
| 95 | M = Z - X * 2.5 - 9.25; |
---|
| 96 | Print(M); |
---|
| 97 | U.ReSize(8); |
---|
| 98 | for (i=1; i<=8; i++) for (j=i; j<=8; j++) U(i,j) = 100*i + j; |
---|
| 99 | Y = 100 - U; |
---|
| 100 | M = Y + U - 100; |
---|
| 101 | Print(M); |
---|
| 102 | } |
---|
| 103 | |
---|
| 104 | { |
---|
| 105 | SymmetricMatrix S,T; |
---|
| 106 | |
---|
| 107 | S << (U + U.t()); |
---|
| 108 | T = 100 - S; M = T + S - 100; Print(M); |
---|
| 109 | T = 100 - 2 * S; M = T + S * 2 - 100; Print(M); |
---|
| 110 | X = 100 - 2 * S; M = X + S * 2 - 100; Print(M); |
---|
| 111 | T = S; T = 100 - T; M = T + S - 100; Print(M); |
---|
| 112 | } |
---|
| 113 | |
---|
| 114 | // test new |
---|
| 115 | { |
---|
| 116 | ColumnVector CV1; RowVector RV1; |
---|
| 117 | Matrix* MX; MX = new Matrix; if (!MX) Throw(Bad_alloc("New fails ")); |
---|
| 118 | MX->ReSize(10,20); |
---|
| 119 | for (i = 1; i <= 10; i++) for (j = 1; j <= 20; j++) |
---|
| 120 | (*MX)(i,j) = 100 * i + j; |
---|
| 121 | ColumnVector* CV = new ColumnVector(10); |
---|
| 122 | if (!CV) Throw(Bad_alloc("New fails ")); |
---|
| 123 | *CV << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8 << 9 << 10; |
---|
| 124 | RowVector* RV = new RowVector(CV->t() | (*CV + 10).t()); |
---|
| 125 | if (!RV) Throw(Bad_alloc("New fails ")); |
---|
| 126 | CV1 = ColumnVector(10); CV1 = 1; RV1 = RowVector(20); RV1 = 1; |
---|
| 127 | *MX -= 100 * *CV * RV1 + CV1 * *RV; |
---|
| 128 | Print(*MX); |
---|
| 129 | delete MX; delete CV; delete RV; |
---|
| 130 | } |
---|
| 131 | |
---|
| 132 | |
---|
| 133 | // test copying of vectors and matrices with no elements |
---|
| 134 | { |
---|
| 135 | ColumnVector dims(16); |
---|
| 136 | Matrix M1; Matrix M2 = M1; Print(M2); |
---|
| 137 | dims(1) = M2.Nrows(); dims(2) = M2.Ncols(); |
---|
| 138 | dims(3) = (Real)(unsigned long)M2.Store(); dims(4) = M2.Storage(); |
---|
| 139 | M2 = M1; |
---|
| 140 | dims(5) = M2.Nrows(); dims(6) = M2.Ncols(); |
---|
| 141 | dims(7) = (Real)(unsigned long)M2.Store(); dims(8) = M2.Storage(); |
---|
| 142 | M2.ReSize(10,20); M2.CleanUp(); |
---|
| 143 | dims(9) = M2.Nrows(); dims(10) = M2.Ncols(); |
---|
| 144 | dims(11) = (Real)(unsigned long)M2.Store(); dims(12) = M2.Storage(); |
---|
| 145 | M2.ReSize(20,10); M2.ReSize(0,0); |
---|
| 146 | dims(13) = M2.Nrows(); dims(14) = M2.Ncols(); |
---|
| 147 | dims(15) = (Real)(unsigned long)M2.Store(); dims(16) = M2.Storage(); |
---|
| 148 | Print(dims); |
---|
| 149 | } |
---|
| 150 | |
---|
| 151 | { |
---|
| 152 | ColumnVector dims(16); |
---|
| 153 | ColumnVector M1; ColumnVector M2 = M1; Print(M2); |
---|
| 154 | dims(1) = M2.Nrows(); dims(2) = M2.Ncols()-1; |
---|
| 155 | dims(3) = (Real)(unsigned long)M2.Store(); dims(4) = M2.Storage(); |
---|
| 156 | M2 = M1; |
---|
| 157 | dims(5) = M2.Nrows(); dims(6) = M2.Ncols()-1; |
---|
| 158 | dims(7) = (Real)(unsigned long)M2.Store(); dims(8) = M2.Storage(); |
---|
| 159 | M2.ReSize(10); M2.CleanUp(); |
---|
| 160 | dims(9) = M2.Nrows(); dims(10) = M2.Ncols()-1; |
---|
| 161 | dims(11) = (Real)(unsigned long)M2.Store(); dims(12) = M2.Storage(); |
---|
| 162 | M2.ReSize(10); M2.ReSize(0); |
---|
| 163 | dims(13) = M2.Nrows(); dims(14) = M2.Ncols()-1; |
---|
| 164 | dims(15) = (Real)(unsigned long)M2.Store(); dims(16) = M2.Storage(); |
---|
| 165 | Print(dims); |
---|
| 166 | } |
---|
| 167 | |
---|
| 168 | { |
---|
| 169 | ColumnVector dims(16); |
---|
| 170 | RowVector M1; RowVector M2 = M1; Print(M2); |
---|
| 171 | dims(1) = M2.Nrows()-1; dims(2) = M2.Ncols(); |
---|
| 172 | dims(3) = (Real)(unsigned long)M2.Store(); dims(4) = M2.Storage(); |
---|
| 173 | M2 = M1; |
---|
| 174 | dims(5) = M2.Nrows()-1; dims(6) = M2.Ncols(); |
---|
| 175 | dims(7) = (Real)(unsigned long)M2.Store(); dims(8) = M2.Storage(); |
---|
| 176 | M2.ReSize(10); M2.CleanUp(); |
---|
| 177 | dims(9) = M2.Nrows()-1; dims(10) = M2.Ncols(); |
---|
| 178 | dims(11) = (Real)(unsigned long)M2.Store(); dims(12) = M2.Storage(); |
---|
| 179 | M2.ReSize(10); M2.ReSize(0); |
---|
| 180 | dims(13) = M2.Nrows()-1; dims(14) = M2.Ncols(); |
---|
| 181 | dims(15) = (Real)(unsigned long)M2.Store(); dims(16) = M2.Storage(); |
---|
| 182 | Print(dims); |
---|
| 183 | } |
---|
| 184 | |
---|
| 185 | // test identity matrix |
---|
| 186 | { |
---|
| 187 | Matrix M; |
---|
| 188 | IdentityMatrix I(10); DiagonalMatrix D(10); D = 1; |
---|
| 189 | M = I; M -= D; Print(M); |
---|
| 190 | D -= I; Print(D); |
---|
| 191 | ColumnVector X(8); |
---|
| 192 | D = 1; |
---|
| 193 | X(1) = Sum(D) - Sum(I); |
---|
| 194 | X(2) = SumAbsoluteValue(D) - SumAbsoluteValue(I); |
---|
| 195 | X(3) = SumSquare(D) - SumSquare(I); |
---|
| 196 | X(4) = Trace(D) - Trace(I); |
---|
| 197 | X(5) = Maximum(D) - Maximum(I); |
---|
| 198 | X(6) = Minimum(D) - Minimum(I); |
---|
| 199 | X(7) = LogDeterminant(D).LogValue() - LogDeterminant(I).LogValue(); |
---|
| 200 | X(8) = LogDeterminant(D).Sign() - LogDeterminant(I).Sign(); |
---|
| 201 | Clean(X,0.00000001); Print(X); |
---|
| 202 | |
---|
| 203 | for (i = 1; i <= 10; i++) for (j = 1; j <= 10; j++) |
---|
| 204 | M(i,j) = 100 * i + j; |
---|
| 205 | Matrix N; |
---|
| 206 | N = M * I - M; Print(N); |
---|
| 207 | N = I * M - M; Print(N); |
---|
| 208 | N = M * I.i() - M; Print(N); |
---|
| 209 | N = I.i() * M - M; Print(N); |
---|
| 210 | N = I.i(); N -= I; Print(N); |
---|
| 211 | N = I.t(); N -= I; Print(N); |
---|
| 212 | N = I.t(); N += (-I); Print(N); // <---------------- |
---|
| 213 | D = I; N = D; D = 1; N -= D; Print(N); |
---|
| 214 | N = I; D = 1; N -= D; Print(N); |
---|
| 215 | N = M + 2 * IdentityMatrix(10); N -= (M + 2 * D); Print(N); |
---|
| 216 | |
---|
| 217 | I *= 4; |
---|
| 218 | |
---|
| 219 | D = 4; |
---|
| 220 | |
---|
| 221 | X.ReSize(14); |
---|
| 222 | X(1) = Sum(D) - Sum(I); |
---|
| 223 | X(2) = SumAbsoluteValue(D) - SumAbsoluteValue(I); |
---|
| 224 | X(3) = SumSquare(D) - SumSquare(I); |
---|
| 225 | X(4) = Trace(D) - Trace(I); |
---|
| 226 | X(5) = Maximum(D) - Maximum(I); |
---|
| 227 | X(6) = Minimum(D) - Minimum(I); |
---|
| 228 | X(7) = LogDeterminant(D).LogValue() - LogDeterminant(I).LogValue(); // <-- |
---|
| 229 | X(8) = LogDeterminant(D).Sign() - LogDeterminant(I).Sign(); |
---|
| 230 | int i,j; |
---|
| 231 | X(9) = I.Maximum1(i) - 4; X(10) = i-1; |
---|
| 232 | X(11) = I.Maximum2(i,j) - 4; X(12) = i-10; X(13) = j-10; |
---|
| 233 | X(14) = I.Nrows() - 10; |
---|
| 234 | Clean(X,0.00000001); Print(X); |
---|
| 235 | |
---|
| 236 | |
---|
| 237 | N = D.i(); |
---|
| 238 | N += I / (-16); |
---|
| 239 | Print(N); |
---|
| 240 | N = M * I - 4 * M; Print(N); |
---|
| 241 | N = I * M - 4 * M; Print(N); |
---|
| 242 | N = M * I.i() - 0.25 * M; Print(N); |
---|
| 243 | N = I.i() * M - 0.25 * M; Print(N); |
---|
| 244 | N = I.i(); N -= I * 0.0625; Print(N); |
---|
| 245 | N = I.i(); N = N - 0.0625 * I; Print(N); |
---|
| 246 | N = I.t(); N -= I; Print(N); |
---|
| 247 | D = I * 2; N = D; D = 1; N -= 8 * D; Print(N); |
---|
| 248 | N = I * 2; N -= 8 * D; Print(N); |
---|
| 249 | N = 0.5 * I + M; N -= M; N -= 2.0 * D; Print(N); |
---|
| 250 | |
---|
| 251 | IdentityMatrix J(10); J = 8; |
---|
| 252 | D = 4; |
---|
| 253 | DiagonalMatrix E(10); E = 8; |
---|
| 254 | N = (I + J) - (D + E); Print(N); |
---|
| 255 | N = (5*I + 3*J) - (5*D + 3*E); Print(N); |
---|
| 256 | N = (-I + J) - (-D + E); Print(N); |
---|
| 257 | N = (I - J) - (D - E); Print(N); |
---|
| 258 | N = (I | J) - (D | E); Print(N); |
---|
| 259 | N = (I & J) - (D & E); Print(N); |
---|
| 260 | N = SP(I,J) - SP(D,E); Print(N); |
---|
| 261 | N = D.SubMatrix(2,5,3,8) - I.SubMatrix(2,5,3,8); Print(N); |
---|
| 262 | |
---|
| 263 | N = M; N.Inject(I); D << M; N -= (M + I); N += D; Print(N); |
---|
| 264 | D = 4; |
---|
| 265 | |
---|
| 266 | IdentityMatrix K = I.i()*7 - J.t()/4; |
---|
| 267 | N = D.i() * 7 - E / 4 - K; Print(N); |
---|
| 268 | K = I * J; N = K - D * E; Print(N); |
---|
| 269 | N = I * J; N -= D * E; Print(N); |
---|
| 270 | K = 5*I - 3*J; |
---|
| 271 | N = K - (5*D - 3*E); Print(N); |
---|
| 272 | K = I.i(); N = K - 0.0625 * I; Print(N); |
---|
| 273 | K = I.t(); N = K - I; Print(N); |
---|
| 274 | |
---|
| 275 | |
---|
| 276 | K.ReSize(20); D.ReSize(20); D = 1; |
---|
| 277 | D -= K; Print(D); |
---|
| 278 | |
---|
| 279 | I.ReSize(3); J.ReSize(3); K = I * J; N = K - I; Print(N); |
---|
| 280 | K << D; N = K - D; Print(N); |
---|
| 281 | |
---|
| 282 | |
---|
| 283 | } |
---|
| 284 | |
---|
| 285 | |
---|
| 286 | // cout << "\nEnd of second test\n"; |
---|
| 287 | } |
---|