ProteoWizard
Functions | Variables
LinearSolverTest.cpp File Reference
#include "LinearSolver.hpp"
#include "pwiz/utility/misc/unit.hpp"
#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/banded.hpp>
#include "pwiz/utility/misc/Std.hpp"
#include <cstring>

Go to the source code of this file.

Functions

void testDouble ()
 
void testComplex ()
 
void testDoubleQR ()
 
void testSparse ()
 
void testBanded ()
 
void testBandedComplex ()
 
int main (int argc, char *argv[])
 

Variables

ostream * os_ = 0
 

Function Documentation

§ testDouble()

void testDouble ( )

Definition at line 42 of file LinearSolverTest.cpp.

References A, os_, unit_assert, x, and y.

Referenced by main().

43 {
44  if (os_) *os_ << "testDouble()\n";
45 
46  LinearSolver<> solver;
47 
48  ublas::matrix<double> A(2,2);
49  A(0,0) = 1; A(0,1) = 2;
50  A(1,0) = 3; A(1,1) = 4;
51 
52  ublas::vector<double> y(2);
53  y(0) = 5;
54  y(1) = 11;
55 
56  ublas::vector<double> x = solver.solve(A, y);
57 
58  if (os_) *os_ << "A: " << A << endl;
59  if (os_) *os_ << "y: " << y << endl;
60  if (os_) *os_ << "x: " << x << endl;
61 
62  unit_assert(x(0) == 1.);
63  unit_assert(x(1) == 2.);
64 }
#define A
ostream * os_
KernelTraitsBase< Kernel >::space_type::abscissa_type x
KernelTraitsBase< Kernel >::space_type::ordinate_type y
#define unit_assert(x)
Definition: unit.hpp:85

§ testComplex()

void testComplex ( )

Definition at line 67 of file LinearSolverTest.cpp.

References A, os_, unit_assert, x, and y.

Referenced by main().

68 {
69  if (os_) *os_ << "testComplex()\n";
70 
71  LinearSolver<> solver;
72 
73  ublas::matrix< complex<double> > A(2,2);
74  A(0,0) = 1; A(0,1) = 2;
75  A(1,0) = 3; A(1,1) = 4;
76 
77  ublas::vector< complex<double> > y(2);
78  y(0) = 5;
79  y(1) = 11;
80 
81  ublas::vector< complex<double> > x = solver.solve(A, y);
82 
83  if (os_) *os_ << "A: " << A << endl;
84  if (os_) *os_ << "y: " << y << endl;
85  if (os_) *os_ << "x: " << x << endl;
86 
87  unit_assert(x(0) == 1.);
88  unit_assert(x(1) == 2.);
89 }
#define A
ostream * os_
KernelTraitsBase< Kernel >::space_type::abscissa_type x
KernelTraitsBase< Kernel >::space_type::ordinate_type y
#define unit_assert(x)
Definition: unit.hpp:85

§ testDoubleQR()

void testDoubleQR ( )

Definition at line 91 of file LinearSolverTest.cpp.

References A, os_, pwiz::math::LinearSolver< LinearSolverType_QR >::solve(), unit_assert_equal, x, and y.

Referenced by main().

92 {
93  if (os_) *os_ << "testDoubleQR()\n";
94 
96 
97  ublas::matrix<double> A(2,2);
98  A(0,0) = 1.; A(0,1) = 2.;
99  A(1,0) = 3.; A(1,1) = 4.;
100 
101  ublas::vector<double> y(2);
102  y(0) = 5.;
103  y(1) = 11.;
104 
105  ublas::vector<double> x = solver.solve(A, y);
106 
107  if (os_) *os_ << "A: " << A << endl;
108  if (os_) *os_ << "y: " << y << endl;
109  if (os_) *os_ << "x: " << x << endl;
110 
111  if (os_) *os_ << x(0) << " - 1. = " << x(0) - 1. << endl;
112 
113  unit_assert_equal(x(0), 1., 1e-14);
114  unit_assert_equal(x(1), 2., 1e-14);
115 }
vector_type solve(const matrix_type &A, const vector_type &y)
solve system of linear equations Ax = y using boost::ublas; note: extra copying inefficiencies for ea...
#define unit_assert_equal(x, y, epsilon)
Definition: unit.hpp:99
#define A
ostream * os_
KernelTraitsBase< Kernel >::space_type::abscissa_type x
KernelTraitsBase< Kernel >::space_type::ordinate_type y

§ testSparse()

void testSparse ( )

Definition at line 144 of file LinearSolverTest.cpp.

References A, os_, unit_assert_equal, x, and y.

Referenced by main().

