📄 matrix.h
字号:
/*
* =============================================================================
* ALADDIN Version 1.0 :
* matrix.h : Data Structures and Function Declarations for Matrix
*
* Copyright (C) 1995 by Mark Austin, Xiaoguang Chen, and Wane-Jang Lin
* Institute for Systems Research,
* University of Maryland, College Park, MD 20742
*
* This software is provided "as is" without express or implied warranty.
* Permission is granted to use this software for any on any computer system
* and to redistribute it freely, subject to the following restrictions:
*
* 1. The authors are not responsible for the consequences of use of
* this software, even if they arise from defects in the software.
* 2. The origin of this software must not be misrepresented, either
* by explicit claim or by omission.
* 3. Altered versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
* 4. This notice is to remain intact.
*
* Written by: Mark Austin and Wane-Jang Lin December 1995
* =============================================================================
*/
#ifndef MATRIX_H
#define MATRIX_H
/* [a] : Data Structures for Matrices of numbers/engineering quantities */
typedef struct {
double dReal, dImaginary;
} COMPLEX;
typedef enum {
INTEGER_ARRAY = 1,
DOUBLE_ARRAY = 2,
COMPLEX_ARRAY = 3
} DATA_TYPE;
typedef enum {
SEQUENTIAL = 1,
INDIRECT = 2,
SKYLINE = 3,
SPARSE = 4
} INTERNAL_REP;
typedef struct matrix {
char *cpMatrixName; /* *name */
int iNoRows; /* no_rows */
int iNoColumns; /* no_columns */
DIMENSIONS *spRowUnits; /* *row_units_buf */
DIMENSIONS *spColUnits; /* *col_units_buf */
INTERNAL_REP eRep;
DATA_TYPE eType; /* type */
union {
int **iaa;
double **daa; /* **d */
COMPLEX **caa;
} uMatrix;
} MATRIX;
/* [b] : Declarations for Root Matrix Functions */
#ifdef __STDC__
extern MATRIX *MatrixAllocate( MATRIX * );
extern MATRIX *MatrixDiag( MATRIX * );
extern MATRIX *MatrixZero( MATRIX * );
extern MATRIX *MatrixOne( MATRIX * );
extern MATRIX *MatrixAdd( MATRIX * , MATRIX * );
extern MATRIX *MatrixAddReplace( MATRIX *, MATRIX * );
extern MATRIX *MatrixSub( MATRIX * , MATRIX * );
extern MATRIX *MatrixSubReplace( MATRIX *, MATRIX * );
extern MATRIX *MatrixMult( MATRIX * , MATRIX * );
extern MATRIX *MatrixPower( MATRIX * , QUANTITY * );
extern MATRIX *MatrixNegate( MATRIX * );
extern MATRIX *MatrixNegateReplace( MATRIX *);
extern MATRIX *MatrixTranspose( MATRIX * );
extern MATRIX *MatrixCopy( MATRIX * );
extern MATRIX *MatrixSolve( MATRIX *, MATRIX * );
extern MATRIX *MatrixLU( MATRIX * );
extern MATRIX *MatrixFB( MATRIX *, MATRIX * );
extern MATRIX *MatrixInverse( MATRIX * );
extern MATRIX *MatrixDimension( MATRIX * );
extern MATRIX *MatrixScale( MATRIX *, double );
extern double MatrixContentScale( MATRIX *, int, int );
extern MATRIX *MatrixQuanMult( QUANTITY *, MATRIX * );
extern MATRIX *MatrixQuanDiv( MATRIX * , QUANTITY * );
extern MATRIX *MatrixZeroUnits( MATRIX *, int, int );
extern MATRIX *MatrixUnitsLess( MATRIX * );
extern MATRIX *MatrixUnitsSimplify( MATRIX * );
extern MATRIX *MatrixPrintVar( MATRIX *, ... );
extern MATRIX *MatrixPrint( MATRIX *, ... );
extern MATRIX *MatrixColumnUnits( MATRIX *, ... );
extern MATRIX *MatrixRowUnits( MATRIX *, ... );
extern MATRIX *MatrixExtract( MATRIX *, ... );
extern MATRIX *MatrixPut( MATRIX *, ... );
extern void MatrixFree( MATRIX * );
extern QUANTITY *MatrixDet( MATRIX * );
extern QUANTITY *MatrixMax( MATRIX * );
extern QUANTITY *MatrixMin( MATRIX * );
extern QUANTITY *MatrixL2Norm( MATRIX * );
extern QUANTITY *QuantityCast( MATRIX * );
/* [c] : Matrix Functions with INDIRECT Storage Pattern */
extern MATRIX *MatrixAllocIndirect( char *, DATA_TYPE , int , int );
extern double **MatrixAllocIndirectDouble( int, int );
extern int **MatrixAllocIndirectInteger( int, int );
extern void MatrixFreeIndirectDouble( double **, int );
extern void MatrixFreeIndirectInteger( int **, int );
extern void MatrixPrintIndirectDouble( MATRIX * );
extern void MatrixPrintIndirectInteger( MATRIX * );
extern MATRIX *MatrixCopyIndirectDouble( MATRIX * );
extern MATRIX *MatrixAddIndirectDouble( MATRIX *, MATRIX *);
extern MATRIX *MatrixAddReplaceIndirectDouble( MATRIX *, MATRIX *);
extern MATRIX *MatrixSubIndirectDouble( MATRIX *, MATRIX *);
extern MATRIX *MatrixSubReplaceIndirectDouble( MATRIX *, MATRIX *);
extern MATRIX *MatrixMultIndirectDouble( MATRIX *, MATRIX *);
extern MATRIX *MatrixMultIndirectSkylineDouble( MATRIX *, MATRIX *);
extern MATRIX *MatrixMultSkylineIndirectDouble( MATRIX *, MATRIX *);
extern MATRIX *MatrixNegateIndirectDouble( MATRIX * );
extern MATRIX *MatrixNegateReplaceIndirectDouble( MATRIX * );
extern MATRIX *MatrixTransposeIndirectDouble( MATRIX * );
extern MATRIX *MatrixInverseIndirectDouble( MATRIX * );
extern MATRIX *MatrixScaleIndirectDouble( MATRIX *, double );
extern double MatrixContentScaleIndirectDouble( MATRIX *, int, int );
/* [d] : Matrix Functions with SKYLINE Storage Pattern */
extern MATRIX *MatrixAllocSkyline( char *, DATA_TYPE, int, int, int *);
extern void MatrixFreeSkyline( MATRIX * );
extern void MatrixPrintSkylineDouble( MATRIX * );
extern MATRIX *MatrixReallocSkyline( MATRIX * );
extern MATRIX *MatrixReallocSkylineDouble( MATRIX * );
extern MATRIX *MatrixAddSkyline( MATRIX *, MATRIX * );
extern MATRIX *MatrixSubSkyline( MATRIX *, MATRIX * );
extern MATRIX *MatrixMultSkyline( MATRIX *, MATRIX *);
extern MATRIX *MatrixNegateSkyline( MATRIX *);
extern MATRIX *MatrixNegateReplaceSkyline( MATRIX * );
extern MATRIX *MatrixCopySkyline( MATRIX * );
extern MATRIX *MatrixTransposeSkyline( MATRIX * );
extern MATRIX *MatrixInverseSkyline( MATRIX * );
extern MATRIX *MatrixScaleSkyline( MATRIX *, double );
extern double MatrixContentScaleSkyline( MATRIX *, int, int );
extern MATRIX *LUDecompositionSkyline( MATRIX *);
extern MATRIX *LUBacksubstitutionSkyline( MATRIX *, MATRIX *);
extern MATRIX *MatrixIndirectToSkyline( MATRIX * );
extern MATRIX *MatrixSkylineToIndirect( MATRIX * );
extern MATRIX *MatrixAssembleSkyline( MATRIX *, MATRIX *, int *, int * );
extern MATRIX *CholeskyDecompositionIndirect( MATRIX * );
extern void MatrixSolveEigen( MATRIX *, MATRIX *, MATRIX *, MATRIX *, int );
extern MATRIX *Solve_Eigen( MATRIX *, MATRIX *, MATRIX * );
extern MATRIX *Extract_Eigenvalue( MATRIX * );
extern MATRIX *Extract_Eigenvector( MATRIX * );
extern void Print_Eigen( MATRIX * );
extern void dMatrixPrint( char *, double **, int, int );
extern double **dMatrixCopy( double **, int, int );
extern double **dMatrixCopyRep( double **, double **, int, int );
extern double **dVmatrixCrossProduct( double **, double **, int, int, double **, int, int );
extern double dVmatrixInnerProduct( double **, int, int, double **, int, int );
extern double **dMatrixMult( double **, int, int, double **, int, int );
extern double **dMatrixMultRep( double **, double **, int, int, double **, int, int );
extern double **dMatrixTranspose( double **, int, int );
extern double dVmatrixL2Norm( double **, int, int );
extern double dMatrixDet( double **, int, int );
#else /* start case not STDC */
/* [b] : Declarations for Root Matrix Functions */
extern MATRIX *MatrixPrint();
extern MATRIX *MatrixPrintVar();
extern MATRIX *MatrixAllocate();
extern MATRIX *MatrixDiag();
extern MATRIX *MatrixZero();
extern MATRIX *MatrixOne();
extern MATRIX *MatrixScale();
extern double MatrixContentScale();
extern MATRIX *MatrixCopy();
extern MATRIX *MatrixTranspose();
extern MATRIX *MatrixDimension();
extern MATRIX *MatrixAdd();
extern MATRIX *MatrixAddReplace();
extern MATRIX *MatrixSub();
extern MATRIX *MatrixSubReplace();
extern MATRIX *MatrixMult();
extern MATRIX *MatrixPower();
extern MATRIX *MatrixNegate();
extern MATRIX *MatrixNegateReplace();
extern void MatrixFree();
extern MATRIX *MatrixSolve();
extern MATRIX *MatrixLU();
extern MATRIX *MatrixFB();
extern void MatrixSolveEigen();
extern MATRIX *MatrixInverse();
extern QUANTITY *MatrixDet();
extern QUANTITY *MatrixL2Norm();
extern QUANTITY *MatrixMax();
extern QUANTITY *MatrixMin();
/* [b.1] : Operations between MATRIX and QUANTITY */
extern MATRIX *MatrixQuanMult();
extern MATRIX *MatrixQuanDiv();
/* [b.2] : Declarations for Matrix Functions about Units */
extern MATRIX *MatrixColumnUnits();
extern MATRIX *MatrixRowUnits();
extern MATRIX *MatrixZeroUnits();
extern MATRIX *MatrixUnitsSimplify();
extern MATRIX *MatrixUnitsLess();
extern MATRIX *MatrixExtract();
extern MATRIX *MatrixPut();
extern QUANTITY *QuantityCast();
/* [c] : Matrix Functions with INDIRECT Storage Pattern */
extern MATRIX *MatrixAllocIndirect();
extern double **MatrixAllocIndirectDouble();
extern int **MatrixAllocIndirectInteger();
extern void MatrixFreeIndirectDouble();
extern void MatrixFreeIndirectInteger();
extern MATRIX *MatrixCopyIndirectDouble();
extern MATRIX *MatrixScaleIndirectDouble();
extern double MatrixContentScaleIndirectDouble();
extern MATRIX *MatrixAddIndirectDouble();
extern MATRIX *MatrixAddReplaceIndirectDouble();
extern MATRIX *MatrixSubIndirectDouble();
extern MATRIX *MatrixSubReplaceIndirectDouble();
extern MATRIX *MatrixNegateIndirectDouble();
extern MATRIX *MatrixNegateReplaceIndirectDouble();
extern MATRIX *MatrixMultIndirectDouble();
extern MATRIX *MatrixTransposeIndirectDouble();
extern MATRIX *LUDecompositionIndirect();
extern MATRIX *LUSubstitutionIndirect();
extern MATRIX *MatrixInverseIndirectDouble();
/* [d] : Matrix Functions with SKYLINE Storage Pattern */
extern MATRIX *MatrixAllocSkyline();
extern void MatrixPrintSkylineDouble();
extern void MatrixFreeSkyline();
extern MATRIX *ReSkyMatrix();
extern MATRIX *ReSkyMatrixDouble();
extern MATRIX *MatrixAddSkyline();
extern MATRIX *MatrixSubSkyline();
extern MATRIX *MatrixMultSkyline();
extern MATRIX *MatrixNegateSkyline();
extern MATRIX *MatrixNegateReplaceSkyline();
extern MATRIX *MatrixMultIndirectSkylineDouble();
extern MATRIX *MatrixMultSkylineIndirectDouble();
extern MATRIX *MatrixCopySkyline();
extern MATRIX *MatrixScaleSkyline();
extern double MatrixContentScaleSkyline();
extern MATRIX *LUDecompositionSkyline();
extern MATRIX *LUBacksubstitutionSkyline();
extern MATRIX *MatrixTransposeSkyline();
extern MATRIX *MatrixInverseSkyline();
extern MATRIX *MatrixIndirectToSkyline();
extern MATRIX *MatrixSkylineToIndirect();
extern MATRIX *MatrixAssembleSkyline();
extern MATRIX *CholeskyDecompositionIndirect();
extern MATRIX *Solve_Eigen();
extern MATRIX *Extract_Eigenvalue();
extern MATRIX *Extract_Eigenvector();
extern void Print_Eigen();
/* [e] : Declarations for Double Matrix (without units) Functions */
extern void dMatrixPrint();
extern double **dMatrixCopy();
extern double **dMatrixCopyRep();
extern double **dVmatrixCrossProduct();
extern double dVmatrixInnerProduct();
extern double **dMatrixMult();
extern double **dMatrixMultRep();
extern double **dMatrixTranspose();
extern double dVmatrixL2Norm();
extern double dMatrixDet();
#endif /* end case not STDC */
#endif /* end case MATRIX_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -