nCenterFocus::CenterFocusExperiment< variant > Class Template Reference

#include <Algorithm.h>

Collaboration diagram for nCenterFocus::CenterFocusExperiment< variant >:
Collaboration graph
[legend]

List of all members.

Public Types

typedef pair
< D_Eps_Frommer::TPolynomXY,
D_Eps_Frommer::TPolynomXY > 
CFEpsPointType

Public Member Functions

void printAlgorithmTimings (std::ostream &os) const
const PrintCenterFocusResultsgetResultPrinterConstRef () const
virtual ~CenterFocusExperiment ()
DStatistic & getStatisticRef ()
 CenterFocusExperiment (D_CenterfocusParams const *params, PrintCenterFocusResults *prn)
void performExperiment (const D_CenterfocusParams *params, RankStatistic &fullRankStatistic, RankStatistic &subRankStatistic, LiftAndQuadricsStatistic &fullQuadricsStatistic, LiftAndQuadricsStatistic &subQuadricsStatistic, FailedLiftStatistic &liftStatistic)
 starts a regular computation (no variable coefficients) or a random experiment, where some coeffitients of the poincaree differential form are chosen randomly and some coeffitients maybe full searched.
void printVariableOrder (ostream &os)
void internPrintVariableOrder (ostream &os, const list< CoeffListEntry > &coeffVariablesOrder, string comment)
long64 getInputPointNum ()
void printStageTimings (std::ostream &os) const
template<class PolynomXY_Type , class TFrommer_Type1 , class TFrommer_Type2 >
void performRegularExperiment (TFrommer_Type1 &frommer1, TFrommer_Type2 &frommer2, const PolynomialRing< PolynomXY_Type, typename TFrommer_Type1::RingType > &polynomialRing, const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, DStatistic &st, RankStatistic &fullRankStatistic, RankStatistic &subRankStatistic, LiftAndQuadricsStatistic &fullQuadricsStatistic, LiftAndQuadricsStatistic &subQuadricsStatistic, FailedLiftStatistic &liftStatistic)
 computes for a single point focal values, jacobian matrices, quadrics due to in cf_params given parameters and prints desired points according to given parameters also.
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 >
bool liftTest_performSingleTest (int maxLift, TFrommer_Type2 &frommer2, const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, const Matrix_Type &jacobiKernel, const list< CoeffListEntry > &varCoeffOrder, CFEpsPointType *&liftResultRef, int &lastLiftNr)
 performs lifting until 'maxLift' is reached or lifting failed
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 , class FailedLiftStatisticType >
bool performLiftTrials (int maxLift, int liftTrials, TFrommer_Type2 &frommer2, const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, const Matrix_Type &jacobiMatrix, const list< CoeffListEntry > &varCoeffOrder, CPointLiftInfo< D_Eps_Frommer, CFEpsPointType > &pointLiftInfo, FailedLiftStatisticType &liftStatistic)
 perform requested number of liftTrials and returns false if one of the tests failed
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 >
void liftTest_computeLiftPoints (int maxLift, int liftTrials, TFrommer_Type2 &frommer2, const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, const Matrix_Type &jacobiMatrix, const list< CoeffListEntry > &varCoeffOrder, vector< CFEpsPointType * > &liftPoints)
template<class PolynomXY_Type , class Ring_Type >
bool isHamiltonianComponent (const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, const Ring_Type &ring1)
template<class Matrix_Type >
Matrix_Type * complementColumns (const Matrix_Type &mat)
template<class TPolynomXY_Type , class Matrix_Type >
Matrix3D< Matrix_Type > * computeQuadric_computeAlpha (const TPolynomXY_Type &minusPpol, const TPolynomXY_Type &Qpol, const Matrix_Type &jacobiMat, const Matrix_Type &jacobiKernel, const std::list< CoeffListEntry > &coeffOrder)
template<class Matrix_Type >
Matrix3D< Matrix_Type > * computeQuadric_computeLambda (const Matrix3D< Matrix_Type > &alpha)
template<class Matrix_Type >
Matrix_Type * computeQuadric_getLeftInverse (const Matrix_Type &jacobiKernel)
template<class Matrix_Type >
Matrix3D< Matrix_Type > * computeQuadric_computeBigQuadric (const Matrix3D< Matrix_Type > &smallQuadric, const Matrix_Type &jacobiKernel)
template<class Matrix_Type >
Matrix3D< Matrix_Type > * computeQuadric_computeQuadricSmall (const Matrix_Type &jacobiMat, const Matrix3D< Matrix_Type > &lambda)
template<class TPolynomXY_Type , class Matrix_Type >
void computeQuadric (const TPolynomXY_Type &minusPpol, const TPolynomXY_Type &Qpol, const Matrix_Type &jacobiMat, const list< CoeffListEntry > &coeffOrder, CFQuadricsResult< Matrix_Type, Matrix3D< Matrix_Type > > &quadricResult)
template<class TPolynomXY_SRC_Type >
void polynomSetEpsPrecision (TPolynomXY_SRC_Type &srcDestPol, int epsPrecision)
template<class TPolynomXY_SRC_Type , class TPolynomXY_DEST_Type >
void copyPolynomWithGivenEpsPrecision (const TPolynomXY_SRC_Type &srcPol, TPolynomXY_DEST_Type &destPol, int epsPrecision)
 optimierung: Schleife koennte automatisch vektorisiert werden, wenn DEGREE konstant ist!
template<class TFrommer , class TPolynomXY_Type >
TMatrix< typename
D_Eps_Frommer::RingType::FieldType > * 
createJacobiMatrix (TFrommer &frommer2, const TPolynomXY_Type &minusPpol, const TPolynomXY_Type &Qpol, int reqVanishedFocalValuesCount, const list< CoeffListEntry > &coeffVariablesOrder)
 berechnet die Jacobi-Matrix fuer die Koeffizienten der Poincarè-Differentialform.

Private Member Functions

utils

template<class TPolynomXY_SRC_Type , class TPolynomXY_DEST_Type >
void copyPolynomWithGivenEpsPrecision (const TPolynomXY_SRC_Type &srcPol, TPolynomXY_DEST_Type &destPol, int epsPrecision)
 optimierung: Schleife koennte automatisch vektorisiert werden, wenn DEGREE konstant ist!
list< CoeffListEntryinitSubCoeffVariablesOrder ()
template<class TPolynomXY_SRC_Type >
void polynomSetEpsPrecision (TPolynomXY_SRC_Type &srcDestPol, int epsPrecision)
computeQuadric

