Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/util/newmat/tmt6.cpp @ 4565

Last change on this file since 4565 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.5 KB
Line 
1
2//#define WANT_STREAM
3#define WANT_MATH
4
5
6#include "include.h"
7
8#include "newmatap.h"
9
10#include "tmt.h"
11
12#ifdef use_namespace
13using namespace NEWMAT;
14#endif
15
16
17/**************************** test program ******************************/
18
19
20// slow sort program
21
22static void SimpleSortDescending(Real* first, const int length)
23{
24   int i = length;
25   while (--i)
26   {
27      Real x = *first; Real* f = first; Real* g = f;
28      int j = i;
29      while (j--) if (x < *(++f)) { g = f; x = *g; }
30      *g = *first; *first++ = x;
31   }
32}
33
34static void TestSort(int n)
35{
36   // make some data
37   RowVector X(n);
38   int i;
39   for (i = 1; i <= n; i++)
40      X(i) = sin((Real)i) + 0.3 * cos(i/5.0) - 0.6 * sin(i/7.0) + 0.2 * sin(2.0 * i);
41   RowVector X_Sorted = X; SimpleSortDescending(X_Sorted.Store(), n);
42   RowVector A = X + X.Reverse(); SimpleSortDescending(A.Store(), n);
43
44   // test descending sort
45
46   RowVector Y = X; SortDescending(Y); Y -= X_Sorted; Print(Y);
47   Y = X_Sorted; SortDescending(Y); Y -= X_Sorted; Print(Y);
48   Y = X_Sorted.Reverse(); SortDescending(Y); Y -= X_Sorted; Print(Y);
49   Y = X + X.Reverse(); SortDescending(Y); Y -= A; Print(Y);
50
51   // test ascending sort
52
53   Y = X; SortAscending(Y); Y -= X_Sorted.Reverse(); Print(Y);
54   Y = X_Sorted; SortAscending(Y); Y -= X_Sorted.Reverse(); Print(Y);
55   Y = X_Sorted.Reverse(); SortAscending(Y); Y -= X_Sorted.Reverse(); Print(Y);
56   Y = X + X.Reverse(); SortAscending(Y); Y -= A.Reverse(); Print(Y);
57}
58
59
60void trymat6()
61{
62   Tracer et("Sixth test of Matrix package");
63   Tracer::PrintTrace();
64
65   int i,j;
66
67
68   DiagonalMatrix D(6);
69   UpperTriangularMatrix U(6);
70   for (i=1;i<=6;i++) { for (j=i;j<=6;j++) U(i,j)=i*i*i-50; D(i,i)=i*i+i-10; }
71   LowerTriangularMatrix L=(U*3.0).t();
72   SymmetricMatrix S(6);
73   for (i=1;i<=6;i++) for (j=i;j<=6;j++) S(i,j)=i*i+2.0+j;
74   Matrix MD=D; Matrix ML=L; Matrix MU=U; Matrix MS=S;
75   Matrix M(6,6);
76   for (i=1;i<=6;i++) for (j=1;j<=6;j++) M(i,j)=i*j+i*i-10.0; 
77   {
78      Tracer et1("Stage 1");
79      Print(Matrix(MS+(-MS)));
80      Print(Matrix((S+M)-(MS+M)));
81      Print(Matrix((M+U)-(M+MU)));
82      Print(Matrix((M+L)-(M+ML)));
83   }
84   {
85      Tracer et1("Stage 2");
86      Print(Matrix((M+D)-(M+MD)));
87      Print(Matrix((U+D)-(MU+MD)));
88      Print(Matrix((D+L)-(ML+MD)));
89      Print(Matrix((-U+D)+MU-MD));
90      Print(Matrix((-L+D)+ML-MD));
91   }
92   {
93      Tracer et1("Stage 3 - concatenate");
94      RowVector A(5);
95      A << 1 << 2 << 3 << 4 << 5;
96      RowVector B(5);
97      B << 3 << 1 << 4 << 1 << 5;
98      Matrix C(3,5);
99      C <<  2 <<  3 <<  5 <<  7 << 11
100        << 13 << 17 << 19 << 23 << 29
101        << 31 << 37 << 41 << 43 << 47;
102      Matrix X1 = A & B & C;
103      Matrix X2 = (A.t() | B.t() | C.t()).t();
104      Matrix X3(5,5);
105      X3.Row(1)=A; X3.Row(2)=B; X3.Rows(3,5)=C;
106      Print(Matrix(X1-X2));
107      Print(Matrix(X1-X3));
108      LowerTriangularMatrix LT1; LT1 << (A & B & C);
109      UpperTriangularMatrix UT1; UT1 << (A.t() | B.t() | C.t());
110      Print(LowerTriangularMatrix(LT1-UT1.t()));
111      DiagonalMatrix D1; D1 << (A.t() | B.t() | C.t());
112      ColumnVector At = A.t();
113      ColumnVector Bt = B.t();
114      Matrix Ct = C.t();
115      LowerTriangularMatrix LT2; LT2 << (At | Bt | Ct);
116      UpperTriangularMatrix UT2; UT2 << (At.t() & Bt.t() & Ct.t());
117      Matrix ABt = At | Bt;
118      DiagonalMatrix D2; D2 << (ABt | Ct);
119      Print(LowerTriangularMatrix(LT2-UT2.t()));
120      Print(DiagonalMatrix(D1-D2));
121      Print(Matrix(LT1+UT2-D2-X1));
122      Matrix M1 = LT1 | UT2; Matrix M2 = UT1 & LT2;
123      Print(Matrix(M1-M2.t()));
124      M1 = UT2 | LT1; M2 = LT2 & UT1;
125      Print(Matrix(M1-M2.t()));
126      M1 = (LT1 | UT2) & (UT2 | LT1);
127      M2 = (UT1 & LT2) | (LT2 & UT1);
128      Print(Matrix(M1-M2.t()));
129      SymmetricMatrix SM1; SM1 << (M1 + M1.t());
130      SymmetricMatrix SM2; SM2 << ((SM1 | M1) & (M1.t() | SM1));
131      Matrix M3(20,20);
132      M3.SubMatrix(1,10,1,10) = SM1;
133      M3.SubMatrix(1,10,11,20) = M1;
134      M3.SubMatrix(11,20,1,10) = M2;
135      M3.SubMatrix(11,20,11,20) = SM1;
136      Print(Matrix(M3-SM2));
137
138      SymmetricMatrix SM(15); SM = 0; SM.SymSubMatrix(1,10) = SM1;
139      M3.ReSize(15,15); M3 = 0; M3.SubMatrix(1,10,1,10) = SM1;
140      M3 -= SM; Print(M3);
141      SM = 0; SM.SymSubMatrix(6,15) = SM1;
142      M3.ReSize(15,15); M3 = 0; M3.SubMatrix(6,15,6,15) = SM1;
143      M3 = M3.t() - SM; Print(M3);
144   }
145   {
146      Tracer et1("Stage 4 - sort");
147      TestSort(1); TestSort(2); TestSort(3); TestSort(4);
148      TestSort(15); TestSort(16); TestSort(17); TestSort(18);
149      TestSort(99); TestSort(100); TestSort(101);
150   }
151
152
153//   cout << "\nEnd of sixth test\n";
154}
155
Note: See TracBrowser for help on using the repository browser.