// SEMPHYOptMat.cpp : Defines the entry point for the console application. // #include "StdAfx.h" #include "cOccuranceData.h" #include "cOrthonormalMatrix.h" #include #include "cAngles.h" #include "cCoeffMatrices.h" #include "cDataProbModel.h" #include "cUpdateAngle.h" #include "cEigenValsOptimise.h" cSquareMatrix EmpiricalDuax( cProbModel& M, cOccuranceData const& D ) { double eps = 0.0000000001; cDataProbModel DM(D, M); double LL = DM.LL(); cSquareMatrix Res( M.size(), 0.0 ); for( size_t a = 0; a < M.size(); a++ ) for( size_t b = 0; b < M.size(); b++ ) { cSquareMatrix U( M.GetU() ); U.Set(a,b,U[a][b]+eps); double LL1 = DM.LL(U); Res.Set(a,b,(LL1-LL)/eps); } return Res; } cSquareMatrix EmpiricalDuaxNonConst( cProbModel& M, cOccuranceData const& D ) { double eps = 0.0000000001; cDataProbModel DM(D, M); double LL = DM.NonConstLL(); cSquareMatrix Res( M.size(), 0.0 ); for( size_t a = 0; a < M.size(); a++ ) for( size_t b = 0; b < M.size(); b++ ) { cSquareMatrix U( M.GetU() ); U.Set(a,b,U[a][b]+eps); double LL1 = DM.NonConstLL(U); Res.Set(a,b,(LL1-LL)/eps); } return Res; } cRow EmpiricalDx( cProbModel& M, cOccuranceData const& D ) { double eps = 0.000001; cDataProbModel DM(D, M); double LL = DM.LL(); cRow Res( M.size() ); for( size_t a = 0; a < M.size(); a++ ) { cProbModel M1 = M; M1.SetD( a, M.GetD(a) - eps ); cDataProbModel DM1(D, M1); double LL1 = DM1.LL(); Res[a] = (LL-LL1)/eps; } return Res; } cRow EmpiricalDerivAngles(cProbModel& M, cOccuranceData const& D ) { double eps = 0.000001; cAngles const& A = M.Angles(); cRow Res( A.NDims() ); cDataProbModel DM(D, M); double LL = DM.LL(); for( size_t i = 0; i < A.NDims(); i++ ) { cProbModel M1 = M; M1.setAngle(i, A.get(i)-eps ); cDataProbModel DM1(D, M1); double LL1 = DM1.LL(); Res[i] = (LL-LL1)/eps; } return Res; } cSquareMatrix BuildMUT( cProbModel& M, double t ) { cSquareMatrix A( M.size(), 0.0 ); for( size_t a = 0; a < M.size(); a++ ) for( size_t b = 0; b < M.size(); b++ ) A.Set(a,b, M.Muabt( a, b, t )); return A; } int main(int argc, char* argv[]) { if (argc<=2) { cerr <<"usage: "<