template<class TPolynomXY_Type , class Matrix_Type >
Matrix3D< Matrix_Type > * computeQuadric_computeAlpha (const TPolynomXY_Type &quadricMinusPpol, const TPolynomXY_Type &quadricQpol, const Matrix_Type &jacobiMat, const Matrix_Type &jacobiKernel, const std::list< CoeffListEntry > &coeffOrder)
template<class Matrix_Type >
Matrix3D< Matrix_Type > * computeQuadric_computeLambda (const Matrix3D< Matrix_Type > &alpha)
template<class Matrix_Type >
Matrix3D< Matrix_Type > * computeQuadric_computeQuadricSmall (const Matrix_Type &jacobiMat, const Matrix3D< Matrix_Type > &lambda)
template<class Matrix_Type >
Matrix3D< Matrix_Type > * computeQuadric_computeBigQuadric (const Matrix3D< Matrix_Type > &smallQuadric, const Matrix_Type &jacobiKernel)
template<class Matrix_Type >
Matrix_Type * computeQuadric_getLeftInverse (const Matrix_Type &jacobiKernel)
template<class TPolynomXY_Type , class Matrix_Type >
void computeQuadric (const TPolynomXY_Type &p, const TPolynomXY_Type &q, const Matrix_Type &jacobiMat, const list< CoeffListEntry > &coeffOrder, CFQuadricsResult< Matrix_Type, Matrix3D< Matrix_Type > > &quadricResult)
template<class Matrix_Type >
Matrix_Type * complementColumns (const Matrix_Type &mat)
lift Test

Todo:

maxLift und liftTrials muss parametrisiert werden können und nicht von cfparams_m abgefragt.

Idee, um den Zugriff nur auf bestimmte Parameter von cfParams zu erlauben ( nicht maxLift und nicht liftTrials): in einer auf den liftTest zugeschnittenen Schnittstelle cfParams kapseln.

void liftTest_invertCoeffVectorInPlace (TVector< typename D_Eps_Frommer::RingType::FieldType > &vector)
 uses epsFieldRef_m to invert a vector over a finite field D_Eps_Frommer::RingType::FieldType
CFEpsPointType liftTest_addEpsVector (const CFEpsPointType &polynomPair, TVector< typename D_Eps_Frommer::RingType::FieldType > &vector, const list< CoeffListEntry > &varCoeffOrder, int epsFactorExp)
 computes (p,q)+ (vector*eps^epsFactorExp).. 'vector' has only scalar entries. (scalar*eps^0)
void liftTest_eraseEpsPartInPlace (CFEpsPointType &polynomPair, unsigned short epsPrecision)
TVector< typename
D_Eps_Frommer::RingType::FieldType > 
liftTest_getFocalValuesEpsPart (D_Eps_Frommer &epsFrommer, unsigned int epsPart)
 returns requested epsPart from all computed focal values (s_1,...s_n) which were computed lastly by epsFrommer
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 >
bool liftTest_performSingleTest (int maxLift, TFrommer_Type2 &frommer2, const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, const Matrix_Type &jacobiKernel, const list< CoeffListEntry > &varCoeffOrder, CFEpsPointType *&liftResultRef, int &lastLiftNr)
 performs lifting until 'maxLift' is reached or lifting failed
bool liftTest_solveLGS (const TMatrix< typename D_Eps_Frommer::RingType::FieldType > &jacobiMatrix, const TVector< typename D_Eps_Frommer::RingType::FieldType > &rightHandSide, TVector< typename D_Eps_Frommer::RingType::FieldType > &result)
 solves LGS 'JacobiMatrix * result = rightHandSide', if possible. If more than one solutions exists, result ist randomly chosen.
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 , class FailedLiftStatisticType >
bool performLiftTrials (int maxLift, int liftTrials, TFrommer_Type2 &frommer2, const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, const Matrix_Type &jacobiMatrix, const list< CoeffListEntry > &varCoeffOrder, CPointLiftInfo< D_Eps_Frommer, CFEpsPointType > &pointLiftInfo, FailedLiftStatisticType &liftStatistic)
 perform requested number of liftTrials and returns false if one of the tests failed
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 >
void liftTest_computeLiftPoints (int maxLift, int liftTrials, TFrommer_Type2 &frommer2, const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, const Matrix_Type &jacobiMatrix, const list< CoeffListEntry > &varCoeffOrder, vector< CFEpsPointType * > &liftPoints)
regular Experiment

TODO: Define class for generated result structure -> and attach output functions (in Output.h) to that class!

template<class PolynomXY_Type , class TFrommer_Type1 , class TFrommer_Type2 >
void performRegularExperiment (TFrommer_Type1 &frommer1, TFrommer_Type2 &frommer2, const PolynomialRing< PolynomXY_Type, typename TFrommer_Type1::RingType > &polynomialRing, const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, DStatistic &st, RankStatistic &fullRankStatistic, RankStatistic &subRankStatistic, LiftAndQuadricsStatistic &fullQuadricsStatistic, LiftAndQuadricsStatistic &subQuadricsStatistic, FailedLiftStatistic &liftStatistic)
 computes for a single point focal values, jacobian matrices, quadrics due to in cf_params given parameters and prints desired points according to given parameters also.
Experiment

bool randomExperimentWellDefined ()
void initExperiment (const D_CenterfocusParams *params)
template<class TFrommer , class TPolynomXY_Type >
TMatrix< typename
D_Eps_Frommer::RingType::FieldType > * 
createJacobiMatrix (TFrommer &frommer, const TPolynomXY_Type &p, const TPolynomXY_Type &q, int reqVanishedFocalValuesCount, const list< CoeffListEntry > &coeffOrder)
 berechnet die Jacobi-Matrix fuer die Koeffizienten der Poincarè-Differentialform.
template<class PolynomXY_Type , class Ring_Type >
bool isHamiltonianComponent (const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, const Ring_Type &ring1)

Private Attributes

D_CenterfocusParams const * cfparams_m
 sollte CenterfocusParams< TinfEpsPolynomXY_Type, TinfEpsRingType > const * cfparams_m; entsprechen
PrintCenterFocusResultsresultPrinter_m
long64 inputPointCounter_m
D_Eps_Frommer::TPolynomXY * minusP_polynom_m
D_Eps_Frommer::TPolynomXY * Q_polynom_m
DStatistic * st_m
const list< CoeffListEntryallCoeffVariablesOrder_m
list< CoeffListEntrysubCoeffVariablesOrder_m
const D_Eps_Frommer::RingType * epsRing_m
 hat andere EpsPrecision als epsRegularFrommer_m
const
D_Eps_Frommer::RingType::FieldType & 
epsFieldRef_m
D_Eps_Frommer * epsFrommer_m
D_Eps_Frommer * epsRegularFrommer_m
D_Frommer * frommer2_m
D_Frommer0 * frommer0_m
D_Frommer2::RingType * ring2_m
D_Frommer0::RingType * ring0_m
const PolynomialRing< typename
D_Eps_Frommer::TPolynomXY,
typename
D_Eps_Frommer::RingType > 
polynomialRing_m
const PolynomialRing< typename
D_Frommer::TPolynomXY,
typename D_Frommer::RingType > 
polynomialRing_2_m
const PolynomialRing< typename
D_Frommer0::TPolynomXY,
typename D_Frommer0::RingType > 
polynomialRing_0_m

Friends

class CFRandomExperiment

Detailed Description

template<int variant>
class nCenterFocus::CenterFocusExperiment< variant >

