tmth.cpp
Go to the documentation of this file.
00001 
00002 
00003 
00006 
00007 
00008 //#define WANT_STREAM
00009 
00010 #include "include.h"
00011 
00012 #include "newmatap.h"
00013 //#include "newmatio.h"
00014 
00015 #include "tmt.h"
00016 
00017 #ifdef use_namespace
00018 using namespace NEWMAT;
00019 #endif
00020 
00021 static int my_max(int p, int q) { return (p > q) ? p : q; }
00022 
00023 static int my_min(int p, int q) { return (p < q) ? p : q; }
00024 
00025 
00026 void BandFunctions(int l1, int u1, int l2, int u2)
00027 {
00028    int i, j;
00029    BandMatrix BM1(20, l1, u1); BM1 = 999999.0;
00030    for (i = 1; i <= 20; ++i) for (j = 1; j <= 20; ++j)
00031       if (i - j <= l1 && i - j >= -u1) BM1(i, j) = 100 * i + j;
00032 
00033    BandMatrix BM2 = BM1; Matrix M = BM2 - BM1; Print(M);
00034 
00035    BM2.ReSize(20, l2, u2); BM2 = 777777.0;
00036    for (i = 1; i <= 20; ++i) for (j = 1; j <= 20; ++j)
00037       if (i - j <= l2 && i - j >= -u2) BM2(i, j) = (100 * i + j) * 11;
00038 
00039    BandMatrix BMA = BM1 + BM2, BMS = BM1 - BM2, BMSP = SP(BM1, BM2),
00040       BMM = BM1 * BM2, BMN = -BM1;
00041 
00042    Matrix M1(20,20); M1 = 0;
00043    for (i = 1; i <= 20; ++i) for (j = 1; j <= 20; ++j)
00044       if (i - j <= l1 && i - j >= -u1) M1(i, j) = 100 * i + j;
00045 
00046    Matrix M2(20,20); M2 = 0;
00047    for (i = 1; i <= 20; ++i) for (j = 1; j <= 20; ++j)
00048       if (i - j <= l2 && i - j >= -u2) M2(i, j) = (100 * i + j) * 11;
00049 
00050    Matrix MA = M1 + M2, MS = M1 - M2, MSP = SP(M1, M2), MM = M1 * M2, MN = -M1;
00051    MA -= BMA; MS -= BMS; MSP -= BMSP; MM -= BMM; MN -= BMN;
00052    Print(MA); Print(MS); Print(MSP); Print(MM); Print(MN);
00053 
00054    Matrix Test(7, 2);
00055    Test(1,1) = BM1.BandWidth().Lower() - l1;
00056    Test(1,2) = BM1.BandWidth().Upper() - u1;
00057    Test(2,1) = BM2.BandWidth().Lower() - l2;
00058    Test(2,2) = BM2.BandWidth().Upper() - u2;
00059    Test(3,1) = BMA.BandWidth().Lower() - my_max(l1,l2);
00060    Test(3,2) = BMA.BandWidth().Upper() - my_max(u1,u2);
00061    Test(4,1) = BMS.BandWidth().Lower() - my_max(l1,l2);
00062    Test(4,2) = BMS.BandWidth().Upper() - my_max(u1,u2);
00063    Test(5,1) = BMSP.BandWidth().Lower() - my_min(l1,l2);
00064    Test(5,2) = BMSP.BandWidth().Upper() - my_min(u1,u2);
00065    Test(6,1) = BMM.BandWidth().Lower() - (l1 + l2);
00066    Test(6,2) = BMM.BandWidth().Upper() - (u1 + u2);
00067    Test(7,1) = BMN.BandWidth().Lower() - l1;
00068    Test(7,2) = BMN.BandWidth().Upper() - u1;
00069    Print(Test);
00070 
00071    // test element function
00072    BandMatrix BM1E(20, l1, u1); BM1E = 999999.0;
00073    for (i = 1; i <= 20; ++i) for (j = 1; j <= 20; ++j)
00074       if (i - j <= l1 && i - j >= -u1) BM1E.element(i-1, j-1) = 100 * i + j;
00075    BandMatrix BM2E = BM1E; BM2E.ReSize(BM2); BM2E = 777777.0;
00076    for (i = 1; i <= 20; ++i) for (j = 1; j <= 20; ++j)
00077       if (i - j <= l2 && i - j >= -u2)
00078          BM2E.element(i-1, j-1) = (100 * i + j) * 11;
00079    M1 = BM1E - BM1; Print(M1);
00080    M2 = BM2E - BM2; Print(M2);
00081 
00082    // test element function with constant
00083    BM1E = 444444.04; BM2E = 555555.0;
00084    const BandMatrix BM1C = BM1, BM2C = BM2;
00085    for (i = 1; i <= 20; ++i) for (j = 1; j <= 20; ++j)
00086       if (i - j <= l1 && i - j >= -u1)
00087          BM1E.element(i-1, j-1) = BM1C.element(i-1, j-1);
00088    for (i = 1; i <= 20; ++i) for (j = 1; j <= 20; ++j)
00089       if (i - j <= l2 && i - j >= -u2)
00090          BM2E.element(i-1, j-1) = BM2C.element(i-1, j-1);
00091    M1 = BM1E - BM1; Print(M1);
00092    M2 = BM2E - BM2; Print(M2);
00093 
00094    // test subscript function with constant
00095    BM1E = 444444.04; BM2E = 555555.0;
00096    for (i = 1; i <= 20; ++i) for (j = 1; j <= 20; ++j)
00097       if (i - j <= l1 && i - j >= -u1) BM1E(i, j) = BM1C(i, j);
00098    for (i = 1; i <= 20; ++i) for (j = 1; j <= 20; ++j)
00099       if (i - j <= l2 && i - j >= -u2) BM2E(i, j) = BM2C(i, j);
00100    M1 = BM1E - BM1; Print(M1);
00101    M2 = BM2E - BM2; Print(M2);
00102 }
00103 
00104 void LowerBandFunctions(int l1, int l2)
00105 {
00106    int i, j;
00107    LowerBandMatrix BM1(20, l1); BM1 = 999999.0;
00108    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00109       if (i - j <= l1) BM1(i, j) = 100 * i + j;
00110 
00111    LowerBandMatrix BM2 = BM1; Matrix M = BM2 - BM1; Print(M);
00112 
00113    BM2.ReSize(20, l2); BM2 = 777777.0;
00114    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00115       if (i - j <= l2) BM2(i, j) = (100 * i + j) * 11;
00116 
00117    LowerBandMatrix BMA = BM1 + BM2, BMS = BM1 - BM2, BMSP = SP(BM1, BM2),
00118       BMM = BM1 * BM2, BMN = -BM1;
00119 
00120    Matrix M1(20,20); M1 = 0;
00121    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00122       if (i - j <= l1) M1(i, j) = 100 * i + j;
00123 
00124    Matrix M2(20,20); M2 = 0;
00125    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00126       if (i - j <= l2) M2(i, j) = (100 * i + j) * 11;
00127 
00128    Matrix MA = M1 + M2, MS = M1 - M2, MSP = SP(M1, M2), MM = M1 * M2, MN = -M1;
00129    MA -= BMA; MS -= BMS; MSP -= BMSP; MM -= BMM; MN -= BMN;
00130    Print(MA); Print(MS); Print(MSP); Print(MM); Print(MN);
00131 
00132    Matrix Test(7, 2);
00133    Test(1,1) = BM1.BandWidth().Lower() - l1;
00134    Test(1,2) = BM1.BandWidth().Upper();
00135    Test(2,1) = BM2.BandWidth().Lower() - l2;
00136    Test(2,2) = BM2.BandWidth().Upper();
00137    Test(3,1) = BMA.BandWidth().Lower() - my_max(l1,l2);
00138    Test(3,2) = BMA.BandWidth().Upper();
00139    Test(4,1) = BMS.BandWidth().Lower() - my_max(l1,l2);
00140    Test(4,2) = BMS.BandWidth().Upper();
00141    Test(5,1) = BMSP.BandWidth().Lower() - my_min(l1,l2);
00142    Test(5,2) = BMSP.BandWidth().Upper();
00143    Test(6,1) = BMM.BandWidth().Lower() - (l1 + l2);
00144    Test(6,2) = BMM.BandWidth().Upper();
00145    Test(7,1) = BMN.BandWidth().Lower() - l1;
00146    Test(7,2) = BMN.BandWidth().Upper();
00147    Print(Test);
00148 
00149    // test element function
00150    LowerBandMatrix BM1E(20, l1); BM1E = 999999.0;
00151    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00152       if (i - j <= l1) BM1E.element(i-1, j-1) = 100 * i + j;
00153    LowerBandMatrix BM2E = BM1E; BM2E.ReSize(BM2); BM2E = 777777.0;
00154    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00155       if (i - j <= l2) BM2E.element(i-1, j-1) = (100 * i + j) * 11;
00156    M1 = BM1E - BM1; Print(M1);
00157    M2 = BM2E - BM2; Print(M2);
00158 
00159    // test element function with constant
00160    BM1E = 444444.04; BM2E = 555555.0;
00161    const LowerBandMatrix BM1C = BM1, BM2C = BM2;
00162    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00163       if (i - j <= l1) BM1E.element(i-1, j-1) = BM1C.element(i-1, j-1);
00164    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00165       if (i - j <= l2) BM2E.element(i-1, j-1) = BM2C.element(i-1, j-1);
00166    M1 = BM1E - BM1; Print(M1);
00167    M2 = BM2E - BM2; Print(M2);
00168 
00169    // test subscript function with constant
00170    BM1E = 444444.04; BM2E = 555555.0;
00171    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00172       if (i - j <= l1) BM1E(i, j) = BM1C(i, j);
00173    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00174       if (i - j <= l2) BM2E(i, j) = BM2C(i, j);
00175    M1 = BM1E - BM1; Print(M1);
00176    M2 = BM2E - BM2; Print(M2);
00177 }
00178 
00179 void UpperBandFunctions(int u1, int u2)
00180 {
00181    int i, j;
00182    UpperBandMatrix BM1(20, u1); BM1 = 999999.0;
00183    for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00184       if (i - j >= -u1) BM1(i, j) = 100 * i + j;
00185 
00186    UpperBandMatrix BM2 = BM1; Matrix M = BM2 - BM1; Print(M);
00187 
00188    BM2.ReSize(20, u2); BM2 = 777777.0;
00189    for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00190       if (i - j >= -u2) BM2(i, j) = (100 * i + j) * 11;
00191 
00192    UpperBandMatrix BMA = BM1 + BM2, BMS = BM1 - BM2, BMSP = SP(BM1, BM2),
00193       BMM = BM1 * BM2, BMN = -BM1;
00194 
00195    Matrix M1(20,20); M1 = 0;
00196    for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00197       if (i - j >= -u1) M1(i, j) = 100 * i + j;
00198 
00199    Matrix M2(20,20); M2 = 0;
00200    for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00201       if (i - j >= -u2) M2(i, j) = (100 * i + j) * 11;
00202 
00203    Matrix MA = M1 + M2, MS = M1 - M2, MSP = SP(M1, M2), MM = M1 * M2, MN = -M1;
00204    MA -= BMA; MS -= BMS; MSP -= BMSP; MM -= BMM; MN -= BMN;
00205    Print(MA); Print(MS); Print(MSP); Print(MM); Print(MN);
00206 
00207    Matrix Test(7, 2);
00208    Test(1,1) = BM1.BandWidth().Lower();
00209    Test(1,2) = BM1.BandWidth().Upper() - u1;
00210    Test(2,1) = BM2.BandWidth().Lower();
00211    Test(2,2) = BM2.BandWidth().Upper() - u2;
00212    Test(3,1) = BMA.BandWidth().Lower();
00213    Test(3,2) = BMA.BandWidth().Upper() - my_max(u1,u2);
00214    Test(4,1) = BMS.BandWidth().Lower();
00215    Test(4,2) = BMS.BandWidth().Upper() - my_max(u1,u2);
00216    Test(5,1) = BMSP.BandWidth().Lower();
00217    Test(5,2) = BMSP.BandWidth().Upper() - my_min(u1,u2);
00218    Test(6,1) = BMM.BandWidth().Lower();
00219    Test(6,2) = BMM.BandWidth().Upper() - (u1 + u2);
00220    Test(7,1) = BMN.BandWidth().Lower();
00221    Test(7,2) = BMN.BandWidth().Upper() - u1;
00222    Print(Test);
00223 
00224    // test element function
00225    UpperBandMatrix BM1E(20, u1); BM1E = 999999.0;
00226    for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00227       if (i - j >= -u1) BM1E.element(i-1, j-1) = 100 * i + j;
00228    UpperBandMatrix BM2E = BM1E; BM2E.ReSize(BM2); BM2E = 777777.0;
00229    for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00230       if (i - j >= -u2) BM2E.element(i-1, j-1) = (100 * i + j) * 11;
00231    M1 = BM1E - BM1; Print(M1);
00232    M2 = BM2E - BM2; Print(M2);
00233 
00234    // test element function with constant
00235    BM1E = 444444.04; BM2E = 555555.0;
00236    const UpperBandMatrix BM1C = BM1, BM2C = BM2;
00237    for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00238       if (i - j >= -u1) BM1E.element(i-1, j-1) = BM1C.element(i-1, j-1);
00239    for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00240       if (i - j >= -u2) BM2E.element(i-1, j-1) = BM2C.element(i-1, j-1);
00241    M1 = BM1E - BM1; Print(M1);
00242    M2 = BM2E - BM2; Print(M2);
00243 
00244    // test subscript function with constant
00245    BM1E = 444444.04; BM2E = 555555.0;
00246    for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00247       if (i - j >= -u1) BM1E(i, j) = BM1C(i, j);
00248    for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00249       if (i - j >= -u2) BM2E(i, j) = BM2C(i, j);
00250    M1 = BM1E - BM1; Print(M1);
00251    M2 = BM2E - BM2; Print(M2);
00252 }
00253 
00254 void SymmetricBandFunctions(int l1, int l2)
00255 {
00256    int i, j;
00257    SymmetricBandMatrix BM1(20, l1); BM1 = 999999.0;
00258    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00259       if (i - j <= l1) BM1(i, j) = 100 * i + j;
00260 
00261    SymmetricBandMatrix BM2 = BM1; Matrix M = BM2 - BM1; Print(M);
00262 
00263    BM2.ReSize(20, l2); BM2 = 777777.0;
00264    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00265       if (i - j <= l2) BM2(i, j) = (100 * i + j) * 11;
00266 
00267    SymmetricBandMatrix BMA = BM1 + BM2, BMS = BM1 - BM2, BMSP = SP(BM1, BM2),
00268       BMN = -BM1;
00269    BandMatrix BMM = BM1 * BM2;
00270 
00271    SymmetricMatrix M1(20); M1 = 0;
00272    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00273       if (i - j <= l1) M1(i, j) = 100 * i + j;
00274 
00275    SymmetricMatrix M2(20); M2 = 0;
00276    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00277       if (i - j <= l2) M2(i, j) = (100 * i + j) * 11;
00278 
00279    SymmetricMatrix MA = M1 + M2, MS = M1 - M2, MSP = SP(M1, M2), MN = -M1;
00280    Matrix MM = M1 * M2;
00281    MA -= BMA; MS -= BMS; MSP -= BMSP; MM -= BMM; MN -= BMN;
00282    Print(MA); Print(MS); Print(MSP); Print(MM); Print(MN);
00283 
00284    Matrix Test(7, 2);
00285    Test(1,1) = BM1.BandWidth().Lower() - l1;
00286    Test(1,2) = BM1.BandWidth().Upper() - l1;
00287    Test(2,1) = BM2.BandWidth().Lower() - l2;
00288    Test(2,2) = BM2.BandWidth().Upper() - l2;
00289    Test(3,1) = BMA.BandWidth().Lower() - my_max(l1,l2);
00290    Test(3,2) = BMA.BandWidth().Upper() - my_max(l1,l2);
00291    Test(4,1) = BMS.BandWidth().Lower() - my_max(l1,l2);
00292    Test(4,2) = BMS.BandWidth().Upper() - my_max(l1,l2);
00293    Test(5,1) = BMSP.BandWidth().Lower() - my_min(l1,l2);
00294    Test(5,2) = BMSP.BandWidth().Upper() - my_min(l1,l2);
00295    Test(6,1) = BMM.BandWidth().Lower() - (l1 + l2);
00296    Test(6,2) = BMM.BandWidth().Upper() - (l1 + l2);
00297    Test(7,1) = BMN.BandWidth().Lower() - l1;
00298    Test(7,2) = BMN.BandWidth().Upper() - l1;
00299    Print(Test);
00300 
00301    // test element function
00302    SymmetricBandMatrix BM1E(20, l1); BM1E = 999999.0;
00303    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00304       if (i - j <= l1) BM1E.element(i-1, j-1) = 100 * i + j;
00305    SymmetricBandMatrix BM2E = BM1E; BM2E.ReSize(BM2); BM2E = 777777.0;
00306    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00307       if (i - j <= l2) BM2E.element(i-1, j-1) = (100 * i + j) * 11;
00308    M1 = BM1E - BM1; Print(M1);
00309    M2 = BM2E - BM2; Print(M2);
00310 
00311    // reverse subscripts
00312    BM1E = 999999.0;
00313    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00314       if (i - j <= l1) BM1E.element(j-1, i-1) = 100 * i + j;
00315    BM2E = 777777.0;
00316    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00317       if (i - j <= l2) BM2E.element(j-1, i-1) = (100 * i + j) * 11;
00318    M1 = BM1E - BM1; Print(M1);
00319    M2 = BM2E - BM2; Print(M2);
00320 
00321    // test element function with constant
00322    BM1E = 444444.04; BM2E = 555555.0;
00323    const SymmetricBandMatrix BM1C = BM1, BM2C = BM2;
00324    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00325       if (i - j <= l1) BM1E.element(i-1, j-1) = BM1C.element(i-1, j-1);
00326    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00327       if (i - j <= l2) BM2E.element(i-1, j-1) = BM2C.element(i-1, j-1);
00328    M1 = BM1E - BM1; Print(M1);
00329    M2 = BM2E - BM2; Print(M2);
00330 
00331    // reverse subscripts
00332    BM1E = 444444.0; BM2E = 555555.0;
00333    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00334       if (i - j <= l1) BM1E.element(j-1, i-1) = BM1C.element(j-1, i-1);
00335    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00336       if (i - j <= l2) BM2E.element(j-1, i-1) = BM2C.element(j-1, i-1);
00337    M1 = BM1E - BM1; Print(M1);
00338    M2 = BM2E - BM2; Print(M2);
00339 
00340    // test subscript function with constant
00341    BM1E = 444444.0; BM2E = 555555.0;
00342    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00343       if (i - j <= l1) BM1E(i, j) = BM1C(i, j);
00344    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00345       if (i - j <= l2) BM2E(i, j) = BM2C(i, j);
00346    M1 = BM1E - BM1; Print(M1);
00347    M2 = BM2E - BM2; Print(M2);
00348 
00349    // reverse subscripts
00350    BM1E = 444444.0; BM2E = 555555.0;
00351    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00352       if (i - j <= l1) BM1E(j, i) = BM1C(j, i);
00353    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00354       if (i - j <= l2) BM2E(j, i) = BM2C(j, i);
00355    M1 = BM1E - BM1; Print(M1);
00356    M2 = BM2E - BM2; Print(M2);
00357 
00358    // partly reverse subscripts
00359    BM1E = 444444.0; BM2E = 555555.0;
00360    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00361       if (i - j <= l1) BM1E(j, i) = BM1C(i, j);
00362    for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00363       if (i - j <= l2) BM2E(j, i) = BM2C(i, j);
00364    M1 = BM1E - BM1; Print(M1);
00365    M2 = BM2E - BM2; Print(M2);
00366 
00367 }
00368 
00369 
00370 
00371 void trymath()
00372 {
00373 //   cout << "\nSeventeenth test of Matrix package\n";
00374 //   cout << "\n";
00375    Tracer et("Seventeenth test of Matrix package");
00376    Tracer::PrintTrace();
00377 
00378 
00379    {
00380       Tracer et1("Stage 1");
00381       int i, j;
00382       BandMatrix B(8,3,1);
00383       for (i=1; i<=8; i++) for (j=-3; j<=1; j++)
00384          { int k = i+j; if (k>0 && k<=8) B(i,k) = i + k/64.0; }
00385 
00386       IdentityMatrix I(8); BandMatrix B1; B1 = I;
00387       UpperTriangularMatrix UT = I; Print(Matrix(B1-UT));
00388       Print(Matrix(B * B - B * 2 + I - (B - I) * (B - I)));
00389       Matrix A = B; BandMatrix C; C = B;
00390       Print(Matrix(B * A - C * 2 + I - (A - I) * (B - I)));
00391 
00392       C.ReSize(8,2,2); C = 0.0; C.Inject(B);
00393       Matrix X = A.t();
00394       B1.ReSize(8,2,2); B1.Inject(X); Print(Matrix(C.t()-B1));
00395 
00396       Matrix BI = B.i(); A = A.i()-BI; Clean(A,0.000000001); Print(A);
00397       BandLUMatrix BLU = B.t();
00398       BI = BLU.i(); A = X.i()-BI; Clean(A,0.000000001); Print(A);
00399       X.ReSize(1,1);
00400       X(1,1) = BLU.LogDeterminant().Value()-B.LogDeterminant().Value();
00401       Clean(X,0.000000001); Print(X);
00402 
00403       UpperBandMatrix U; U << B; LowerBandMatrix L; L << B;
00404       DiagonalMatrix D; D << B;
00405       Print( Matrix(L + (U - D - B)) );
00406 
00407 
00408 
00409       for (i=1; i<=8; i++)  A.Column(i) << B.Column(i);
00410       Print(Matrix(A-B));
00411    }
00412    {
00413       Tracer et1("Stage 2");
00414       BandMatrix A(7,2,2);
00415       int i,j;
00416       for (i=1; i<=7; i++) for (j=1; j<=7; j++)
00417       {
00418          int k=i-j; if (k<0) k = -k;
00419          if (k==0) A(i,j)=6;
00420          else if (k==1) A(i,j) = -4;
00421          else if (k==2) A(i,j) = 1;
00422          A(1,1) = A(7,7) = 5;
00423       }
00424       DiagonalMatrix D(7); D = 0.0; A = A - D;
00425       BandLUMatrix B(A); Matrix M = A;
00426       ColumnVector V(6);
00427       V(1) = LogDeterminant(B).Value();
00428       V(2) = LogDeterminant(A).Value();
00429       V(3) = LogDeterminant(M).Value();
00430       V(4) = Determinant(B);
00431       V(5) = Determinant(A);
00432       V(6) = Determinant(M);
00433       V = V / 64 - 1; Clean(V,0.000000001); Print(V);
00434       ColumnVector X(7);
00435 
00436       Real a[] = {1,2,3,4,5,6,7};
00437       X << a;
00438       M = (M.i()*X).t() - (B.i()*X).t() * 2.0 + (A.i()*X).t();
00439       Clean(M,0.000000001); Print(M);
00440 
00441 
00442       BandMatrix P(80,2,5); ColumnVector CX(80);
00443       for (i=1; i<=80; i++) for (j=1; j<=80; j++)
00444       { int d = i-j; if (d<=2 && d>=-5) P(i,j) = i + j/100.0; }
00445       for (i=1; i<=80; i++)  CX(i) = i*100.0;
00446       Matrix MP = P;
00447       ColumnVector V1 = P.i() * CX; ColumnVector V2 = MP.i() * CX;
00448       V = V1 - V2; Clean(V,0.000000001); Print(V);
00449 
00450       V1 = P * V1; V2 = MP * V2; V = V1 - V2; Clean(V,0.000000001); Print(V);
00451       RowVector XX(1);
00452       XX = LogDeterminant(P).Value() / LogDeterminant(MP).Value() - 1.0;
00453       Clean(XX,0.000000001); Print(XX);
00454 
00455       LowerBandMatrix LP(80,5);
00456       for (i=1; i<=80; i++) for (j=1; j<=80; j++)
00457       { int d = i-j; if (d<=5 && d>=0) LP(i,j) = i + j/100.0; }
00458       MP = LP;
00459       XX.ReSize(4);
00460       XX(1) = LogDeterminant(LP).Value();
00461       XX(2) = LogDeterminant(MP).Value();
00462       V1 = LP.i() * CX; V2 = MP.i() * CX;
00463       V = V1 - V2; Clean(V,0.000000001); Print(V);
00464 
00465       UpperBandMatrix UP(80,4);
00466       for (i=1; i<=80; i++) for (j=1; j<=80; j++)
00467       { int d = i-j; if (d<=0 && d>=-4) UP(i,j) = i + j/100.0; }
00468       MP = UP;
00469       XX(3) = LogDeterminant(UP).Value();
00470       XX(4) = LogDeterminant(MP).Value();
00471       V1 = UP.i() * CX; V2 = MP.i() * CX;
00472       V = V1 - V2; Clean(V,0.000000001); Print(V);
00473       XX = XX / SumAbsoluteValue(XX) - .25; Clean(XX,0.000000001); Print(XX);
00474    }
00475 
00476    {
00477       Tracer et1("Stage 3");
00478       SymmetricBandMatrix SA(8,5);
00479       int i,j;
00480       for (i=1; i<=8; i++) for (j=1; j<=8; j++)
00481          if (i-j<=5 && 0<=i-j) SA(i,j) =i + j/128.0;
00482       DiagonalMatrix D(8); D = 10; SA = SA + D;
00483 
00484       Matrix MA1(8,8); Matrix MA2(8,8);
00485       for (i=1; i<=8; i++)
00486          { MA1.Column(i) << SA.Column(i); MA2.Row(i) << SA.Row(i); }
00487       Print(Matrix(MA1-MA2));
00488 
00489       D = 10; SA = SA.t() + D; MA1 = MA1 + D;
00490       Print(Matrix(MA1-SA));
00491 
00492       UpperBandMatrix UB(8,3); LowerBandMatrix LB(8,4);
00493       D << SA; UB << SA; LB << SA;
00494       SA = SA * 5.0; D = D * 5.0; LB = LB * 5.0; UB = UB * 5.0;
00495       BandMatrix B = LB - D + UB - SA; Print(Matrix(B));
00496 
00497       SymmetricBandMatrix A(7,2); A = 100.0;
00498       for (i=1; i<=7; i++) for (j=1; j<=7; j++)
00499       {
00500          int k=i-j;
00501          if (k==0) A(i,j)=6;
00502          else if (k==1) A(i,j) = -4;
00503          else if (k==2) A(i,j) = 1;
00504          A(1,1) = A(7,7) = 5;
00505       }
00506       BandLUMatrix C(A); Matrix M = A;
00507       ColumnVector X(8);
00508       X(1) = LogDeterminant(C).Value() - 64;
00509       X(2) = LogDeterminant(A).Value() - 64;
00510       X(3) = LogDeterminant(M).Value() - 64;
00511       X(4) = SumSquare(M) - SumSquare(A);
00512       X(5) = SumAbsoluteValue(M) - SumAbsoluteValue(A);
00513       X(6) = MaximumAbsoluteValue(M) - MaximumAbsoluteValue(A);
00514       X(7) = Trace(M) - Trace(A);
00515       X(8) = Sum(M) - Sum(A);
00516       Clean(X,0.000000001); Print(X);
00517 
00518       Real a[] = {1,2,3,4,5,6,7};
00519       X.ReSize(7);
00520       X << a;
00521       X = M.i()*X - C.i()*X * 2 + A.i()*X;
00522       Clean(X,0.000000001); Print(X);
00523 
00524 
00525       LB << A; UB << A; D << A;
00526       BandMatrix XA = LB + (UB - D);
00527       Print(Matrix(XA - A));
00528 
00529       for (i=1; i<=7; i++) for (j=1; j<=7; j++)
00530       {
00531          int k=i-j;
00532          if (k==0) A(i,j)=6;
00533          else if (k==1) A(i,j) = -4;
00534          else if (k==2) A(i,j) = 1;
00535          A(1,1) = A(7,7) = 5;
00536       }
00537       D = 1;
00538 
00539       M = LB.i() * LB - D; Clean(M,0.000000001); Print(M);
00540       M = UB.i() * UB - D; Clean(M,0.000000001); Print(M);
00541       M = XA.i() * XA - D; Clean(M,0.000000001); Print(M);
00542       Matrix MUB = UB; Matrix MLB = LB;
00543       M = LB.i() * UB - LB.i() * MUB; Clean(M,0.000000001); Print(M);
00544       M = UB.i() * LB - UB.i() * MLB; Clean(M,0.000000001); Print(M);
00545       M = LB.i() * UB - LB.i() * Matrix(UB); Clean(M,0.000000001); Print(M);
00546       M = UB.i() * LB - UB.i() * Matrix(LB); Clean(M,0.000000001); Print(M);
00547    }
00548 
00549    {
00550       // some tests about adding and subtracting band matrices of different
00551       // sizes - check bandwidth of results
00552       Tracer et1("Stage 4");
00553 
00554       BandFunctions(9, 3, 9, 3);   // equal
00555       BandFunctions(4, 7, 4, 7);   // equal
00556       BandFunctions(9, 3, 5, 8);   // neither < or >
00557       BandFunctions(5, 8, 9, 3);   // neither < or >
00558       BandFunctions(9, 8, 5, 3);   // >
00559       BandFunctions(3, 5, 8, 9);   // <
00560 
00561       LowerBandFunctions(9, 9);    // equal
00562       LowerBandFunctions(4, 4);    // equal
00563       LowerBandFunctions(9, 5);    // >
00564       LowerBandFunctions(3, 8);    // <
00565 
00566       UpperBandFunctions(3, 3);    // equal
00567       UpperBandFunctions(7, 7);    // equal
00568       UpperBandFunctions(8, 3);    // >
00569       UpperBandFunctions(5, 9);    // <
00570 
00571       SymmetricBandFunctions(9, 9);   // equal
00572       SymmetricBandFunctions(4, 4);   // equal
00573       SymmetricBandFunctions(9, 5);   // >
00574       SymmetricBandFunctions(3, 8);   // <
00575 
00576       DiagonalMatrix D(6); D << 2 << 3 << 4.5 << 1.25 << 9.5 << -5;
00577       BandMatrix BD = D;
00578       UpperBandMatrix UBD; UBD = D;
00579       LowerBandMatrix LBD; LBD = D;
00580       SymmetricBandMatrix SBD = D;
00581       Matrix X = BD - D; Print(X); X = UBD - D; Print(X);
00582       X = LBD - D; Print(X); X = SBD - D; Print(X);
00583       Matrix Test(9,2);
00584       Test(1,1) =  BD.BandWidth().Lower(); Test(1,2) =  BD.BandWidth().Upper();
00585       Test(2,1) = UBD.BandWidth().Lower(); Test(2,2) = UBD.BandWidth().Upper();
00586       Test(3,1) = LBD.BandWidth().Lower(); Test(3,2) = LBD.BandWidth().Upper();
00587       Test(4,1) = SBD.BandWidth().Lower(); Test(4,2) = SBD.BandWidth().Upper();
00588 
00589       IdentityMatrix I(10); I *= 5;
00590       BD = I; UBD = I; LBD = I; SBD = I;
00591       X = BD - I; Print(X); X = UBD - I; Print(X);
00592       X = LBD - I; Print(X); X = SBD - I; Print(X);
00593       Test(5,1) =  BD.BandWidth().Lower(); Test(5,2) =  BD.BandWidth().Upper();
00594       Test(6,1) = UBD.BandWidth().Lower(); Test(6,2) = UBD.BandWidth().Upper();
00595       Test(7,1) = LBD.BandWidth().Lower(); Test(7,2) = LBD.BandWidth().Upper();
00596       Test(8,1) = SBD.BandWidth().Lower(); Test(8,2) = SBD.BandWidth().Upper();
00597 
00598       RowVector RV = D.AsRow(); I.ReSize(6); BandMatrix BI = I; I = 1;
00599       BD =  RV.AsDiagonal() +  BI; X =  BD - D - I; Print(X);
00600       Test(9,1) =  BD.BandWidth().Lower(); Test(9,2) =  BD.BandWidth().Upper();
00601 
00602       Print(Test);
00603    }
00604 
00605    {
00606       // various element functions
00607       Tracer et1("Stage 5");
00608 
00609       int i, j;
00610       Matrix Count(1, 1); Count = 0;  // for counting errors
00611       Matrix M(20,30);
00612       for (i = 1; i <= 20; ++i) for (j = 1; j <= 30; ++j)
00613          M(i, j) = 100 * i + j;
00614       const Matrix CM = M;
00615       for (i = 1; i <= 20; ++i) for (j = 1; j <= 30; ++j)
00616       {
00617          if (M(i, j) != CM(i, j)) ++Count(1,1);
00618          if (M(i, j) != CM.element(i-1, j-1)) ++Count(1,1);
00619          if (M(i, j) != M.element(i-1, j-1)) ++Count(1,1);
00620       }
00621 
00622       UpperTriangularMatrix U(20);
00623       for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00624          U(i, j) = 100 * i + j;
00625       const UpperTriangularMatrix CU = U;
00626       for (i = 1; i <= 20; ++i) for (j = i; j <= 20; ++j)
00627       {
00628          if (U(i, j) != CU(i, j)) ++Count(1,1);
00629          if (U(i, j) != CU.element(i-1, j-1)) ++Count(1,1);
00630          if (U(i, j) != U.element(i-1, j-1)) ++Count(1,1);
00631       }
00632 
00633       LowerTriangularMatrix L(20);
00634       for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00635          L(i, j) = 100 * i + j;
00636       const LowerTriangularMatrix CL = L;
00637       for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00638       {
00639          if (L(i, j) != CL(i, j)) ++Count(1,1);
00640          if (L(i, j) != CL.element(i-1, j-1)) ++Count(1,1);
00641          if (L(i, j) != L.element(i-1, j-1)) ++Count(1,1);
00642       }
00643 
00644       SymmetricMatrix S(20);
00645       for (i = 1; i <= 20; ++i) for (j = 1; j <= i; ++j)
00646          S(i, j) = 100 * i + j;
00647       const SymmetricMatrix CS = S;
00648       for (i = 1; i <= 20; ++i) for (j = 1; j <= 20; ++j)
00649       {
00650          if (S(i, j) != CS(i, j)) ++Count(1,1);
00651          if (S(i, j) != CS.element(i-1, j-1)) ++Count(1,1);
00652          if (S(i, j) != S.element(i-1, j-1)) ++Count(1,1);
00653          if (S(i, j) != S(j, i)) ++Count(1,1);
00654          if (S(i, j) != CS(i, j)) ++Count(1,1);
00655          if (S(i, j) != CS.element(i-1, j-1)) ++Count(1,1);
00656          if (S(i, j) != S.element(i-1, j-1)) ++Count(1,1);
00657       }
00658 
00659       DiagonalMatrix D(20);
00660       for (i = 1; i <= 20; ++i) D(i) = 100 * i + i * i;
00661       const DiagonalMatrix CD = D;
00662       for (i = 1; i <= 20; ++i)
00663       {
00664          if (D(i, i) != CD(i, i)) ++Count(1,1);
00665          if (D(i, i) != CD.element(i-1, i-1)) ++Count(1,1);
00666          if (D(i, i) != D.element(i-1, i-1)) ++Count(1,1);
00667          if (D(i, i) != D(i)) ++Count(1,1);
00668          if (D(i) != CD(i)) ++Count(1,1);
00669          if (D(i) != CD.element(i-1)) ++Count(1,1);
00670          if (D(i) != D.element(i-1)) ++Count(1,1);
00671       }
00672 
00673       RowVector R(20);
00674       for (i = 1; i <= 20; ++i) R(i) = 100 * i + i * i;
00675       const RowVector CR = R;
00676       for (i = 1; i <= 20; ++i)
00677       {
00678          if (R(i) != CR(i)) ++Count(1,1);
00679          if (R(i) != CR.element(i-1)) ++Count(1,1);
00680          if (R(i) != R.element(i-1)) ++Count(1,1);
00681       }
00682 
00683       ColumnVector C(20);
00684       for (i = 1; i <= 20; ++i) C(i) = 100 * i + i * i;
00685       const ColumnVector CC = C;
00686       for (i = 1; i <= 20; ++i)
00687       {
00688          if (C(i) != CC(i)) ++Count(1,1);
00689          if (C(i) != CC.element(i-1)) ++Count(1,1);
00690          if (C(i) != C.element(i-1)) ++Count(1,1);
00691       }
00692 
00693       Print(Count);
00694 
00695    }
00696 
00697    {
00698       // resize to another matrix size
00699       Tracer et1("Stage 6");
00700 
00701       Matrix A(20, 30); A = 3;
00702       Matrix B(3, 4);
00703       B.ReSize(A); B = 6; B -= 2 * A; Print(B);
00704 
00705       A.ReSize(25,25); A = 12;
00706 
00707       UpperTriangularMatrix U(5);
00708       U.ReSize(A); U = 12; U << (U - A); Print(U);
00709 
00710       LowerTriangularMatrix L(5);
00711       L.ReSize(U); L = 12; L << (L - A); Print(L);
00712 
00713       DiagonalMatrix D(5);
00714       D.ReSize(U); D = 12; D << (D - A); Print(D);
00715 
00716       SymmetricMatrix S(5);
00717       S.ReSize(U); S = 12; S << (S - A); Print(S);
00718 
00719       IdentityMatrix I(5);
00720       I.ReSize(U); I = 12; D << (I - A); Print(D);
00721 
00722       A.ReSize(10, 1); A = 17;
00723       ColumnVector C(5); C.ReSize(A); C = 17; C -= A; Print(C);
00724 
00725       A.ReSize(1, 10); A = 15;
00726       RowVector R(5); R.ReSize(A); R = 15; R -= A; Print(R);
00727 
00728    }
00729 
00730    {
00731       // generic matrix and identity matrix
00732       Tracer et1("Stage 7");
00733       IdentityMatrix I(5);
00734       I *= 4;
00735       GenericMatrix GM = I;
00736       GM /= 2;
00737       DiagonalMatrix D = GM;
00738       Matrix A = GM + 10;
00739       A -= 10;
00740       A -= D;
00741       Print(A);
00742    }
00743 
00744    {
00745       // SP and upper and lower triangular matrices
00746       Tracer et1("Stage 8");
00747       UpperTriangularMatrix UT(4);
00748       UT << 3 << 7 << 3 << 9
00749               << 5 << 2 << 6
00750                    << 8 << 0
00751                         << 4;
00752       LowerTriangularMatrix LT; LT.ReSize(UT);
00753       LT << 2
00754          << 7 << 9
00755          << 2 << 8 << 6
00756          << 1 << 0 << 3 << 5;
00757 
00758       DiagonalMatrix D = SP(UT, LT);
00759       DiagonalMatrix D1(4);
00760       D1 << 6 << 45 << 48 << 20;
00761       D -= D1; Print(D);
00762       BandMatrix BM = SP(UT, LT);
00763       Matrix X = BM - D1; Print(X);
00764       RowVector RV(2);
00765       RV(1) = BM.BandWidth().Lower();
00766       RV(2) = BM.BandWidth().Upper();
00767       Print(RV);
00768    }
00769    
00770    {
00771       // Helmert multiplies
00772       Tracer et1("Stage 9");
00773       MultWithCarry MCW;
00774       int i, j;
00775 
00776       IdentityMatrix I(8);
00777       Matrix X = I;
00778       Matrix Y = Helmert_transpose(X);
00779       Matrix H = Helmert(9); H -= Y.t(); Clean(H,0.000000001); Print(H);
00780       Matrix Z = Helmert(Y) - I;
00781       Clean(Z,0.000000001); Print(Z);
00782       
00783       Matrix A(9, 8);
00784       for (i = 1; i <= 9; ++i) for (j = 1; j <= 8; ++j)
00785          A(i, j) = Helmert_transpose(X.column(j), i);
00786       A -= Y; Clean(A,0.000000001); Print(A); 
00787    
00788       X = I;
00789       Y = Helmert_transpose(X, true);
00790       H = Helmert(8, true); H -= Y.t(); Clean(H,0.000000001); Print(H);
00791       Z = Helmert(Y, true) - I;
00792       Clean(Z,0.000000001); Print(Z);
00793       
00794       A.resize(8, 8);
00795       for (i = 1; i <= 8; ++i) for (j = 1; j <= 8; ++j)
00796          A(i, j) = Helmert_transpose(X.column(j), i, true);
00797       A -= Y; Clean(A,0.000000001); Print(A); 
00798 
00799 
00800 
00801       I.ReSize(9);
00802       X = I;
00803       Y = Helmert(X, true);
00804       H = Helmert(9, true); H -= Y; Clean(H,0.000000001); Print(H);
00805       Z = Helmert_transpose(Y, true) - I;
00806       Clean(Z,0.000000001); Print(Z);
00807    
00808       A.ReSize(9, 9);
00809       for (i = 1; i <= 9; ++i) A.Column(i) = Helmert(9, i, true);
00810       A -= Y; Clean(A,0.000000001); Print(A);
00811 
00812       Y = Helmert(X);
00813       A.ReSize(8, 9);
00814       for (i = 1; i <= 9; ++i) A.Column(i) = Helmert(9, i);
00815       A -= Y; Clean(A,0.000000001); Print(A);
00816       
00817       ColumnVector Twos(100); Twos = 2;
00818       ColumnVector CV = Helmert(Twos); Clean(CV,0.000000001); Print(CV);
00819       
00820       X.resize(25,30);
00821       FillWithValues(MCW, X);
00822       Y = Helmert(X);
00823       Z = Helmert(X,true).rows(1,24) - Y;
00824       Clean(Z,0.000000001); Print(Z);
00825       Z = Helmert(X,true).row(25) - X.sum_columns() / 5.0;
00826       Clean(Z,0.000000001); Print(Z);
00827       
00828       I.resize(15);
00829       X = I;
00830       Z = Helmert_transpose(X, true) - Helmert(X, true).t();
00831       Clean(Z,0.000000001); Print(Z);
00832       I.resize(14); Y = I;
00833       Z = Helmert(X) - Helmert_transpose(Y).t();
00834       Clean(Z,0.000000001); Print(Z);
00835       
00836       
00837       
00838    }
00839       
00840       
00841       
00842       
00843       
00844 
00845 //   cout << "\nEnd of Seventeenth test\n";
00846 }
00847 
00848 


kni
Author(s): Martin Günther
autogenerated on Thu Jun 6 2019 21:42:34