csgo-2018-source/mathlib/svd.cpp
2021-07-24 21:11:47 -07:00

41 lines
1004 B
C++

// svd.cpp : Defines the entry point for the console application.
//
#include "svd.h"
namespace SVD
{
void Test()
{
SvdIterator<float> test;
for ( int nTest = 0; nTest< 100; ++nTest )
{
Matrix3<float> a;
for ( int i = 0; i < 3; ++i )
for ( int j = 0; j < 3; ++j )
a.m[ i ][ j ] = i * 3 + j;//float( rand() ) / RAND_MAX - 0.5f;
test.Init( a );
Msg( "%d", nTest );
for ( int i = 0; i < 5; ++i )
{
Matrix3< float > v = test.ComputeV();
// B = US = AV
Matrix3< float > us = a * v;
//float flOrtho = OrthogonalityError( us );
Matrix3< float > reconstruction = MulT( us, v );
//float flRec = ( reconstruction - a ).FrobeniusNorm();
SymMatrix3< float > ata = AtA( a );
float flOffDiagError = ata.OffDiagNorm() / ata.DiagNorm();
// Msg( "\t%g", logf( flRec ) / logf( 10 ) );
// Msg( "\t%g", logf( flOrtho ) / logf( 10 ) );
Msg( "\t%g", logf( flOffDiagError ) / logf( 10 ) );
test.Iterate( 1 );
}
Msg( "\n" );
}
}
}