PolySmithForm.h File Reference

#include "LongInt.h"
#include "Rational.h"
#include "ComplexNumber.h"
#include "Polynomial.h"
#include "RationalFunction.h"
#include "Matrix.h"
#include "Combinations.h"
#include "IndexSet.h"
#include "MathCommon.h"

Include dependency graph for PolySmithForm.h:

Go to the source code of this file.

Functions

template<class Number>
Matrix< Polynomial< Number > > smithNormalForm1 (const Matrix< Polynomial< Number > > &m, Matrix< Polynomial< Number > > *L=0, Matrix< Polynomial< Number > > *R=0)
template<class Number>
Matrix< Polynomial< Number > > smithNormalForm2 (const Matrix< Polynomial< Number > > &m)
template<class Number>
Matrix< RationalFunction<
Number > > 
smithMcMillanForm1 (const Matrix< RationalFunction< Number > > &m, Matrix< RationalFunction< Number > > *L=0, Matrix< RationalFunction< Number > > *R=0)
template<class Number>
Matrix< RationalFunction<
Number > > 
smithMcMillanForm2 (const Matrix< RationalFunction< Number > > &m)
template<class Number>
bool checkSmithForm (const Matrix< Polynomial< Number > > &m)
template<class Number>
bool getMinimumDegreePolnyomialIndexesInMatrix (const Matrix< Polynomial< Number > > &m, unsigned int &row, unsigned int &col, int &minDegree)
template<class Number>
Matrix< Polynomial< Number > > recursiveSmithNormalForm1 (const Matrix< Polynomial< Number > > &m, Matrix< Polynomial< Number > > *L, Matrix< Polynomial< Number > > *R)
template<class Number>
bool checkColumn (const Matrix< Polynomial< Number > > &m)
template<class Number>
bool checkRow (const Matrix< Polynomial< Number > > &m)
template<class Number>
void processColumn (Matrix< Polynomial< Number > > &m, Matrix< Polynomial< Number > > *T)
template<class Number>
void processRow (Matrix< Polynomial< Number > > &m, Matrix< Polynomial< Number > > *T)
template<class Number>
Polynomial< Number > gcdOfMinors (const Matrix< Polynomial< Number > > &m, unsigned int order)


Detailed Description

Contains functions to compute the Smith normal form and Smith-McMillan form of polynomial or rational function matrices

Definition in file PolySmithForm.h.


Function Documentation

template<class Number>
bool checkSmithForm ( const Matrix< Polynomial< Number > > &  m  ) 

Check if a matrix of polynomials is in Smith form or not

Parameters:
m A const refference to the matrix to check.
Returns:
true if m is in Smith normal form and false otherwise
Remarks:
This function is used to to test the correctness of algorithms that compute the Smith normal form

Definition at line 691 of file PolySmithForm.h.

template<class Number>
Matrix< RationalFunction< Number > > smithMcMillanForm1 ( const Matrix< RationalFunction< Number > > &  m,
Matrix< RationalFunction< Number > > *  L = 0,
Matrix< RationalFunction< Number > > *  R = 0 
)

Compute the Smith-McMillan form of a matrix of rational functions, also keeping track of the transformation matrices

Parameters:
m A const refference to the matrix whose Smith-McMillan form to compute
L Pointer to a matrix that will hold the row transformation matrix or null.
R Pointer to a matrix that will hold the column transformation matrix or null.
Returns:
The matrix in Smith-McMillan form
Remarks:
This algorithm uses smithNormalForm1() as driver algorithm

Definition at line 540 of file PolySmithForm.h.

References AlgebraicTraits< T >::one(), smithNormalForm1(), and AlgebraicTraits< T >::zero().

Here is the call graph for this function:

template<class Number>
Matrix< RationalFunction< Number > > smithMcMillanForm2 ( const Matrix< RationalFunction< Number > > &  m  ) 

Compute the Smith-McMillan form of a matrix of rational functions

Parameters:
m A const refference to the matrix whose Smith-McMillan form to compute
Returns:
The matrix in Smith-McMillan form
Remarks:
This algorithm uses smithNormalForm2() as driver algorithm and should ba avoided

Definition at line 635 of file PolySmithForm.h.

References AlgebraicTraits< T >::one(), smithNormalForm2(), and AlgebraicTraits< T >::zero().

Here is the call graph for this function:

template<class Number>
Matrix< Polynomial< Number > > smithNormalForm1 ( const Matrix< Polynomial< Number > > &  m,
Matrix< Polynomial< Number > > *  L = 0,
Matrix< Polynomial< Number > > *  R = 0 
)

Compute the Smith normal form of a matrix, also keeping track of transformation matrices

Parameters:
m A const refference to the matrix whose Smith form to compute
L Pointer to a matrix that will hold the row transformation matrix or null.
R Pointer to a matrix that will hold the column transformation matrix or null.
Returns:
The matrix in Smith normal form
Remarks:
The algorithm uses fraction free Gausian elimination to compute the Smith form. Complexity is approx. O(n^3)

Definition at line 196 of file PolySmithForm.h.

References AlgebraicTraits< T >::one(), and AlgebraicTraits< T >::zero().

Referenced by smithMcMillanForm1().

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Number>
Matrix< Polynomial< Number > > smithNormalForm2 ( const Matrix< Polynomial< Number > > &  m  ) 

Compute the Smith normal form of a matrix

Precondition:
The matrix m must be a square matrix.
Parameters:
m A const refference to the matrix whose Smith form to compute
Returns:
The matrix in Smith normal form
Remarks:
The algorithm uses determinantal divisors to compute the Smith normal form. This is a very poor algorithm and should be avoided. Its complexity is more than factorial :).
Todo:
This algorithm should be checked, since it does not always give the same (correct) results as smithNormalForm1 but the Smith normal form is unique !!!

Definition at line 510 of file PolySmithForm.h.

References AlgebraicTraits< T >::one(), and AlgebraicTraits< T >::zero().

Referenced by smithMcMillanForm2().

Here is the call graph for this function:

Here is the caller graph for this function:


Math-Objects Library Docs  Generated by: doxygen