145 {
146  if (os_) *os_ << "testSparse()\n";
147 
148  LinearSolver<> solver;
149 
150  ublas::mapped_matrix<double> A(2,2,4);
151  A(0,0) = 1.; A(0,1) = 2.;
152  A(1,0) = 3.; A(1,1) = 4.;
153 
154  ublas::vector<double> y(2);
155  y(0) = 5.;
156  y(1) = 11.;
157 
158  ublas::vector<double> x = solver.solve(A, y);
159 
160  if (os_) *os_ << "A: " << A << endl;
161  if (os_) *os_ << "y: " << y << endl;
162  if (os_) *os_ << "x: " << x << endl;
163 
164  unit_assert_equal(x(0), 1., 1e-14);
165  unit_assert_equal(x(1), 2., 1e-14);
166 }
#define unit_assert_equal(x, y, epsilon)
Definition: unit.hpp:99
#define A
ostream * os_
KernelTraitsBase< Kernel >::space_type::abscissa_type x
KernelTraitsBase< Kernel >::space_type::ordinate_type y

§ testBanded()

void testBanded ( )

Definition at line 196 of file LinearSolverTest.cpp.

References A, os_, unit_assert_equal, x, and y.

Referenced by main().

197 {
198  if (os_) *os_ << "testBanded()\n";
199 
200  LinearSolver<> solver;
201 
202  ublas::banded_matrix<double> A(2,2,1,1);
203  A(0,0) = 1.; A(0,1) = 2.;
204  A(1,0) = 3.; A(1,1) = 4.;
205 
206  ublas::vector<double> y(2);
207  y(0) = 5.;
208  y(1) = 11.;
209 
210  ublas::vector<double> x = solver.solve(A, y);
211 
212  if (os_) *os_ << "A: " << A << endl;
213  if (os_) *os_ << "y: " << y << endl;
214  if (os_) *os_ << "x: " << x << endl;
215 
216  unit_assert_equal(x(0), 1., 1e-14);
217  unit_assert_equal(x(1), 2., 1e-14);
218 }
#define unit_assert_equal(x, y, epsilon)
Definition: unit.hpp:99
#define A
ostream * os_
KernelTraitsBase< Kernel >::space_type::abscissa_type x
KernelTraitsBase< Kernel >::space_type::ordinate_type y

§ testBandedComplex()

void testBandedComplex ( )

Definition at line 221 of file LinearSolverTest.cpp.

References A, pwiz::math::MatchedFilter::details::norm(), os_, unit_assert, x, and y.

222 {
223  if (os_) *os_ << "testBandedComplex()\n";
224 
225  LinearSolver<> solver;
226 
227  ublas::banded_matrix< complex<double> > A(2,2,1,1);
228  A(0,0) = 1.; A(0,1) = 2.;
229  A(1,0) = 3.; A(1,1) = 4.;
230 
231  ublas::vector< complex<double> > y(2);
232  y(0) = 5.;
233  y(1) = 11.;
234 
235  ublas::vector< complex<double> > x = solver.solve(A, y);
236 
237  if (os_) *os_ << "A: " << A << endl;
238  if (os_) *os_ << "y: " << y << endl;
239  if (os_) *os_ << "x: " << x << endl;
240 
241  unit_assert(norm(x(0)-1.) < 1e-14);
242  unit_assert(norm(x(1)-2.) < 1e-14);
243 }
#define A
ostream * os_
KernelTraitsBase< Kernel >::space_type::abscissa_type x
KernelTraitsBase< Kernel >::space_type::ordinate_type y
#define unit_assert(x)
Definition: unit.hpp:85

§ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 246 of file LinearSolverTest.cpp.

References os_, TEST_EPILOG, TEST_FAILED, TEST_PROLOG, testBanded(), testComplex(), testDouble(), testDoubleQR(), and testSparse().

247 {
248  TEST_PROLOG(argc, argv)
249 
250  try
251  {
252  if (argc>1 && !strcmp(argv[1],"-v")) os_ = &cout;
253  if (os_) *os_ << "LinearSolverTest\n";
254 
255  testDouble();
256  testComplex();
257  testDoubleQR();
258  //testComplexQR();
259  testSparse();
260  //testSparseComplex(); // lu_factorize doesn't like mapped_matrix<complex>
261  testBanded();
262  //testBandedComplex(); // FIXME: GCC 4.2 doesn't like this test with link=shared
263  }
264  catch (exception& e)
265  {
266  TEST_FAILED(e.what())
267  }
268  catch (...)
269  {
270  TEST_FAILED("Caught unknown exception.")
271  }
272 
274 }
#define TEST_EPILOG
Definition: unit.hpp:182
void testDoubleQR()
void testComplex()
void testBanded()
void testSparse()
void testDouble()
#define TEST_FAILED(x)
Definition: unit.hpp:176
ostream * os_
#define TEST_PROLOG(argc, argv)
Definition: unit.hpp:174

Variable Documentation

§ os_

ostream* os_ = 0