Todo:
ueberlegen, wie man die Ausgabe vom Algorithmus besser trennen kann... ueberlegt: Define Class for generated result structure -> and attach output functions (in Output.h) to that class!
Todo:
NextElement funktion wird in der Zukunft doch gebraucht, gehoert dann aber in diese Klasse und nicht in in TRing.

Definition at line 21 of file Algorithm.h.


Member Typedef Documentation

template<int variant>
typedef pair<D_Eps_Frommer::TPolynomXY, D_Eps_Frommer::TPolynomXY> nCenterFocus::CenterFocusExperiment< variant >::CFEpsPointType

Definition at line 73 of file Algorithm.h.


Constructor & Destructor Documentation

template<int variant>
nCenterFocus::CenterFocusExperiment< variant >::~CenterFocusExperiment (  )  [inline, virtual]

Definition at line 2225 of file Algorithm.h.

template<int variant>
nCenterFocus::CenterFocusExperiment< variant >::CenterFocusExperiment ( D_CenterfocusParams const *  params,
PrintCenterFocusResults prn 
) [inline]
Todo:

optional: diese Klasse so entwerfen, dass diese Funktion nur existiert, falls man inFailedLiftNr beobachten will.

ueberall, wo

Todo:
epsPrecision vom Ring für Quadrikberechnung muss hoechstens 2 sein!

Definition at line 65 of file Algorithm.h.


Member Function Documentation

template<int variant>
template<class Matrix_Type >
Matrix_Type* nCenterFocus::CenterFocusExperiment< variant >::complementColumns ( const Matrix_Type &  mat  )  [inline]

Definition at line 1569 of file Algorithm.hpp.

References TVector< TRing >::setVal().

Here is the call graph for this function:

template<int variant>
template<class Matrix_Type >
Matrix_Type * nCenterFocus::CenterFocusExperiment< variant >::complementColumns ( const Matrix_Type &  mat  )  [inline, private]
Todo:
prefix computeQuadric_ dem FKTnamen hinzufuegen

Definition at line 1570 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_getLeftInverse().

