Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/lib/newmat/tmtb.cpp @ 4578

Last change on this file since 4578 was 4565, checked in by patrick, 19 years ago

orxonox/trunk: added the newmat library to the project. needs some translation in directory, temp under util/newmat. is needed by the collision detection engine to perform lin alg operations such as eigenvector decomposition. perhaps we will make our own library to do that later.

File size: 4.2 KB
Line 
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
11using namespace NEWMAT;
12#endif
13
14
15/**************************** test program ******************************/
16
17// make sure matrices work as members of a class
18
19class TestClass
20{
21   Matrix A;
22   Matrix B;
23public:
24   TestClass();
25   ReturnMatrix Sum();
26};
27
28TestClass::TestClass() : A(2,3)
29{
30   B.ReSize(2,3);
31   A << 1 << 4
32     << 4 << 1
33     << 2 << 9;
34   B << 8 << 5
35     << 5 << 8
36     << 7 << 0;
37}
38
39ReturnMatrix TestClass::Sum() { return Matrix(A + B).ForReturn(); }
40
41
42
43void trymatb()
44{
45//   cout << "\nEleventh test of Matrix package\n";
46   Tracer et("Eleventh test of Matrix package");
47   Tracer::PrintTrace();
48   int i; int j;
49   RowVector RV; RV.ReSize(10);
50   {
51      Tracer et1("Stage 1");
52      for (i=1;i<=10;i++) RV(i)=i*i-3;
53      Matrix X(1,1); X(1,1) = .25;
54      Print(RowVector(X.i() * RV - RV / .25));
55//      Print(RowVector(X.i() * Matrix(RV) - RV / .25)); // != zortech, AT&T
56      Print(RowVector(X.i() * RV - RV / .25));
57   }
58   LowerTriangularMatrix L(5); UpperTriangularMatrix U(5);
59   for (i=1; i<=5; i++) for (j=1; j<=i; j++)
60   { L(i,j) = i*i + j -2.0; U(j,i) = i*i*j+3; }
61   DiagonalMatrix D(5);
62   for (i=1; i<=5; i++) D(i,i) = i*i + i + 2;
63   Matrix M1 = -L; Matrix M2 = L-U; Matrix M3 = U*3; Matrix M4 = U-L;
64   Matrix M5 = M1 - D; M1 = D * (-3) - M3;
65   {
66      Tracer et1("Stage 2");
67      Print(Matrix((M2-M4*2)+M5*3-M1));
68      M1 = L.t(); Print(Matrix(M1.t()-L));
69      M1 = U.t(); Print(Matrix(M1.t()-U));
70   }
71   {
72      Tracer et1("Stage 3");
73      SymmetricMatrix S(5);
74      for (i=1; i<=5; i++) for (j=1; j<=i; j++) S(i,j) = i*j+i-j+5;
75      M2 = S.i() * M4; M1 = S; M3=M1*M2-M4; Clean(M3,0.00000001); Print(M3);
76      SymmetricMatrix T(5);
77      for (i=1; i<=5; i++) for (j=1; j<=i; j++) T(i,j) = i*i*j*j+i-j+5-i*j;
78      M1 = S.i() * T; M1 = S * M1; M1 = M1-T; Clean(M1,0.00000001); Print(M1);
79      ColumnVector CV(5); for (i=1; i<=5; i++) CV(i) = i*i*i+10;
80      M1 = CV * RV;
81   }
82   {
83      Tracer et1("Stage 4");
84      M4.ReSize(5,10);
85      for (i=1; i<=5; i++) for (j=1; j<=10; j++) M4(i,j) = (i*i*i+10)*(j*j-3);
86      Print(Matrix(M1-M4));
87      M1 = L.t(); M2 = U.t(); M3 = L+U; Print(Matrix(M1-M3.t()+M2));
88   }
89//   UpperTriangularMatrix U2((const UpperTriangularMatrix&)U); // != zortech
90   UpperTriangularMatrix U2((UpperTriangularMatrix&)U);
91   {
92      Tracer et1("Stage 5");
93      Print(Matrix(U2-U));
94      M2.ReSize(10,10);
95      for (i=1; i<=10; i++) for (j=1; j<=10; j++) M2(i,j) = (i*i*i+10)*(j*j-3);
96      D << M2; L << M2; U << M2;               // check copy into
97      Print( Matrix( (D+M2)-(L+U) ) );
98   }
99   {
100      Tracer et1("Stage 6");
101      M1.ReSize(6,10);
102      for (i=1; i<=6; i++) for (j=1; j<=10; j++)  M1(i,j) = 100*i + j;
103      M2 = M1.SubMatrix(3,5,4,7);  M3.ReSize(3,4);
104      for (i=3; i<=5; i++) for (j=4; j<=7; j++)   M3(i-2,j-3) = 100*i + j;
105      Print(Matrix(M2-M3));
106   }
107   int a1,a2,a3,a4;
108   {
109      Tracer et1("Stage 7");
110      int a1,a2,a3,a4;
111      a1=4; a2=9; a3=4; a4=7;
112      U.ReSize(10);
113      for (i=1; i<=10; i++) for (j=i; j<=10; j++)  U(i,j) = 100*i + j;
114      M2 = U.SubMatrix(a1,a2,a3,a4);
115      M3.ReSize(a2-a1+1,a4-a3+1); M3=0.0;
116      for (i=a1; i<=a2; i++) for (j=(i>a3) ? i : a3; j<=a4; j++)
117         M3(i-a1+1,j-a3+1) = 100*i + j;
118      Print(Matrix(M2-M3));
119   }
120   {
121      Tracer et1("Stage 8");
122      a1=3; a2=9; a3=2; a4=7;
123      U.ReSize(10);
124      for (i=1; i<=10; i++) for (j=i; j<=10; j++)  U(i,j) = 100*i + j;
125      M2 = U.SubMatrix(a1,a2,a3,a4);
126      M3.ReSize(a2-a1+1,a4-a3+1); M3=0.0;
127      for (i=a1; i<=a2; i++) for (j=(i>a3) ? i : a3; j<=a4; j++)
128         M3(i-a1+1,j-a3+1) = 100*i + j;
129      Print(Matrix(M2-M3));
130   }
131   {
132      Tracer et1("Stage 9");
133      a1=4; a2=6; a3=2; a4=5;
134      U.ReSize(10);
135      for (i=1; i<=10; i++) for (j=i; j<=10; j++)  U(i,j) = 100*i + j;
136      M2 = U.SubMatrix(a1,a2,a3,a4);
137      M3.ReSize(a2-a1+1,a4-a3+1); M3=0.0;
138      for (i=a1; i<=a2; i++) for (j=(i>a3) ? i : a3; j<=a4; j++)
139         M3(i-a1+1,j-a3+1) = 100*i + j;
140      Print(Matrix(M2-M3));
141   }
142
143   {
144      Tracer et1("Stage 10");
145      TestClass TC;
146      Matrix M = TC.Sum() - 9;
147      Print(M);
148   }
149
150
151//   cout << "\nEnd of eleventh test\n";
152}
Note: See TracBrowser for help on using the repository browser.