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

📄 matrix.h

📁 BP人工神经网络训练源码
💻 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 + -