template<int variant>
template<class TPolynomXY_Type , class Matrix_Type >
void nCenterFocus::CenterFocusExperiment< variant >::computeQuadric ( const TPolynomXY_Type &  minusPpol,
const TPolynomXY_Type &  Qpol,
const Matrix_Type &  jacobiMat,
const list< CoeffListEntry > &  coeffOrder,
CFQuadricsResult< Matrix_Type, Matrix3D< Matrix_Type > > &  quadricResult 
) [inline]
template<int variant>
template<class TPolynomXY_Type , class Matrix_Type >
void nCenterFocus::CenterFocusExperiment< variant >::computeQuadric ( const TPolynomXY_Type &  minusPpol,
const TPolynomXY_Type &  Qpol,
const Matrix_Type &  jacobiMat,
const list< CoeffListEntry > &  coeffOrder,
CFQuadricsResult< Matrix_Type, Matrix3D< Matrix_Type > > &  quadricResult 
) [inline, private]
Todo:
eventuel einen Datenty[ fuer Alpha-Koeffizienten anlegen - wegen testAusgaben.

Definition at line 1990 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::performRegularExperiment().

template<int variant>
template<class TPolynomXY_Type , class Matrix_Type >
Matrix3D<Matrix_Type>* nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_computeAlpha ( const TPolynomXY_Type &  minusPpol,
const TPolynomXY_Type &  Qpol,
const Matrix_Type &  jacobiMat,
const Matrix_Type &  jacobiKernel,
const std::list< CoeffListEntry > &  coeffOrder 
) [inline]
Note:
polynomSetEpsPrecision 2 macht die Berechnung eventuell einen Tick langsamer, da 2 Multiplikationen mehr durchgefuehrt werden.

Definition at line 1608 of file Algorithm.hpp.

References nCenterFocus::CenterFocusExperiment< variant >::copyPolynomWithGivenEpsPrecision(), nCenterFocus::CenterFocusExperiment< variant >::epsFrommer_m, Matrix3D< TMatrix2D >::getRing(), Matrix3D< TMatrix2D >::getVal(), nCenterFocus::CenterFocusExperiment< variant >::polynomSetEpsPrecision(), and Matrix3D< TMatrix2D >::setVal().

Here is the call graph for this function:

template<int variant>
template<class TPolynomXY_Type , class Matrix_Type >
Matrix3D< Matrix_Type > * nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_computeAlpha ( const TPolynomXY_Type &  minusPpol,
const TPolynomXY_Type &  Qpol,
const Matrix_Type &  jacobiMat,
const Matrix_Type &  jacobiKernel,
const std::list< CoeffListEntry > &  coeffOrder 
) [inline, private]
Note:
polynomSetEpsPrecision 2 macht die Berechnung eventuell einen Tick langsamer, da 2 Multiplikationen mehr durchgefuehrt werden.

Definition at line 1609 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::computeQuadric().

template<int variant>
template<class Matrix_Type >
Matrix3D<Matrix_Type>* nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_computeBigQuadric ( const Matrix3D< Matrix_Type > &  smallQuadric,
const Matrix_Type &  jacobiKernel 
) [inline]

benoetigt JacobiKernel

Note:
die Zeilen von B sind genauso geordnet, wie die Spalten der Jacobi-Matrix. Und die Spalten von D werden wohl mit den Zeilen von B korrespondieren. aber was ist mit den Zeilen und Spalten von R_i (Quadric small )? Wenn an den Indizes nicht herumgedreht wurde, dann korrespondieren diese' mit den Spaltenindizes von B.

Definition at line 1872 of file Algorithm.hpp.

References nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_getLeftInverse(), Matrix3D< TMatrix2D >::leftMultiply(), and Matrix3D< TMatrix2D >::rightMultiply().

Here is the call graph for this function:

template<int variant>
template<class Matrix_Type >
Matrix3D< Matrix_Type > * nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_computeBigQuadric ( const Matrix3D< Matrix_Type > &  smallQuadric,
const Matrix_Type &  jacobiKernel 
) [inline, private]

benoetigt JacobiKernel

Note:
die Zeilen von B sind genauso geordnet, wie die Spalten der Jacobi-Matrix. Und die Spalten von D werden wohl mit den Zeilen von B korrespondieren. aber was ist mit den Zeilen und Spalten von R_i (Quadric small )? Wenn an den Indizes nicht herumgedreht wurde, dann korrespondieren diese' mit den Spaltenindizes von B.

Definition at line 1873 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::computeQuadric().

template<int variant>
template<class Matrix_Type >
Matrix3D<Matrix_Type>* nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_computeLambda ( const Matrix3D< Matrix_Type > &  alpha  )  [inline]
template<int variant>
template<class Matrix_Type >
Matrix3D< Matrix_Type > * nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_computeLambda ( const Matrix3D< Matrix_Type > &  alpha  )  [inline, private]
template<int variant>
template<class Matrix_Type >
Matrix3D<Matrix_Type>* nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_computeQuadricSmall ( const Matrix_Type &  jacobiMat,
const Matrix3D< Matrix_Type > &  lambda 
) [inline]
Todo:

ist jetzt de Matrix C jacobiCoKernelTransposed oder jacobiCoKernel?

eventuell Funktion in zwei Teile aufteilen - 1. wird R_i berechnet 2. wird eine Basis (R_i ) berechnet.

Definition at line 1905 of file Algorithm.hpp.

References Matrix3D< TMatrix2D >::computeFrontalMatrixBasis(), Matrix3D< TMatrix2D >::getColNum(), Matrix3D< TMatrix2D >::getRing(), Matrix3D< TMatrix2D >::getTransversalForm(), Matrix3D< TMatrix2D >::getZNum(), Matrix3D< TMatrix2D >::leftMultiply(), Matrix3D< TMatrix2D >::print3DMatrix(), and Matrix3D< TMatrix2D >::setName().

Here is the call graph for this function:

template<int variant>
template<class Matrix_Type >
Matrix3D< Matrix_Type > * nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_computeQuadricSmall ( const Matrix_Type &  jacobiMat,
const Matrix3D< Matrix_Type > &  lambda 
) [inline, private]
Todo:

ist jetzt de Matrix C jacobiCoKernelTransposed oder jacobiCoKernel?

eventuell Funktion in zwei Teile aufteilen - 1. wird R_i berechnet 2. wird eine Basis (R_i ) berechnet.

Definition at line 1906 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::computeQuadric().

template<int variant>
template<class Matrix_Type >
Matrix_Type* nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_getLeftInverse ( const Matrix_Type &  jacobiKernel  )  [inline]
Todo:

die Funktion getLeftInverse hier raus und in die zugehoerige Matrix packen

FFPACK parameter Modular<double> irgendwo einmal Zentral definieren

Definition at line 1816 of file Algorithm.hpp.

References nCenterFocus::CenterFocusExperiment< variant >::complementColumns().

Here is the call graph for this function:

template<int variant>
template<class Matrix_Type >
Matrix_Type * nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_getLeftInverse ( const Matrix_Type &  jacobiKernel  )  [inline, private]
Todo:

die Funktion getLeftInverse hier raus und in die zugehoerige Matrix packen

FFPACK parameter Modular<double> irgendwo einmal Zentral definieren

Definition at line 1817 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::computeQuadric_computeBigQuadric().

template<int variant>
template<class TPolynomXY_SRC_Type , class TPolynomXY_DEST_Type >
void nCenterFocus::CenterFocusExperiment< variant >::copyPolynomWithGivenEpsPrecision ( const TPolynomXY_SRC_Type &  srcPol,
TPolynomXY_DEST_Type &  destPol,
int  epsPrecision 
) [inline]

Definition at line 2070 of file Algorithm.hpp.

template<int variant>
template<class TPolynomXY_SRC_Type , class TPolynomXY_DEST_Type >
void nCenterFocus::CenterFocusExperiment< variant >::copyPolynomWithGivenEpsPrecision ( const TPolynomXY_SRC_Type &  srcPol,
TPolynomXY_DEST_Type &  destPol,
int  epsPrecision 
) [inline, private]
template<int variant>
template<class TFrommer , class TPolynomXY_Type >
TMatrix<typename D_Eps_Frommer::RingType::FieldType >* nCenterFocus::CenterFocusExperiment< variant >::createJacobiMatrix ( TFrommer &  frommer2,
const TPolynomXY_Type &  minusPpol,
const TPolynomXY_Type &  Qpol,
int  reqVanishedFocalValuesCount,
const list< CoeffListEntry > &  coeffVariablesOrder 
) [inline]
Precondition:
Funktion muss als Parameter ein Frommer-Objekt bekommen, welches mindestens die Rechnung mit EpsPrecision 1 erlaubt.
p.getDegree()==q.getDegree() ;
gehe davon aus, dass die Charakteristik F_p fuer alle Parameter gleich ist. Dies soll generell fuer ein Experiment erfuellt sein. Gehe davon aus, das nur epsPrecision 0 -Anteil der Parameterpolynome munisPpol, Qpol gebraucht wird. frommer2 muss mit dem Wert maxFocalValuesToCompute=cfparams_m->computeAllFocalValues erstellt worden sein; anderenfalls wird das Programm abbrechen
Parameters:
vanishedFocalValuesCount[in] zeigt an, wieviele Strudelgroessen bei der Vorberechnung Null waren. Dies wird gleichzeitig zur Spaltenzahl der Jacobi-Matrix
Returns:
die Jacobi-Matrix mit in der dimension ? x vanishedFocalValuesCount
Note:
Der name Frommer2 wegen der Dimensinen des Rings ueber F_p. (=2)

Verwendet folgende Variablen: cfparams_m->isCoefficientVariable und cfparams_m->jacobiSubMatrix()

Wenn jacobiSubMatrix() nicht gesetzt ist, werden keine Zeilen ausgelassen, Wenn doch, werden nur Zeilen eingetragen, fuer welche die Koeffizienten der Polynome munisPpol und Qpol zufaellig gewaehlt waren.

Note:
Datentypen sind hier willkürlich , 'int' sind andererseits fuer unsere Anwendung gross genug.

die Kopien sollen zwar nur konstante Koeffizienten enthalten, muessen aber epsPrecision 1 unterstuetzen!

Todo:
: kopiere mit Genauigkeit 0 oder 1 ? -> mit 0, sonst wird der Lift-Test nicht bestanden !
Todo:
da die beiden For-schleifen in createJacobiMatrix fast identisch sind, diese als unterfunktion auslagern

Definition at line 2118 of file Algorithm.hpp.

References nCenterFocus::CenterFocusExperiment< variant >::copyPolynomWithGivenEpsPrecision(), nCenterFocus::CenterFocusExperiment< variant >::epsFrommer_m, TMatrix< TRing >::getRing(), nCenterFocus::CenterFocusExperiment< variant >::polynomSetEpsPrecision(), and TMatrix< TRing >::setVal().

Here is the call graph for this function:

template<int variant>
template<class TFrommer , class TPolynomXY_Type >
TMatrix< typename D_Eps_Frommer::RingType::FieldType > * nCenterFocus::CenterFocusExperiment< variant >::createJacobiMatrix ( TFrommer &  frommer2,
const TPolynomXY_Type &  minusPpol,
const TPolynomXY_Type &  Qpol,
int  reqVanishedFocalValuesCount,
const list< CoeffListEntry > &  coeffVariablesOrder 
) [inline, private]

benoetigt TFrommer mit mindestens epsPrecision 1 ; TPolynomXY_Type muss nicht zu TFrommer passen, wird umgewandelt. optimierung: TPolynomXY_Type nicht nach TFrommer::TPolynomXY_Type umwandeln, wenn Typ uebereinstimmt. Andererseits wird createJacobiMatrix selten aufgerufen -> Optimierung nicht relevant!

Precondition:
Funktion muss als Parameter ein Frommer-Objekt bekommen, welches mindestens die Rechnung mit EpsPrecision 1 erlaubt.
p.getDegree()==q.getDegree() ;
gehe davon aus, dass die Charakteristik F_p fuer alle Parameter gleich ist. Dies soll generell fuer ein Experiment erfuellt sein. Gehe davon aus, das nur epsPrecision 0 -Anteil der Parameterpolynome munisPpol, Qpol gebraucht wird. frommer2 muss mit dem Wert maxFocalValuesToCompute=cfparams_m->computeAllFocalValues erstellt worden sein; anderenfalls wird das Programm abbrechen
Parameters:
vanishedFocalValuesCount[in] zeigt an, wieviele Strudelgroessen bei der Vorberechnung Null waren. Dies wird gleichzeitig zur Spaltenzahl der Jacobi-Matrix
Returns:
die Jacobi-Matrix mit in der dimension ? x vanishedFocalValuesCount
Note:
Der name Frommer2 wegen der Dimensinen des Rings ueber F_p. (=2)

Verwendet folgende Variablen: cfparams_m->isCoefficientVariable und cfparams_m->jacobiSubMatrix()

Wenn jacobiSubMatrix() nicht gesetzt ist, werden keine Zeilen ausgelassen, Wenn doch, werden nur Zeilen eingetragen, fuer welche die Koeffizienten der Polynome munisPpol und Qpol zufaellig gewaehlt waren.

Note:
Datentypen sind hier willkürlich , 'int' sind andererseits fuer unsere Anwendung gross genug.

die Kopien sollen zwar nur konstante Koeffizienten enthalten, muessen aber epsPrecision 1 unterstuetzen!

Todo:
: kopiere mit Genauigkeit 0 oder 1 ? -> mit 0, sonst wird der Lift-Test nicht bestanden !
Todo:
da die beiden For-schleifen in createJacobiMatrix fast identisch sind, diese als unterfunktion auslagern

Definition at line 2119 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::liftTest_performSingleTest(), and nCenterFocus::CenterFocusExperiment< variant >::performRegularExperiment().

template<int variant>
long64 nCenterFocus::CenterFocusExperiment< variant >::getInputPointNum (  )  [inline]

Definition at line 94 of file Algorithm.h.

template<int variant>
const PrintCenterFocusResults& nCenterFocus::CenterFocusExperiment< variant >::getResultPrinterConstRef (  )  const [inline]

Definition at line 75 of file Algorithm.h.

template<int variant>
DStatistic & nCenterFocus::CenterFocusExperiment< variant >::getStatisticRef (  )  [inline]

Definition at line 453 of file Algorithm.h.

template<int variant>
void nCenterFocus::CenterFocusExperiment< variant >::initExperiment ( const D_CenterfocusParams *  params  )  [inline, private]
Todo:

die Konstante 2 (erster Monomgrad oder minPolynomGrad ) nicht ueberall im Quelltext verteilt, sondern fest)

