home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / n / newmat06.zip / TMTG.CXX < prev    next >
C/C++ Source or Header  |  1992-11-26  |  5KB  |  161 lines

  1.  
  2. //#define WANT_STREAM
  3.  
  4. #include "include.h"
  5.  
  6. #include "newmatap.h"
  7.  
  8. void Print(const Matrix& X);
  9. void Print(const UpperTriangularMatrix& X);
  10. void Print(const DiagonalMatrix& X);
  11. void Print(const SymmetricMatrix& X);
  12. void Print(const LowerTriangularMatrix& X);
  13.  
  14. void Clean(Matrix&, Real);
  15.  
  16.  
  17.  
  18.  
  19. void trymatg()
  20. {
  21. //   cout << "\nSixteenth test of Matrix package\n";
  22. //   cout << "\n";
  23.    Tracer et("Sixteenth test of Matrix package");
  24.    Exception::PrintTrace(TRUE);
  25.  
  26.    int i,j;
  27.    Matrix M(4,7);
  28.    for (i=1; i<=4; i++) for (j=1; j<=7; j++) M(i,j) = 100 * i + j;
  29.    ColumnVector CV = M.AsColumn();
  30.    {
  31.       Tracer et1("Stage 1");
  32.       RowVector test(7);
  33.       test(1) = SumSquare(M);
  34.       test(2) = SumSquare(CV);
  35.       test(3) = SumSquare(CV.t());
  36.       test(4) = SumSquare(CV.AsDiagonal());
  37.       test(5) = SumSquare(M.AsColumn());
  38.       test(6) = Matrix(CV.t()*CV)(1,1);
  39.       test(7) = (CV.t()*CV).AsScalar();
  40.       test = test - 2156560; Print(test);
  41.    }
  42.  
  43. /*
  44.    MatrixType mt(MatrixType::US);
  45.    {
  46.       M.AsColumn().MatrixParameters(i,j,mt);
  47.       cout << (char*)mt <<" "<< i <<" "<< j <<" (ColV, 28, 1)\n";
  48.    }
  49.    {
  50.       M.AsRow().MatrixParameters(i,j,mt);
  51.       cout << (char*)mt <<" "<< i <<" "<< j <<" (RowV, 1, 28)\n";
  52.    }
  53.    {
  54.       M.AsDiagonal().MatrixParameters(i,j,mt);
  55.       cout << (char*)mt <<" "<< i <<" "<< j <<" (Diag, 28, 28)\n";
  56.    }
  57.    {
  58.       M.AsMatrix(2,14).MatrixParameters(i,j,mt);
  59.       cout << (char*)mt <<" "<< i <<" "<< j <<" (Rect, 2, 14)\n";
  60.    }
  61.    {
  62.       (M.t()*M*M.t()).MatrixParameters(i,j,mt);
  63.       cout << (char*)mt <<" "<< i <<" "<< j <<" (Rect, 7, 4)\n";
  64.    }
  65.    {
  66.       M.t().MatrixParameters(i,j,mt);
  67.       cout << (char*)mt <<" "<< i <<" "<< j <<" (Rect, 7, 4)\n";
  68.    }
  69.    {
  70.       (M/2.0).MatrixParameters(i,j,mt);
  71.       cout << (char*)mt <<" "<< i <<" "<< j <<" (Rect, 4, 7)\n";
  72.    }
  73. */
  74.    UpperTriangularMatrix U(6);
  75.    for (i=1; i<=6; i++) for (j=i; j<=6; j++) U(i,j) = i + (i-j) * (i-j);
  76.    M = U; DiagonalMatrix D; D << U;
  77.    LowerTriangularMatrix L = U.t(); SymmetricMatrix S; S << (L+U)/2.0;
  78.    {
  79.       Tracer et1("Stage 2");
  80.       RowVector test(6);
  81.       test(1) = U.Trace();
  82.       test(2) = L.Trace();
  83.       test(3) = D.Trace();
  84.       test(4) = S.Trace();
  85.       test(5) = M.Trace();
  86.       test(6) = ((L+U)/2.0).Trace();
  87.       test = test - 21; Print(test);
  88.       test.ReDimension(5);
  89.       test(1) = LogDeterminant(U).Value();
  90.       test(2) = LogDeterminant(L).Value();
  91.       test(3) = LogDeterminant(D).Value();
  92.       test(4) = LogDeterminant(D).Value();
  93.       test(5) =  LogDeterminant((L+D)/2.0).Value(); // (!=Glockenspiel)
  94.       test = test - 720; Clean(test,0.000000001); Print(test);
  95.    }
  96.  
  97.    {
  98.       Tracer et1("Stage 3");
  99.       S << L*U; M = S;
  100.       RowVector test(4);
  101.       test(1) = LogDeterminant(S).Value();
  102.       test(2) = LogDeterminant(M).Value();
  103.       test(3) = LogDeterminant(L*U).Value();           // (!=Glockenspiel)
  104.       test(4) = LogDeterminant(Matrix(L*L)).Value();   // (!=Glockenspiel)
  105.       test = test - 720.0 * 720.0; Clean(test,0.000000001); Print(test);
  106.    }
  107.  
  108.    {
  109.       Tracer et1("Stage 4");
  110.       M = S * S;
  111.       Matrix SX = S;
  112.       RowVector test(3);
  113.       test(1) = SumSquare(S);
  114.       test(2) = SumSquare(SX);
  115.       test(3) = Trace(M);
  116.       test = test - 3925961; Print(test);
  117.    }
  118.    {
  119.       Tracer et1("Stage 5");
  120.       SymmetricMatrix SM(10), SN(10);
  121.       for (i=1; i<=10; i++) for (j=i; j<=10; j++)
  122.       {
  123.          SM(i,j) = 1.5 * i - j; SN(i,j) = SM(i,j) * SM(i,j);
  124.          if (SM(i,j) < 0.0)   SN(i,j) = - SN(i,j);
  125.       }
  126.       Matrix M = SM, N = SN; RowVector test(4);
  127.       test(1) = SumAbsoluteValue(SN);
  128.       test(2) = SumAbsoluteValue(-SN);
  129.       test(3) = SumAbsoluteValue(N);
  130.       test(4) = SumAbsoluteValue(-N);
  131.       test = test - 1168.75; Print(test);
  132.       test(1) = MaximumAbsoluteValue(SM);
  133.       test(2) = MaximumAbsoluteValue(-SM);
  134.       test(3) = MaximumAbsoluteValue(M);
  135.       test(4) = MaximumAbsoluteValue(-M);
  136.       test = test - 8.5; Print(test);
  137.    }
  138.    {
  139.       Tracer et1("Stage 6");
  140.       Matrix M(15,20); Real value = 0.0;
  141.       for (i=1; i<=15; i++) { for (j=1; j<=20; j++) M(i,j) = 1.5 * i - j; }
  142.       for (i=1; i<=20; i++)
  143.       { Real v = SumAbsoluteValue(M.Column(i)); if (value<v) value = v; }
  144.       RowVector test(3);
  145.       test(1) = value;
  146.       test(2) = Norm1(M);
  147.       test(3) = NormInfinity(M.t());
  148.       test = test - 165; Print(test);
  149.       test.ReDimension(5);
  150.       ColumnVector CV = M.AsColumn(); M = CV.t();
  151.       test(1) = Norm1(CV.t());
  152.       test(2) = MaximumAbsoluteValue(M);
  153.       test(3) = NormInfinity(CV);
  154.       test(4) = Norm1(M);
  155.       test(5) = NormInfinity(M.t());
  156.       test = test - 21.5; Print(test);
  157.    }   
  158.  
  159. //   cout << "\nEnd of Sixteenth test\n";
  160. }
  161.