// This file is generated by WOK (CPPExt). // Please do not edit this file; modify original file instead. // The copyright and license terms as defined for the original file apply to // this header file considered to be the "object code" form of the original source. #ifndef _math_Matrix_HeaderFile #define _math_Matrix_HeaderFile #ifndef _Standard_HeaderFile #include #endif #ifndef _Standard_Macro_HeaderFile #include #endif #ifndef _Standard_Integer_HeaderFile #include #endif #ifndef _math_DoubleTabOfReal_HeaderFile #include #endif #ifndef _Standard_Real_HeaderFile #include #endif #ifndef _Standard_Address_HeaderFile #include #endif #ifndef _math_Vector_HeaderFile #include #endif #ifndef _Standard_OStream_HeaderFile #include #endif class Standard_DimensionError; class Standard_RangeError; class Standard_DivideByZero; class math_NotSquare; class math_SingularMatrix; class math_Vector; //! This class implements the real matrix abstract data type.
//! Matrixes can have an arbitrary range which must be defined
//! at the declaration and cannot be changed after this declaration
//! math_Matrix(-3,5,2,4); //a vector with range [-3..5, 2..4]
//! Matrix values may be initialized and
//! retrieved using indexes which must lie within the range
//! of definition of the matrix.
//! Matrix objects follow "value semantics", that is, they
//! cannot be shared and are copied through assignment
//! Matrices are copied through assignement:
//! math_Matrix M2(1, 9, 1, 3);
//! ...
//! M2 = M1;
//! M1(1) = 2.0;//the matrix M2 will not be modified.
//!
//! The exception RangeError is raised when trying to access
//! outside the range of a matrix :
//! M1(11, 1)=0.0// --> will raise RangeError.
//!
//! The exception DimensionError is raised when the dimensions of
//! two matrices or vectors are not compatible.
//! math_Matrix M3(1, 2, 1, 2);
//! M3 = M1; // will raise DimensionError
//! M1.Add(M3) // --> will raise DimensionError.
//! A Matrix can be constructed with a a pointer to "c array".
//! It allows to carry the bounds inside the matrix.
//! Exemple :
//! Standard_Real tab1[10][20];
//! Standard_Real tab2[200];
//!
//! math_Matrix A (tab1[0][0], 1, 10, 1, 20);
//! math_Matrix B (tab2[0], 1, 10, 1, 20);
class math_Matrix { public: void* operator new(size_t,void* anAddress) { return anAddress; } void* operator new(size_t size) { return Standard::Allocate(size); } void operator delete(void *anAddress) { if (anAddress) Standard::Free((Standard_Address&)anAddress); } //! Constructs a non-initialized matrix of range [LowerRow..UpperRow,
//! LowerCol..UpperCol]
//! For the constructed matrix:
//! - LowerRow and UpperRow are the indexes of the
//! lower and upper bounds of a row, and
//! - LowerCol and UpperCol are the indexes of the
//! lower and upper bounds of a column.
Standard_EXPORT math_Matrix(const Standard_Integer LowerRow,const Standard_Integer UpperRow,const Standard_Integer LowerCol,const Standard_Integer UpperCol); //! constructs a non-initialized matrix of range [LowerRow..UpperRow,
//! LowerCol..UpperCol]
//! whose values are all initialized with the value InitialValue.
Standard_EXPORT math_Matrix(const Standard_Integer LowerRow,const Standard_Integer UpperRow,const Standard_Integer LowerCol,const Standard_Integer UpperCol,const Standard_Real InitialValue); //! constructs a matrix of range [LowerRow..UpperRow,
//! LowerCol..UpperCol]
//! Sharing data with a "C array" pointed by Tab.
Standard_EXPORT math_Matrix(const Standard_Address Tab,const Standard_Integer LowerRow,const Standard_Integer UpperRow,const Standard_Integer LowerCol,const Standard_Integer UpperCol); //! constructs a matrix for copy in initialization.
//! An exception is raised if the matrixes have not the same dimensions.
Standard_EXPORT math_Matrix(const math_Matrix& Other); //!Initialize all the elements of a matrix to InitialValue.
Standard_EXPORT void Init(const Standard_Real InitialValue) ; //! Returns the number of rows of this matrix.
//! Note that for a matrix A you always have the following relations:
//! - A.RowNumber() = A.UpperRow() - A.LowerRow() + 1
//! - A.ColNumber() = A.UpperCol() - A.LowerCol() + 1
//! - the length of a row of A is equal to the number of columns of A,
//! - the length of a column of A is equal to the number of
//! rows of A.returns the row range of a matrix.
Standard_Integer RowNumber() const; //! Returns the number of rows of this matrix.
//! Note that for a matrix A you always have the following relations:
//! - A.RowNumber() = A.UpperRow() - A.LowerRow() + 1
//! - A.ColNumber() = A.UpperCol() - A.LowerCol() + 1
//! - the length of a row of A is equal to the number of columns of A,
//! - the length of a column of A is equal to the number of
//! rows of A.returns the row range of a matrix.
Standard_Integer ColNumber() const; //! Returns the value of the Lower index of the row
//! range of a matrix.
Standard_Integer LowerRow() const; //! Returns the Upper index of the row range
//! of a matrix.
Standard_Integer UpperRow() const; //! Returns the value of the Lower index of the
//! column range of a matrix.
Standard_Integer LowerCol() const; //! Returns the value of the upper index of the
//! column range of a matrix.
Standard_Integer UpperCol() const; //! Computes the determinant of a matrix.
//! An exception is raised if the matrix is not a square matrix.
Standard_EXPORT Standard_Real Determinant() const; //! Transposes a given matrix.
//! An exception is raised if the matrix is not a square matrix.
Standard_EXPORT void Transpose() ; //! Inverts a matrix using Gauss algorithm.
//! Exception NotSquare is raised if the matrix is not square.
//! Exception SingularMatrix is raised if the matrix is singular.
Standard_EXPORT void Invert() ; //! Sets this matrix to the product of the matrix Left, and the matrix Right.
//! Example
//! math_Matrix A (1, 3, 1, 3);
//! math_Matrix B (1, 3, 1, 3);
//! // A = ... , B = ...
//! math_Matrix C (1, 3, 1, 3);
//! C.Multiply(A, B);
//! Exceptions
//! Standard_DimensionError if matrices are of incompatible dimensions, i.e. if:
//! - the number of columns of matrix Left, or the number of
//! rows of matrix TLeft is not equal to the number of rows
//! of matrix Right, or
//! - the number of rows of matrix Left, or the number of
//! columns of matrix TLeft is not equal to the number of
//! rows of this matrix, or
//! - the number of columns of matrix Right is not equal to
//! the number of columns of this matrix.
Standard_EXPORT void Multiply(const Standard_Real Right) ; void operator*=(const Standard_Real Right) { Multiply(Right); } //! multiplies all the elements of a matrix by the
//! value .
Standard_EXPORT math_Matrix Multiplied(const Standard_Real Right) const; math_Matrix operator*(const Standard_Real Right) const { return Multiplied(Right); } //! Sets this matrix to the product of the
//! transposed matrix TLeft, and the matrix Right.
//! Example
//! math_Matrix A (1, 3, 1, 3);
//! math_Matrix B (1, 3, 1, 3);
//! // A = ... , B = ...
//! math_Matrix C (1, 3, 1, 3);
//! C.Multiply(A, B);
//! Exceptions
//! Standard_DimensionError if matrices are of incompatible dimensions, i.e. if:
//! - the number of columns of matrix Left, or the number of
//! rows of matrix TLeft is not equal to the number of rows
//! of matrix Right, or
//! - the number of rows of matrix Left, or the number of
//! columns of matrix TLeft is not equal to the number of
//! rows of this matrix, or
//! - the number of columns of matrix Right is not equal to
//! the number of columns of this matrix.
Standard_EXPORT math_Matrix TMultiplied(const Standard_Real Right) const; friend math_Matrix operator *(const Standard_Real Left,const math_Matrix& Right); //! divides all the elements of a matrix by the value .
//! An exception is raised if = 0.
Standard_EXPORT void Divide(const Standard_Real Right) ; void operator/=(const Standard_Real Right) { Divide(Right); } //! divides all the elements of a matrix by the value .
//! An exception is raised if = 0.
Standard_EXPORT math_Matrix Divided(const Standard_Real Right) const; math_Matrix operator/(const Standard_Real Right) const { return Divided(Right); } //! adds the matrix to a matrix.
//! An exception is raised if the dimensions are different.
//! Warning
//! In order to save time when copying matrices, it is
//! preferable to use operator += or the function Add
//! whenever possible.
Standard_EXPORT void Add(const math_Matrix& Right) ; void operator+=(const math_Matrix& Right) { Add(Right); } //! adds the matrix to a matrix.
//! An exception is raised if the dimensions are different.
Standard_EXPORT math_Matrix Added(const math_Matrix& Right) const; math_Matrix operator+(const math_Matrix& Right) const { return Added(Right); } //! sets a matrix to the addition of and .
//! An exception is raised if the dimensions are different.
Standard_EXPORT void Add(const math_Matrix& Left,const math_Matrix& Right) ; //! Subtracts the matrix from .
//! An exception is raised if the dimensions are different.
//! Warning
//! In order to avoid time-consuming copying of matrices, it
//! is preferable to use operator -= or the function
//! Subtract whenever possible.
Standard_EXPORT void Subtract(const math_Matrix& Right) ; void operator-=(const math_Matrix& Right) { Subtract(Right); } //! Returns the result of the subtraction of from .
//! An exception is raised if the dimensions are different.
Standard_EXPORT math_Matrix Subtracted(const math_Matrix& Right) const; math_Matrix operator-(const math_Matrix& Right) const { return Subtracted(Right); } //! Sets the values of this matrix,
//! - from index I1 to index I2 on the row dimension, and
//! - from index J1 to index J2 on the column dimension,
//! to those of matrix M.
//! Exceptions
//! Standard_DimensionError if:
//! - I1 is less than the index of the lower row bound of this matrix, or
//! - I2 is greater than the index of the upper row bound of this matrix, or
//! - J1 is less than the index of the lower column bound of this matrix, or
//! - J2 is greater than the index of the upper column bound of this matrix, or
//! - I2 - I1 + 1 is not equal to the number of rows of matrix M, or
//! - J2 - J1 + 1 is not equal to the number of columns of matrix M.
Standard_EXPORT void Set(const Standard_Integer I1,const Standard_Integer I2,const Standard_Integer J1,const Standard_Integer J2,const math_Matrix& M) ; //! Sets the row of index Row of a matrix to the vector .
//! An exception is raised if the dimensions are different.
//! An exception is raises if is inferior to the lower
//! row of the matrix or is superior to the upper row.
Standard_EXPORT void SetRow(const Standard_Integer Row,const math_Vector& V) ; //! Sets the column of index Col of a matrix to the vector .
//! An exception is raised if the dimensions are different.
//! An exception is raises if is inferior to the lower
//! column of the matrix or is superior to the upper
//! column.
Standard_EXPORT void SetCol(const Standard_Integer Col,const math_Vector& V) ; //! Sets the diagonal of a matrix to the value .
//! An exception is raised if the matrix is not square.
Standard_EXPORT void SetDiag(const Standard_Real Value) ; //! Returns the row of index Row of a matrix.
Standard_EXPORT math_Vector Row(const Standard_Integer Row) const; //! Returns the column of index of a matrix.
Standard_EXPORT math_Vector Col(const Standard_Integer Col) const; //! Swaps the rows of index Row1 and Row2.
//! An exception is raised if or is out of range.
Standard_EXPORT void SwapRow(const Standard_Integer Row1,const Standard_Integer Row2) ; //! Swaps the columns of index and .
//! An exception is raised if or is out of range.
Standard_EXPORT void SwapCol(const Standard_Integer Col1,const Standard_Integer Col2) ; //! Teturns the transposed of a matrix.
//! An exception is raised if the matrix is not a square matrix.
Standard_EXPORT math_Matrix Transposed() const; //! Returns the inverse of a matrix.
//! Exception NotSquare is raised if the matrix is not square.
//! Exception SingularMatrix is raised if the matrix is singular.
Standard_EXPORT math_Matrix Inverse() const; //! Returns the product of the transpose of a matrix with
//! the matrix .
//! An exception is raised if the dimensions are different.
Standard_EXPORT math_Matrix TMultiply(const math_Matrix& Right) const; //! Computes a matrix as the product of 2 vectors.
//! An exception is raised if the dimensions are different.
//! = * .
Standard_EXPORT void Multiply(const math_Vector& Left,const math_Vector& Right) ; //! Computes a matrix as the product of 2 matrixes.
//! An exception is raised if the dimensions are different.
Standard_EXPORT void Multiply(const math_Matrix& Left,const math_Matrix& Right) ; //! Computes a matrix to the product of the transpose of
//! the matrix with the matrix .
//! An exception is raised if the dimensions are different.
Standard_EXPORT void TMultiply(const math_Matrix& TLeft,const math_Matrix& Right) ; //! Sets a matrix to the Subtraction of the matrix
//! from the matrix .
//! An exception is raised if the dimensions are different.
Standard_EXPORT void Subtract(const math_Matrix& Left,const math_Matrix& Right) ; //! Accesses (in read or write mode) the value of index
//! and of a matrix.
//! An exception is raised if and are not
//! in the correct range.
Standard_Real& Value(const Standard_Integer Row,const Standard_Integer Col) const; Standard_Real& operator()(const Standard_Integer Row,const Standard_Integer Col) const { return Value(Row,Col); } //! Matrixes are copied through assignement.
//! An exception is raised if the dimensions are differents.
Standard_EXPORT math_Matrix& Initialized(const math_Matrix& Other) ; math_Matrix& operator=(const math_Matrix& Other) { return Initialized(Other); } //! Returns the product of 2 matrices.
//! An exception is raised if the dimensions are different.
Standard_EXPORT void Multiply(const math_Matrix& Right) ; void operator*=(const math_Matrix& Right) { Multiply(Right); } //! Returns the product of 2 matrices.
//! An exception is raised if the dimensions are different.
Standard_EXPORT math_Matrix Multiplied(const math_Matrix& Right) const; math_Matrix operator*(const math_Matrix& Right) const { return Multiplied(Right); } //! Returns the product of a matrix by a vector.
//! An exception is raised if the dimensions are different.
Standard_EXPORT math_Vector Multiplied(const math_Vector& Right) const; math_Vector operator*(const math_Vector& Right) const { return Multiplied(Right); } //! Returns the opposite of a matrix.
//! An exception is raised if the dimensions are different.
Standard_EXPORT math_Matrix Opposite() ; math_Matrix operator-() { return Opposite(); } //! Prints information on the current state of the object.
//! Is used to redefine the operator <<.
Standard_EXPORT void Dump(Standard_OStream& o) const; friend class math_Vector; protected: //! The new lower row of the matrix is set to
Standard_EXPORT void SetLowerRow(const Standard_Integer LowerRow) ; //! The new lower column of the matrix is set to the column
//! of range .
Standard_EXPORT void SetLowerCol(const Standard_Integer LowerCol) ; //! The new lower row of the matrix is set to
//! and the new lower column of the matrix is set to the column
//! of range .
void SetLower(const Standard_Integer LowerRow,const Standard_Integer LowerCol) ; private: Standard_Integer LowerRowIndex; Standard_Integer UpperRowIndex; Standard_Integer LowerColIndex; Standard_Integer UpperColIndex; math_DoubleTabOfReal Array; }; #include // other Inline functions and methods (like "C++: function call" methods) #endif