die coeffVariablesOrder_m_initialisierung koennten sogar die Parameter vornehmen...

Definition at line 196 of file Algorithm.h.

template<int variant>
list< CoeffListEntry > nCenterFocus::CenterFocusExperiment< variant >::initSubCoeffVariablesOrder (  )  [inline, private]
Todo:

endlich den Iterator ueber PQ-Elemente schreiben!

gehoert diese Funktion nicht eventuell in ReadCenterFocusParams?

Definition at line 177 of file Algorithm.h.

template<int variant>
void nCenterFocus::CenterFocusExperiment< variant >::internPrintVariableOrder ( ostream &  os,
const list< CoeffListEntry > &  coeffVariablesOrder,
string  comment 
) [inline]
Todo:
klasse VariableOrder bauen?

Definition at line 133 of file Algorithm.h.

template<int variant>
template<class PolynomXY_Type , class Ring_Type >
bool nCenterFocus::CenterFocusExperiment< variant >::isHamiltonianComponent ( const PolynomXY_Type &  minusP_polynom,
const PolynomXY_Type &  Q_polynom,
const Ring_Type &  ring1 
) [inline]

dazu sind 6 Bedingungen notwendig, d.h. wenn eine nicht erfüllt ist, liegt der Punkt nicht drauf

Hamilton Komponente gdw.

P_11 = 2 Q_20 Q_11 = 2 P_02

P_21 = 3 Q_30 P_12 = Q_21

Q_12 = 3 P_03

<=>

mP_11 = -2 Q_20 -Q_11 = 2 mP_02 <=> -1/2 Q_11= mP_02

mP_21 = -3 Q_30 -mP_12 = Q_21

-Q_12 = 3 mP_03<=>-1/3 Q_12 = mP_03

Stimmt das ?

Todo:

it seems that one check for Hamilton Component is missing - nope, das sind Alle Bedingungen! xPunkt ist gleich H/dy und yPunkt ist gleich -H/dx -> daraus folgen die Bedingungen

Formel ist nur Korrekt für Grad 3. Für allgemeinen Grad muss ginac eingesetzt werden. Momentan nur Korrekt für Grad 2 und Grad 3.

Definition at line 1523 of file Algorithm.hpp.

References nCenterFocus::CenterFocusExperiment< variant >::cfparams_m.

template<int variant>
template<class PolynomXY_Type , class Ring_Type >
bool nCenterFocus::CenterFocusExperiment< variant >::isHamiltonianComponent ( const PolynomXY_Type &  minusP_polynom,
const PolynomXY_Type &  Q_polynom,
const Ring_Type &  ring1 
) [inline, private]

dazu sind 6 Bedingungen notwendig, d.h. wenn eine nicht erfüllt ist, liegt der Punkt nicht drauf

Hamilton Komponente gdw.

P_11 = 2 Q_20 Q_11 = 2 P_02

P_21 = 3 Q_30 P_12 = Q_21

Q_12 = 3 P_03

<=>

mP_11 = -2 Q_20 -Q_11 = 2 mP_02 <=> -1/2 Q_11= mP_02

mP_21 = -3 Q_30 -mP_12 = Q_21

-Q_12 = 3 mP_03<=>-1/3 Q_12 = mP_03

Stimmt das ?

Todo:

it seems that one check for Hamilton Component is missing - nope, das sind Alle Bedingungen! xPunkt ist gleich H/dy und yPunkt ist gleich -H/dx -> daraus folgen die Bedingungen

Formel ist nur Korrekt für Grad 3. Für allgemeinen Grad muss ginac eingesetzt werden. Momentan nur Korrekt für Grad 2 und Grad 3.

Definition at line 1524 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::performRegularExperiment().

template<int variant>
CenterFocusExperiment< variant >::CFEpsPointType nCenterFocus::CenterFocusExperiment< variant >::liftTest_addEpsVector ( const CFEpsPointType polynomPair,
TVector< typename D_Eps_Frommer::RingType::FieldType > &  vector,
const list< CoeffListEntry > &  varCoeffOrder,
int  epsFactorExp 
) [inline, private]
Precondition:
assumes that polynomPair.first==minusP_polynom and polynomPair.second == q_polynom.
assumes that #(vector entries) ==subCoeffVariablesOrder_m.size() and vector entries has the same ordering as subCoeffVariablesOrder_m.

