📄 matrix.h
字号:
// Matrix.h: interface for the CMatrix class.
// 原作者:Somnath Kundu EMail:somnath@kagi.com
//
// 改编:朱桂斌
// 2001年3月6日
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MATRIX_H__FF1B9D67_126E_11D5_92B2_D2112ACC3A5C__INCLUDED_)
#define AFX_MATRIX_H__FF1B9D67_126E_11D5_92B2_D2112ACC3A5C__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//#include <cstdlib>
#include <cmath>
//#include <iostream>
class CMatrix
{
private:
//矩阵数据
double **Val;
//Row-矩阵行数,Col-矩阵列数,RowSiz-内存行数,ColSiz-内存列数
unsigned int Row, Col, RowSiz, ColSiz;
//
inline void realloc (unsigned int row, unsigned int col);
//
inline int pivot (unsigned int row);
public:
// 构造函数
inline CMatrix (const CMatrix& m);
inline CMatrix (unsigned int row = 1, unsigned int col = 1);
// 析构函数
inline virtual ~CMatrix();
// 取值
inline unsigned int RowNo () { return Row; }
inline unsigned int ColNo () { return Col; }
// 下标操作符
inline double& operator () (unsigned int row, unsigned int col) ;
// 一元操作符:正、负
inline CMatrix operator + () { return *this; }
inline CMatrix operator - () ;
// 赋值操作符
inline CMatrix& operator = (const CMatrix& m) ;
// 拷贝内容,有可能扩大尺寸,但不缩小
inline CMatrix& CopyFrom(const CMatrix& m);
// 结合运算
inline CMatrix& operator += (const CMatrix& m) ;
inline CMatrix& operator -= (const CMatrix& m) ;
inline CMatrix& operator *= (const CMatrix& m) ;
inline CMatrix& operator *= (const double& c) ;
inline CMatrix& operator /= (const double& c) ;
inline CMatrix& operator ^= (const unsigned int& pow) ;
// 逻辑运算
inline friend bool operator == (const CMatrix& m1, const CMatrix& m2) ;
inline friend bool operator != (const CMatrix& m1, const CMatrix& m2) ;
// 计算操作符
inline friend CMatrix operator + (const CMatrix& m1, const CMatrix& m2) ;
inline friend CMatrix operator + (const CMatrix& m, const double& no) ;
inline friend CMatrix operator + (const double& no, const CMatrix& m) { return (m+no);};
inline friend CMatrix operator - (const CMatrix& m1, const CMatrix& m2) ;
inline friend CMatrix operator - (const CMatrix& m, const double& no) { return (m+(-no));};
inline friend CMatrix operator - (const double& no, const CMatrix& m) ;
inline friend CMatrix operator * (const CMatrix& m1, const CMatrix& m2) ;
inline friend CMatrix operator * (const CMatrix& m, const double& no) ;
inline friend CMatrix operator * (const double& no, const CMatrix& m) { return (m*no); }
inline friend CMatrix operator / (const CMatrix& m1, const CMatrix& m2) { return (m1 * !m2); }
inline friend CMatrix operator / (const CMatrix& m, const double& no) { return (m*(1/no)); }
inline friend CMatrix operator / (const double& no, const CMatrix& m) { return (!m * no); }
inline friend CMatrix operator ~ (const CMatrix& m) ;
inline friend CMatrix operator ! (CMatrix m) ;
inline friend CMatrix operator ^ (const CMatrix& m, const unsigned int& pow) ;
// 其它方法
inline void Null (const unsigned int& row, const unsigned int& col) ;
inline void Ones (const unsigned int& row, const unsigned int& col) ;
inline void Null () ;
inline void Ones () ;
inline void Unit (const unsigned int& row) ;
inline void Unit () ;
inline void SetSize (unsigned int row, unsigned int col) ;
// 数学函数
inline friend CMatrix Exp(const CMatrix& m);
// 点乘
inline CMatrix Mul (const CMatrix& m);
// 点除(A./B)
inline CMatrix Div (const CMatrix& m);
//用1点除
inline CMatrix Div ();
// 实用方法
inline CMatrix Solve (const CMatrix& v) const ;
inline CMatrix Adj () ;
inline double Det () ;
inline double Norm () ;
inline double Cofact (unsigned int row, unsigned int col) ;
inline double Cond () ;
// 矩阵种类:
inline bool IsSquare () { return (Row == Col); }
inline bool IsSingular () ;
inline bool IsDiagonal () ;
inline bool IsScalar () ;
inline bool IsUnit () ;
inline bool IsNull () ;
inline bool IsSymmetric () ;
inline bool IsSkewSymmetric () ;
inline bool IsUpperTiangular () ;
inline bool IsLowerTiangular () ;
// IO操作
// inline friend istream& operator >> (istream& i, CMatrix& m);
// inline friend ostream& operator << (ostream& o, CMatrix& m);
};
#include "Matrix.inl"
#endif // !defined(AFX_MATRIX_H__FF1B9D67_126E_11D5_92B2_D2112ACC3A5C__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -