⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix.h

📁 利用语言编写的有限元分析软件
💻 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 + -