Definition at line 968 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::liftTest_performSingleTest().

template<int variant>
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 >
void nCenterFocus::CenterFocusExperiment< variant >::liftTest_computeLiftPoints ( int  maxLift,
int  liftTrials,
TFrommer_Type2 &  frommer2,
const PolynomXY_Type &  minusP_polynom,
const PolynomXY_Type &  Q_polynom,
const Matrix_Type &  jacobiMatrix,
const list< CoeffListEntry > &  varCoeffOrder,
vector< CFEpsPointType * > &  liftPoints 
) [inline]
template<int variant>
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 >
void nCenterFocus::CenterFocusExperiment< variant >::liftTest_computeLiftPoints ( int  maxLift,
int  liftTrials,
TFrommer_Type2 &  frommer2,
const PolynomXY_Type &  minusP_polynom,
const PolynomXY_Type &  Q_polynom,
const Matrix_Type &  jacobiMatrix,
const list< CoeffListEntry > &  varCoeffOrder,
vector< CFEpsPointType * > &  liftPoints 
) [inline, private]
template<int variant>
void nCenterFocus::CenterFocusExperiment< variant >::liftTest_eraseEpsPartInPlace ( CFEpsPointType polynomPair,
unsigned short  epsPrecision 
) [inline, private]
Deprecated:
is currently not in use.

Definition at line 1008 of file Algorithm.h.

template<int variant>
TVector< typename D_Eps_Frommer::RingType::FieldType > nCenterFocus::CenterFocusExperiment< variant >::liftTest_getFocalValuesEpsPart ( D_Eps_Frommer &  epsFrommer,
unsigned int  epsPart 
) [inline, private]

Vektorindex ist 0-basiert)

Definition at line 1026 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::liftTest_performSingleTest().

template<int variant>
void nCenterFocus::CenterFocusExperiment< variant >::liftTest_invertCoeffVectorInPlace ( TVector< typename D_Eps_Frommer::RingType::FieldType > &  vector  )  [inline, private]
Precondition:
Todo:
so why not to have a Vectorspace class, which implements this function?

Definition at line 952 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::liftTest_performSingleTest().

template<int variant>
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 >
bool nCenterFocus::CenterFocusExperiment< variant >::liftTest_performSingleTest ( int  maxLift,
TFrommer_Type2 &  frommer2,
const PolynomXY_Type &  minusP_polynom,
const PolynomXY_Type &  Q_polynom,
const Matrix_Type &  jacobiKernel,
const list< CoeffListEntry > &  varCoeffOrder,
CFEpsPointType *&  liftResultRef,
int &  lastLiftNr 
) [inline]
Parameters:
[out] you must provide pointer variable. liftResultRef contains liftResult, if lifting was successful.
[out] current lift number
Return values:
true if 'maxLift' is reached.
false if lifting failed
Todo:
TESTS: Test überlegen, ob epsPrecision vom epsRing korrekt ist.

Todo:
optimierung: copyPolynomWithGivenEpsPrecision muss man nicht immer wieder fuer ein SingleTest durchfuehren

TODO: Test: jacobiMatrix*result = rightHandSide

Definition at line 1135 of file Algorithm.hpp.

References nCenterFocus::CenterFocusExperiment< variant >::cfparams_m, nCenterFocus::CenterFocusExperiment< variant >::copyPolynomWithGivenEpsPrecision(), nCenterFocus::CenterFocusExperiment< variant >::createJacobiMatrix(), nCenterFocus::CenterFocusExperiment< variant >::epsFieldRef_m, nCenterFocus::CenterFocusExperiment< variant >::epsFrommer_m, TVector< TRing >::getSize(), TVector< TRing >::getValRef(), nCenterFocus::CenterFocusExperiment< variant >::liftTest_addEpsVector(), nCenterFocus::CenterFocusExperiment< variant >::liftTest_getFocalValuesEpsPart(), nCenterFocus::CenterFocusExperiment< variant >::liftTest_invertCoeffVectorInPlace(), nCenterFocus::CenterFocusExperiment< variant >::liftTest_solveLGS(), nCenterFocus::CenterFocusExperiment< variant >::polynomSetEpsPrecision(), and random().

Here is the call graph for this function:

template<int variant>
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 >
bool nCenterFocus::CenterFocusExperiment< variant >::liftTest_performSingleTest ( int  maxLift,
TFrommer_Type2 &  frommer2,
const PolynomXY_Type &  minusP_polynom,
const PolynomXY_Type &  Q_polynom,
const Matrix_Type &  jacobiKernel,
const list< CoeffListEntry > &  varCoeffOrder,
CFEpsPointType *&  liftResultRef,
int &  lastLiftNr 
) [inline, private]
Parameters:
[out] you must provide pointer variable. liftResultRef contains liftResult, if lifting was successful.
[out] current lift number
Return values:
true if 'maxLift' is reached.
false if lifting failed
Todo:
TESTS: Test überlegen, ob epsPrecision vom epsRing korrekt ist.

Todo:
optimierung: copyPolynomWithGivenEpsPrecision muss man nicht immer wieder fuer ein SingleTest durchfuehren

TODO: Test: jacobiMatrix*result = rightHandSide

Definition at line 1136 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::liftTest_computeLiftPoints(), and nCenterFocus::CenterFocusExperiment< variant >::performLiftTrials().

template<int variant>
bool nCenterFocus::CenterFocusExperiment< variant >::liftTest_solveLGS ( const TMatrix< typename D_Eps_Frommer::RingType::FieldType > &  jacobiMatrix,
const TVector< typename D_Eps_Frommer::RingType::FieldType > &  rightHandSide,
TVector< typename D_Eps_Frommer::RingType::FieldType > &  result 
) [inline, private]
Return values:
true given linear system has a solution
false given linear system can not be solved /
Todo:
return last lifting point.

Definition at line 1057 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::liftTest_performSingleTest().

template<int variant>
void nCenterFocus::CenterFocusExperiment< variant >::performExperiment ( const D_CenterfocusParams *  params,
RankStatistic &  fullRankStatistic,
RankStatistic &  subRankStatistic,
LiftAndQuadricsStatistic fullQuadricsStatistic,
LiftAndQuadricsStatistic subQuadricsStatistic,
FailedLiftStatistic liftStatistic 
) [inline]

/

Todo:

Unterscheide zwischen PolynomGrad und hoechster moeglicher Exponent? Fuer z.B. kann ein PolynomObjekt monome mit Grad 3 enthalten / (wurde so z.B. in der Eingabe definiert), aber alle Koeffizienten der Monome mit grad 3 sind 0. Strenggenommen ist also Grad dann 2 (was aber in unserem Programm / von keinem Interesse ist) /

eigentlich ist es Quatsch, den Polynomtyp fuer das Zufallsexperiment offen zu lassen. Es sollte halt TFrommer2::TPolynomXY sein und Basta. /

Zeiger auf const oder Referenz uebergeben.

