| 1 |  | 
|---|
| 2 | //#define WANT_STREAM | 
|---|
| 3 |  | 
|---|
| 4 | #include "include.h" | 
|---|
| 5 |  | 
|---|
| 6 | #include "newmat.h" | 
|---|
| 7 |  | 
|---|
| 8 | #include "tmt.h" | 
|---|
| 9 |  | 
|---|
| 10 | #ifdef use_namespace | 
|---|
| 11 | using namespace NEWMAT; | 
|---|
| 12 | #endif | 
|---|
| 13 |  | 
|---|
| 14 |  | 
|---|
| 15 | // **************************** test program ****************************** | 
|---|
| 16 |  | 
|---|
| 17 |  | 
|---|
| 18 |  | 
|---|
| 19 | ReturnMatrix Returner0(const GenericMatrix& GM) | 
|---|
| 20 | { Matrix M = GM; M.Release(); return M; } | 
|---|
| 21 |  | 
|---|
| 22 | ReturnMatrix Returner1(const GenericMatrix& GM) | 
|---|
| 23 | { Matrix M = GM+1; M.Release(); return M; } | 
|---|
| 24 |  | 
|---|
| 25 | ReturnMatrix Returner2(const GenericMatrix& GM) | 
|---|
| 26 | { UpperBandMatrix M = GM*2; M.Release(); return M; } | 
|---|
| 27 |  | 
|---|
| 28 | ReturnMatrix Returner3(const GenericMatrix& GM) | 
|---|
| 29 | { LowerBandMatrix M = GM*3; M.Release(); return M; } | 
|---|
| 30 |  | 
|---|
| 31 | ReturnMatrix Returner4(const GenericMatrix& GM) | 
|---|
| 32 | { SymmetricMatrix M = GM+4; M.Release(); return M; } | 
|---|
| 33 |  | 
|---|
| 34 | ReturnMatrix Returner5(const GenericMatrix& GM) | 
|---|
| 35 | { SymmetricBandMatrix M = GM*5; M.Release(); return M; } | 
|---|
| 36 |  | 
|---|
| 37 | ReturnMatrix Returner6(const GenericMatrix& GM) | 
|---|
| 38 | { BandMatrix M = GM*6; M.Release(); return M; } | 
|---|
| 39 |  | 
|---|
| 40 | ReturnMatrix Returner7(const GenericMatrix& GM) | 
|---|
| 41 | { DiagonalMatrix M = GM*7; M.Release(); return M; } | 
|---|
| 42 |  | 
|---|
| 43 | void trymat5() | 
|---|
| 44 | { | 
|---|
| 45 | //   cout << "\nFifth test of Matrix package\n"; | 
|---|
| 46 |    Tracer et("Fifth test of Matrix package"); | 
|---|
| 47 |    Tracer::PrintTrace(); | 
|---|
| 48 |  | 
|---|
| 49 |    int i,j; | 
|---|
| 50 |  | 
|---|
| 51 |    Matrix A(5,6); | 
|---|
| 52 |    for (i=1;i<=5;i++) for (j=1;j<=6;j++) A(i,j)=1+i*j+i*i+j*j; | 
|---|
| 53 |    ColumnVector CV(6); | 
|---|
| 54 |    for (i=1;i<=6;i++) CV(i)=i*i+3; | 
|---|
| 55 |    ColumnVector CV2(5); for (i=1;i<=5;i++) CV2(i)=1.0; | 
|---|
| 56 |    ColumnVector CV1=CV; | 
|---|
| 57 |  | 
|---|
| 58 |    { | 
|---|
| 59 |       CV=A*CV; | 
|---|
| 60 |       RowVector RV=CV.t(); // RowVector RV; RV=CV.t(); | 
|---|
| 61 |       RV=RV-1.0; | 
|---|
| 62 |       CV=(RV*A).t()+A.t()*CV2; CV1=(A.t()*A)*CV1 - CV; | 
|---|
| 63 |       Print(CV1); | 
|---|
| 64 |    } | 
|---|
| 65 |  | 
|---|
| 66 |    CV1.ReSize(6); | 
|---|
| 67 |    CV2.ReSize(6); | 
|---|
| 68 |    CV.ReSize(6); | 
|---|
| 69 |    for (i=1;i<=6;i++) { CV1(i)=i*3+1; CV2(i)=10-i; CV(i)=11+i*2; } | 
|---|
| 70 |    ColumnVector CX=CV2-CV; { CX=CX+CV1; Print(CX); } | 
|---|
| 71 |    Print(ColumnVector(CV1+CV2-CV)); | 
|---|
| 72 |    RowVector RV=CV.t(); RowVector RV1=CV1.t(); | 
|---|
| 73 |    RowVector R=RV-RV1; Print(RowVector(R-CV2.t())); | 
|---|
| 74 |  | 
|---|
| 75 | // test loading of list | 
|---|
| 76 |  | 
|---|
| 77 |    RV.ReSize(10); | 
|---|
| 78 |    for (i=1;i<=10;i++) RV(i) = i*i; | 
|---|
| 79 |    RV1.ReSize(10); | 
|---|
| 80 |    RV1 << 1 << 4 << 9 << 16 << 25 << 36 << 49 << 64 << 81 << 100; // << 121; | 
|---|
| 81 |    Print(RowVector(RV-RV1)); | 
|---|
| 82 |  | 
|---|
| 83 |    et.ReName("Fifth test of Matrix package - almost at end"); | 
|---|
| 84 |  | 
|---|
| 85 |    Matrix X(2,3); | 
|---|
| 86 |    X << 11 << 12 << 13 | 
|---|
| 87 |      << 21 << 22 << 23; | 
|---|
| 88 |  | 
|---|
| 89 |    Matrix Y = X.t();                 // check simple transpose | 
|---|
| 90 |  | 
|---|
| 91 |    X(1,1) -= 11; X(1,2) -= 12; X(1,3) -= 13; | 
|---|
| 92 |    X(2,1) -= 21; X(2,2) -= 22; X(2,3) -= 23; | 
|---|
| 93 |    Print(X); | 
|---|
| 94 |  | 
|---|
| 95 |    Y(1,1) -= 11; Y(2,1) -= 12; Y(3,1) -= 13; | 
|---|
| 96 |    Y(1,2) -= 21; Y(2,2) -= 22; Y(3,2) -= 23; | 
|---|
| 97 |    Print(Y); | 
|---|
| 98 |  | 
|---|
| 99 |    et.ReName("Fifth test of Matrix package - at end"); | 
|---|
| 100 |  | 
|---|
| 101 |    RV = Returner1(RV)-1; Print(RowVector(RV-RV1)); | 
|---|
| 102 |    CV1 = Returner1(RV.t())-1; Print(ColumnVector(RV.t()-CV1)); | 
|---|
| 103 | #ifndef DONT_DO_NRIC | 
|---|
| 104 |    nricMatrix AA = A; | 
|---|
| 105 |    X = Returner1(AA)-A-1; Print(X); | 
|---|
| 106 | #endif | 
|---|
| 107 |    UpperTriangularMatrix UT(31); | 
|---|
| 108 |    for (i=1; i<=31; i++) for (j=i; j<=31; j++) UT(i,j) = i+j+(i-j)*(i-2*j); | 
|---|
| 109 |    UpperBandMatrix UB(31,5); UB.Inject(UT); | 
|---|
| 110 |    LowerTriangularMatrix LT = UT.t(); | 
|---|
| 111 |    LowerBandMatrix LB(31,5); LB.Inject(LT); | 
|---|
| 112 |    A = Returner0(UB)-LB.t(); Print(A); | 
|---|
| 113 |    A = Returner2(UB).t()-LB*2; Print(A); | 
|---|
| 114 |    A = Returner3(LB).t()-UB*3; Print(A); | 
|---|
| 115 |    SymmetricMatrix SM; SM << (UT+LT); | 
|---|
| 116 |    A = Returner4(SM)-UT-LT-4; Print(A); | 
|---|
| 117 |    SymmetricBandMatrix SB(31,5); SB.Inject(SM); | 
|---|
| 118 |    A = Returner5(SB)/5-UB-LB; Print(A); | 
|---|
| 119 |    BandMatrix B = UB+LB*LB; A = LB; | 
|---|
| 120 |    A = Returner6(B)/6 - UB - A*A; Print(A); | 
|---|
| 121 |    DiagonalMatrix D; D << UT; | 
|---|
| 122 |    D << (Returner7(D)/7 - UT); Print(D); | 
|---|
| 123 |  | 
|---|
| 124 | //   cout << "\nEnd of fifth test\n"; | 
|---|
| 125 | } | 
|---|