00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00030 #include <iostream>
00031 #include "lin_alg.h"
00032 #include "make_vector.h"
00033 #include "array.h"
00034
00035
00037
00041 void test_lusolve1D(void)
00042 {
00043 Matrix a(1,1);
00044 ArrayOfIndex indx(1);
00045 Matrix orig(1,1);
00046 Matrix b(1,1);
00047
00048
00049 a(0,0) = 3;
00050
00051
00052
00053
00054 cout << "\n LU decomposition test \n";
00055 cout << "initial matrix: \n";
00056
00057 cout << " " << a(0,0) << endl;
00058
00059
00060
00061
00062
00063 ludcmp(b, indx, a);
00064
00065 cout << "\n after decomposition";
00066 cout << " " << b(0,0) << endl;
00067
00068
00069 Matrix l(1,1,0.0);
00070 Matrix u(1,1,0.0);
00071 Matrix lu(1,1,0.0);
00072
00073 l(0,0) = 1.0;
00074 u(0,0) = b(0,0);
00075
00076
00077
00078
00079
00080
00081
00082
00083 Vector c(1);
00084 c[0] = 6;
00085 cout << indx[0] << " " << c[0] << endl;
00086
00087 Vector x(1);
00088 lubacksub(x, b, c, indx);
00089
00090 cout << "\n solution vector x";
00091 cout << x[0] << endl;
00092
00093 }
00094
00095
00097
00101 void test_lusolve4D(void)
00102 {
00103 Matrix a(4,4);
00104 ArrayOfIndex indx(4);
00105 Matrix orig(4,4);
00106 Matrix b(4,4);
00107
00108
00109
00110 a(0,0) = 1;
00111 a(0,1) = 3;
00112 a(0,2) = 5;
00113 a(0,3) = 6;
00114 a(1,0) = 2;
00115 a(1,1) = 3;
00116 a(1,2) = 4;
00117 a(1,3) = 4;
00118 a(2,0) = 1;
00119 a(2,1) = 2;
00120 a(2,2) = 5;
00121 a(2,3) = 1;
00122 a(3,0) = 7;
00123 a(3,1) = 2;
00124 a(3,2) = 4;
00125 a(3,3) = 3;
00126
00127
00128
00129
00130
00131
00132
00133 cout << "\n LU decomposition test \n";
00134 cout << "initial matrix: \n";
00135 for( Index i = 0; i<4; i++)
00136 {
00137 cout << "\n";
00138 for (Index j = 0; j<4; j++)
00139 cout << " " << a(i,j);
00140 }
00141 cout << "\n";
00142
00143
00144
00145
00146
00147 ludcmp(b, indx, a);
00148
00149 cout << "\n after decomposition";
00150 for( Index i = 0; i<4; i++)
00151 { cout << "\n";
00152 for (Index j = 0; j<4; j++)
00153 cout << " " << b(i,j);
00154 }
00155 cout << "\n";
00156
00157
00158 Matrix l(4,4,0.0);
00159 Matrix u(4,4,0.0);
00160 Matrix lu(4,4,0.0);
00161
00162
00163 for(Index i = 0; i<4; i++) l(i,i) = 1.0;
00164 l(1,0) = b(1,0);
00165 l(2,Range(0,2)) = b(2, Range(0,2));
00166 l(3,Range(0,3)) = b(3, Range(0,3));
00167
00168 cout << "\n Matrix L";
00169 for( Index i = 0; i<4; i++)
00170 {
00171 cout << "\n";
00172 for (Index j = 0; j<4; j++)
00173 cout << " " << l(i,j);
00174 }
00175 cout << "\n";
00176
00177
00178 u(0,Range(0,4)) = b(0,Range(0,4));
00179 u(1,Range(1,3)) = b(1,Range(1,3));
00180 u(2,Range(2,2)) = b(2,Range(2,2));
00181 u(3,Range(3,1)) = b(3,Range(3,1));
00182
00183
00184 cout << "\n Matrix U";
00185 for( Index i = 0; i<4; i++)
00186 {
00187 cout << "\n";
00188 for (Index j = 0; j<4; j++)
00189 cout << " " << u(i,j);
00190 }
00191 cout << "\n";
00192
00193
00194
00195 mult(lu,l,u);
00196
00197 cout << "\n product L*U";
00198 for( Index i = 0; i<4; i++)
00199 {
00200 cout << "\n";
00201 for (Index j = 0; j<4; j++)
00202 cout << " " << lu(i,j);
00203 }
00204 cout << "\n";
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215 Vector c(4);
00216 c[0] = 2;
00217 c[1] = 5;
00218 c[2] = 6;
00219 c[3] = 7;
00220
00221 cout << "\n vector indx";
00222 for (Index i=0; i<4; i++)
00223 {
00224 cout << "\n";
00225 cout << indx[i] << " " << c[i];
00226 }
00227
00228 Vector x(4);
00229 lubacksub(x, b, c, indx);
00230
00231 cout << "\n solution vector x" << endl;
00232 for (Index i=0; i<4; i++)
00233 {
00234 cout << "\n";
00235 cout << x[i];
00236 }
00237
00238 cout << "\n test solution LU*x";
00239 Vector y(4);
00240 mult(y,lu,x);
00241 for (Index i=0; i<4; i++)
00242 {
00243 cout << "\n";
00244 cout << y[i];
00245 }
00246 cout <<"\n";
00247 }
00248
00249
00250
00252
00255 void test_matrix_exp4D(void)
00256 {
00257 Matrix A(4,4);
00258 Matrix F(4,4);
00259 A(0,0) = 1;
00260 A(0,1) = 3;
00261 A(0,2) = 5;
00262 A(0,3) = 6;
00263 A(1,0) = 2;
00264 A(1,1) = 3;
00265 A(1,2) = 4;
00266 A(1,3) = 4;
00267 A(2,0) = 1;
00268 A(2,1) = 2;
00269 A(2,2) = 5;
00270 A(2,3) = 1;
00271 A(3,0) = 7;
00272 A(3,1) = 2;
00273 A(3,2) = 4;
00274 A(3,3) = 3;
00275
00276
00277 Index q = 8;
00278
00279
00280 matrix_exp(F,A,q);
00281
00282
00283 cout << "\n Exponential of Matrix K";
00284 for( Index i = 0; i<4; i++)
00285 {
00286 cout << "\n";
00287 for (Index j = 0; j<4; j++)
00288 cout << " " << F(i,j);
00289 }
00290 cout << "\n";
00291 }
00292
00293
00295
00298 void test_matrix_exp1D(void)
00299 {
00300 Matrix A(1,1);
00301 Matrix F(1,1);
00302 A(0,0) = 5;
00303
00304
00305 Index q = 8;
00306
00307
00308 matrix_exp(F,A,q);
00309
00310 cout << "\n Exponential of Matrix A:\n";
00311 cout << F(0,0);
00312 cout <<"\n";
00313 }
00314
00316
00319 void test_matrix_exp3D(void)
00320 {
00321 Matrix A(3,3);
00322 Matrix F(3,3);
00323 A(0,0) = 1;
00324 A(0,1) = 3;
00325 A(0,2) = 5;
00326 A(1,0) = 2;
00327 A(1,1) = 3;
00328 A(1,2) = 4;
00329 A(2,0) = 1;
00330 A(2,1) = 2;
00331 A(2,2) = 5;
00332
00333
00334
00335 Index q = 8;
00336
00337
00338 matrix_exp(F,A,q);
00339
00340
00341 cout << "\n Exponential of Matrix A";
00342 for( Index i = 0; i<3; i++)
00343 {
00344 cout << "\n";
00345 for (Index j = 0; j<3; j++)
00346 cout << " " << F(i,j);
00347 }
00348 cout << "\n";
00349 }
00350
00351 int main(void)
00352 {
00353 test_lusolve1D();
00354
00355 return(0);
00356 }