Polynome bekommen eine Initialisierungsfunkton mit epsPrecision als Parameter, oder diese Klasse bekommt die Initialisierungsfuntion

man braucht nicht un

Todo:
Problem: cfparams_m->getPolynomialDegree() muss nicht unbedingt mit cfparams_m->pPoynim konsistent sein (ergibt Redundanz der Information und somit ein potenzielles Konsistenzproblem)

Todo:
Frage: wieso wird hier epsFrommer_m uebergeben und nicht ???

Definition at line 236 of file Algorithm.h.

template<int variant>
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 , class FailedLiftStatisticType >
bool nCenterFocus::CenterFocusExperiment< variant >::performLiftTrials ( int  maxLift,
int  liftTrials,
TFrommer_Type2 &  frommer2,
const PolynomXY_Type &  minusP_polynom,
const PolynomXY_Type &  Q_polynom,
const Matrix_Type &  jacobiMatrix,
const list< CoeffListEntry > &  varCoeffOrder,
CPointLiftInfo< D_Eps_Frommer, CFEpsPointType > &  pointLiftInfo,
FailedLiftStatisticType &  liftStatistic 
) [inline]
template<int variant>
template<class PolynomXY_Type , class Matrix_Type , class TFrommer_Type2 , class FailedLiftStatisticType >
bool nCenterFocus::CenterFocusExperiment< variant >::performLiftTrials ( int  maxLift,
int  liftTrials,
TFrommer_Type2 &  frommer2,
const PolynomXY_Type &  minusP_polynom,
const PolynomXY_Type &  Q_polynom,
const Matrix_Type &  jacobiMatrix,
const list< CoeffListEntry > &  varCoeffOrder,
CPointLiftInfo< D_Eps_Frommer, CFEpsPointType > &  pointLiftInfo,
FailedLiftStatisticType &  liftStatistic 
) [inline, private]
Postcondition:
if test fails, minFailedLiftNr contains the smallest observed LiftNumber of a lift.

Definition at line 1323 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::performRegularExperiment().

template<int variant>
template<class PolynomXY_Type , class TFrommer_Type1 , class TFrommer_Type2 >
void nCenterFocus::CenterFocusExperiment< variant >::performRegularExperiment ( TFrommer_Type1 &  frommer1,
TFrommer_Type2 &  frommer2,
const PolynomialRing< PolynomXY_Type, typename TFrommer_Type1::RingType > &  polynomialRing,
const PolynomXY_Type &  minusP_polynom,
const PolynomXY_Type &  Q_polynom,
DStatistic &  st,
RankStatistic &  fullRankStatistic,
RankStatistic &  subRankStatistic,
LiftAndQuadricsStatistic fullQuadricsStatistic,
LiftAndQuadricsStatistic subQuadricsStatistic,
FailedLiftStatistic liftStatistic 
) [inline]

verwende hier ersmal den EpsRing todo mit Parametern frommer1,frommer2 , infEpsFrommer und den beiden Polynomen kannn dieser Teil in das RandomExperiment eingebunden werden Problem: in der Jacobi-Berechnung wird wieder umgewandelt, was fuer diesen Fall ja nicht noetig ist.

Todo:
kann noch etwas optimiert werden, wenn die Jacobi-Matrizen gleichzeitig erzeugt werden.

Todo:
: Optimierung: hier reicht immer frommer1.getRingRef.setEpsPrecision = 0 ! Die Strudelgroessen werden spaeter noch mal berechnet, und das sollte dann mit der korrekten epsGenauigkeit erfolgen!
Todo:
Ergebnisse eines Experiments in ein Objekt packen...

wenn Punkt glatt, trage maxLift und liftTrials in ResultPoints ein. Falls aber Punkt nicht glatt, trage exhaustiveMaxLift und exhaustiveLiftTrials in ResultPoints ein.

todo: diese Zeilen als Aspekt definieren, damit die if-Abfrage keine Kosten mehr verursacht.

wenn ComponentCodim ( =jacobianRank + QuadricsRank ) stimmt, gebe Punkt + weitere Info aus.

das koennte auch ein smartPTR uebernehmen.

Definition at line 469 of file Algorithm.hpp.

References PolynomialRing< TPolynomXY, TRing >::addInv(), nCenterFocus::LiftAndQuadricsStatistic::addLiftAndQuadricsStatistic(), nCenterFocus::CenterFocusExperiment< variant >::allCoeffVariablesOrder_m, nCenterFocus::PrintCenterFocusResults::beginSingleResultPrint(), nCenterFocus::CenterFocusExperiment< variant >::cfparams_m, nCenterFocus::CenterFocusExperiment< variant >::computeQuadric(), nCenterFocus::CenterFocusExperiment< variant >::createJacobiMatrix(), nCenterFocus::CenterFocusExperiment< variant >::epsFrommer_m, g_extLiftStatistic, hamiltonianPointCount_g, nCenterFocus::CenterFocusExperiment< variant >::inputPointCounter_m, nCenterFocus::CenterFocusExperiment< variant >::isHamiltonianComponent(), nCenterFocus::CenterFocusExperiment< variant >::liftTest_computeLiftPoints(), nCenterFocus::ExtendedFailedLiftStatistic::logFailedLift(), nCenterFocus::CenterFocusExperiment< variant >::performLiftTrials(), nCenterFocus::PrintCenterFocusResults::printPolynoms(), nCenterFocus::CenterFocusExperiment< variant >::resultPrinter_m, nCenterFocus::CPointLiftInfo< EpsFrommerType, CFLiftPointType >::setLiftTestPassed(), and nCenterFocus::CenterFocusExperiment< variant >::subCoeffVariablesOrder_m.

Here is the call graph for this function:

template<int variant>
template<class PolynomXY_Type , class TFrommer_Type1 , class TFrommer_Type2 >
void nCenterFocus::CenterFocusExperiment< variant >::performRegularExperiment ( TFrommer_Type1 &  frommer1,
TFrommer_Type2 &  frommer2,
const PolynomialRing< PolynomXY_Type, typename TFrommer_Type1::RingType > &  polynomialRing,
const PolynomXY_Type &  minusP_polynom,
const PolynomXY_Type &  Q_polynom,
DStatistic &  st,
RankStatistic &  fullRankStatistic,
RankStatistic &  subRankStatistic,
LiftAndQuadricsStatistic fullQuadricsStatistic,
LiftAndQuadricsStatistic subQuadricsStatistic,
FailedLiftStatistic liftStatistic 
) [inline, private]
Parameters:
frommer1 wird eingesetzt für die Berechnung der Strudelgrößen in vorgegebener Eps-Genauigkeit.
frommer2 wird eingesetzt zur Berechnung der Jacobi-Matrix.
Todo:
RankStatistic und LiftAndQuadricsStatistic als 'pair'
Precondition:
PolynomXY_Type stimmt mit TFrommer_Type1::PolynomXY_Type ueberein.

