ProteoWizard
Functions | Variables
LinearLeastSquaresTest.cpp File Reference
#include "LinearLeastSquares.hpp"
#include "pwiz/utility/misc/unit.hpp"
#include "pwiz/utility/misc/Std.hpp"
#include <cstring>

Go to the source code of this file.

Functions

void testDouble ()
void testDoubleQR ()
void testExactFitQR ()
void testSimpleRectangleQR ()
void testLeastSquaresQR ()
int main (int argc, char *argv[])

Variables

const double epsilon = 1e-16
ostream * os_ = 0

Function Documentation

void testDouble ( )

Definition at line 40 of file LinearLeastSquaresTest.cpp.

References A, e(), os_, unit_assert_equal, x, and y.

Referenced by main().

{
if (os_) *os_ << "testDouble()\n";
LinearLeastSquares<> lls;
ublas::matrix<double> A(2, 2);
A(0,0) = 1; A(0,1) = 2;
A(1,0) = 3; A(1,1) = 4;
ublas::vector<double> y(2);
y(0) = 5;
y(1) = 11;
ublas::vector<double> x = lls.solve(A, y);
if (os_) *os_ << "A: " << A << endl;
if (os_) *os_ << "y: " << y << endl;
if (os_) *os_ << "x: " << x << endl;
unit_assert_equal(x(0), 1., 1e-13);
unit_assert_equal(x(1), 2., 1e-13);
}
void testDoubleQR ( )

Definition at line 63 of file LinearLeastSquaresTest.cpp.

References A, epsilon, os_, pwiz::math::LinearLeastSquares< LinearLeastSquaresType_QR >::solve(), unit_assert_equal, x, and y.

Referenced by main().

{
if (os_) *os_ << "testDoubleQR()\n";
ublas::matrix<double> A(2, 2);
A(0,0) = 1; A(0,1) = 2;
A(1,0) = 3; A(1,1) = 4;
ublas::vector<double> y(2);
y(0) = 5;
y(1) = 11;
ublas::vector<double> x = lls.solve(A, y);
if (os_) *os_ << "A: " << A << endl;
if (os_) *os_ << "y: " << y << endl;
if (os_) *os_ << "x: " << x << endl;
if (os_) *os_ << "x(0) = " << x(0) - 1. << ", x(1) = " << x(1) - 2. << endl;
unit_assert_equal(x(0), 1., 100*epsilon);
unit_assert_equal(x(1), 2., 100*epsilon);
}
void testExactFitQR ( )

Definition at line 87 of file LinearLeastSquaresTest.cpp.

References epsilon, os_, pwiz::math::LinearLeastSquares< LinearLeastSquaresType_QR >::solve(), and unit_assert_equal.

Referenced by main().

{
if (os_) *os_ << "***************************\n";
if (os_) *os_ << "testExactFit()\n";
dmatrix m(2,2);
dvector obs(2);
m(0, 0) = 1;
m(1, 0) = 0;
m(0, 1) = 0;
m(1, 1) = 1;
obs(0) = 1;
obs(1) = 1;
const dvector result = lls.solve(m,obs);
if (os_) *os_ << "testExactFit(): success\n";
}
void testSimpleRectangleQR ( )

Definition at line 113 of file LinearLeastSquaresTest.cpp.

References epsilon, os_, pwiz::math::LinearLeastSquares< LinearLeastSquaresType_QR >::solve(), and unit_assert_equal.

Referenced by main().

{
if (os_) *os_ << "***************************\n";
if (os_) *os_ << "testSimpleRectangleQR()\n";
dmatrix samples(4, 2);
samples.clear();
samples(0,0) = 1;
samples(0,1) = 0;
samples(1,0) = 0;
samples(1,1) = 1;
samples(2,0) = 1;
samples(2,1) = 0;
samples(3,0) = 0;
samples(3,1) = 1;
dvector obs(4);
obs(0) = 2;
obs(1) = 2;
obs(2) = 2;
obs(3) = 2;
dvector a = lls.solve(samples, obs);
if (os_) *os_ << "testSimpleRectangleQR(): success\n";
}
void testLeastSquaresQR ( )

Definition at line 146 of file LinearLeastSquaresTest.cpp.

References epsilon, os_, pwiz::math::LinearLeastSquares< LinearLeastSquaresType_QR >::solve(), and unit_assert_equal.

Referenced by main().

{
if (os_) *os_ << "***************************\n";
if (os_) *os_ << "testLeastSquaresQR()\n";
dmatrix samples(5, 2);
samples.clear();
samples(0,0) = 1;
samples(0,1) = 1;
samples(1,0) = 2;
samples(1,1) = 2;
samples(2,0) = 3;
samples(2,1) = 3;
samples(3,0) = 0;
samples(3,1) = 4;
samples(4,0) = -1;
samples(4,1) = 5;
dvector obs(5);
obs(0) = 1;
obs(1) = 3;
obs(2) = 9;
obs(3) = 3;
obs(4) = -9;
dvector a = lls.solve(samples, obs);
unit_assert_equal(a(0), 3.16666666666667, epsilon*100);
unit_assert_equal(a(1), -0.5, epsilon*100);
if (os_) *os_ << "testLeastSquaresQR(): success\n";
}
int main ( int  argc,
char *  argv[] 
)

Definition at line 182 of file LinearLeastSquaresTest.cpp.

References e(), os_, TEST_EPILOG, TEST_FAILED, TEST_PROLOG, testDouble(), testDoubleQR(), testExactFitQR(), testLeastSquaresQR(), and testSimpleRectangleQR().

{
TEST_PROLOG(argc, argv)
try
{
if (argc>1 && !strcmp(argv[1],"-v")) os_ = &cout;
if (os_) *os_ << "LinearLeastSquaresTest\n";
}
catch (exception& e)
{
TEST_FAILED(e.what())
}
catch (...)
{
TEST_FAILED("Caught unknown exception.")
}
}

Variable Documentation

const double epsilon = 1e-16

Definition at line 36 of file LinearLeastSquaresTest.cpp.

ostream* os_ = 0

Definition at line 37 of file LinearLeastSquaresTest.cpp.