verwende hier ersmal den EpsRing todo mit Parametern frommer1,frommer2 , infEpsFrommer und den beiden Polynomen kannn dieser Teil in das RandomExperiment eingebunden werden Problem: in der Jacobi-Berechnung wird wieder umgewandelt, was fuer diesen Fall ja nicht noetig ist.

Todo:
kann noch etwas optimiert werden, wenn die Jacobi-Matrizen gleichzeitig erzeugt werden.

Todo:
: Optimierung: hier reicht immer frommer1.getRingRef.setEpsPrecision = 0 ! Die Strudelgroessen werden spaeter noch mal berechnet, und das sollte dann mit der korrekten epsGenauigkeit erfolgen!
Todo:
Ergebnisse eines Experiments in ein Objekt packen...

wenn Punkt glatt, trage maxLift und liftTrials in ResultPoints ein. Falls aber Punkt nicht glatt, trage exhaustiveMaxLift und exhaustiveLiftTrials in ResultPoints ein.

todo: diese Zeilen als Aspekt definieren, damit die if-Abfrage keine Kosten mehr verursacht.

wenn ComponentCodim ( =jacobianRank + QuadricsRank ) stimmt, gebe Punkt + weitere Info aus.

das koennte auch ein smartPTR uebernehmen.

Parameters:
frommer1 muss angeforderte epsPrecision haben
frommer2 dieses Objekt muss epsPrecison=1 (optimal) beherrschen

Definition at line 470 of file Algorithm.h.

template<int variant>
template<class TPolynomXY_SRC_Type >
void nCenterFocus::CenterFocusExperiment< variant >::polynomSetEpsPrecision ( TPolynomXY_SRC_Type &  srcDestPol,
int  epsPrecision 
) [inline]

Definition at line 2054 of file Algorithm.hpp.

template<int variant>
template<class TPolynomXY_SRC_Type >
void nCenterFocus::CenterFocusExperiment< variant >::polynomSetEpsPrecision ( TPolynomXY_SRC_Type &  srcDestPol,
int  epsPrecision 
) [inline, private]
template<int variant>
void nCenterFocus::CenterFocusExperiment< variant >::printAlgorithmTimings ( std::ostream &  os  )  const [inline]

Definition at line 413 of file Algorithm.h.

template<int variant>
void nCenterFocus::CenterFocusExperiment< variant >::printStageTimings ( std::ostream &  os  )  const [inline]

Definition at line 440 of file Algorithm.h.

template<int variant>
void nCenterFocus::CenterFocusExperiment< variant >::printVariableOrder ( ostream &  os  )  [inline]
Todo:
klasse VariableOrder bauen?

Definition at line 160 of file Algorithm.h.

template<int variant>
bool nCenterFocus::CenterFocusExperiment< variant >::randomExperimentWellDefined (  )  [inline, private]
Todo:
falsch - wer sagt dir , dass minusP_polynom_m und Q_polynom_m fuer das Random-Experiment verwendet werden? random Experiment is currently only defined, if given polynom coefficients does not contain eps parts.b

Definition at line 1454 of file Algorithm.h.


Friends And Related Function Documentation

template<int variant>
friend class CFRandomExperiment [friend]
Todo:
im Konstruktor pruefen, dass TFrommer1::TPolynomXY gleich TFrommer2::TPolynomXY und dass die Elemente EpsPrecision 1 zulassen!

Definition at line 27 of file Algorithm.h.


Member Data Documentation

template<int variant>
const list<CoeffListEntry> nCenterFocus::CenterFocusExperiment< variant >::allCoeffVariablesOrder_m [private]
template<int variant>
D_CenterfocusParams const* nCenterFocus::CenterFocusExperiment< variant >::cfparams_m [private]
template<int variant>
const D_Eps_Frommer::RingType::FieldType& nCenterFocus::CenterFocusExperiment< variant >::epsFieldRef_m [private]
template<int variant>
D_Eps_Frommer* nCenterFocus::CenterFocusExperiment< variant >::epsFrommer_m [private]
template<int variant>
D_Eps_Frommer* nCenterFocus::CenterFocusExperiment< variant >::epsRegularFrommer_m [private]

Definition at line 110 of file Algorithm.h.

template<int variant>
const D_Eps_Frommer::RingType* nCenterFocus::CenterFocusExperiment< variant >::epsRing_m [private]

Definition at line 105 of file Algorithm.h.

template<int variant>
D_Frommer0* nCenterFocus::CenterFocusExperiment< variant >::frommer0_m [private]

Definition at line 115 of file Algorithm.h.

template<int variant>
D_Frommer* nCenterFocus::CenterFocusExperiment< variant >::frommer2_m [private]

Definition at line 113 of file Algorithm.h.

template<int variant>
long64 nCenterFocus::CenterFocusExperiment< variant >::inputPointCounter_m [private]
template<int variant>
D_Eps_Frommer::TPolynomXY* nCenterFocus::CenterFocusExperiment< variant >::minusP_polynom_m [private]

Definition at line 61 of file Algorithm.h.

template<int variant>
const PolynomialRing<typename D_Frommer0::TPolynomXY, typename D_Frommer0::RingType> nCenterFocus::CenterFocusExperiment< variant >::polynomialRing_0_m [private]

Definition at line 125 of file Algorithm.h.

template<int variant>
const PolynomialRing<typename D_Frommer::TPolynomXY, typename D_Frommer::RingType> nCenterFocus::CenterFocusExperiment< variant >::polynomialRing_2_m [private]

Definition at line 123 of file Algorithm.h.

template<int variant>
const PolynomialRing<typename D_Eps_Frommer::TPolynomXY, typename D_Eps_Frommer::RingType> nCenterFocus::CenterFocusExperiment< variant >::polynomialRing_m [private]

Definition at line 121 of file Algorithm.h.

template<int variant>
D_Eps_Frommer::TPolynomXY* nCenterFocus::CenterFocusExperiment< variant >::Q_polynom_m [private]

Definition at line 62 of file Algorithm.h.

template<int variant>
PrintCenterFocusResults* nCenterFocus::CenterFocusExperiment< variant >::resultPrinter_m [private]
template<int variant>
D_Frommer0::RingType* nCenterFocus::CenterFocusExperiment< variant >::ring0_m [private]

Definition at line 119 of file Algorithm.h.

template<int variant>
D_Frommer2::RingType* nCenterFocus::CenterFocusExperiment< variant >::ring2_m [private]

Definition at line 118 of file Algorithm.h.

template<int variant>
DStatistic* nCenterFocus::CenterFocusExperiment< variant >::st_m [private]

Definition at line 65 of file Algorithm.h.

template<int variant>
list<CoeffListEntry> nCenterFocus::CenterFocusExperiment< variant >::subCoeffVariablesOrder_m [private]
Todo:
koennte eigentlich auch konst sein, da es bei Zufallsversuchen nur ein Eingabepolynom gibt.

Definition at line 102 of file Algorithm.h.

Referenced by nCenterFocus::CenterFocusExperiment< variant >::performRegularExperiment().


The documentation for this class was generated from the following files:
Generated on Tue Nov 23 13:10:53 2010 for centerfocus by  doxygen 1.6.3