|
|
#pragma once
|
|
|
|
|
|
#include "Defines.h"
|
|
|
#include "iAlgMath_global.h"
|
|
|
|
|
|
class zxAlgMatrixCol;
|
|
|
|
|
|
// 矩阵
|
|
|
// 注:本矩阵类有些特殊,包括两个部分,由于时间限制,未做统一整合,后续再进行处理件
|
|
|
// 1.处理解释中用的矩阵操作,以本类为载体,类缓存模式,并且引用 zxAlgMatrixCol,对应 zxAlgMatrix.cpp 文件
|
|
|
// 2.拟合回归算法中用到的矩阵相关,大都是static函数,以VecDouble为载体,对应 zxAlgMatrixEx.cpp 文件
|
|
|
class I_ALGMATH_EXPORT zxAlgMatrix
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
zxAlgMatrix();
|
|
|
zxAlgMatrix(int rows, int cols, double val = 0.0);
|
|
|
virtual ~zxAlgMatrix();
|
|
|
|
|
|
/////////////////////////////////////////////////////////
|
|
|
// 1.处理解释中用的矩阵操作,以本类为载体,类缓存模式,并且引用 zxAlgMatrixCol,对应 zxAlgMatrix.cpp 文件
|
|
|
|
|
|
public:
|
|
|
|
|
|
static zxAlgMatrix Zero(int nRow, int nCol); //初始化
|
|
|
int rows() const; //获取行数
|
|
|
int cols() const; //获取列数
|
|
|
|
|
|
void set(int row, int col, double value); //设置元素
|
|
|
double get(int row, int col) const; //获取元素
|
|
|
double operator()(int row, int col = 0) const;//访问元素
|
|
|
double& operator()(int row, int col = 0);
|
|
|
|
|
|
zxAlgMatrix operator= (zxAlgMatrix other); //赋值函数
|
|
|
|
|
|
zxAlgMatrix operator+ (zxAlgMatrix other); //矩阵相加
|
|
|
zxAlgMatrix operator- (zxAlgMatrix other); //矩阵相减
|
|
|
zxAlgMatrix operator* (zxAlgMatrix other); //矩阵相乘
|
|
|
zxAlgMatrix operator/ (zxAlgMatrix& other);//矩阵相除
|
|
|
zxAlgMatrixCol operator* (const zxAlgMatrixCol& vec); //矩阵与行列式相乘
|
|
|
zxAlgMatrix operator-() ; //矩阵求负
|
|
|
|
|
|
zxAlgMatrix transpose(); //矩阵转置
|
|
|
zxAlgMatrix inverse(); //矩阵求逆
|
|
|
double determinant(); //行列式
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 数据体
|
|
|
VVecDouble m_vvecData;
|
|
|
|
|
|
/////////////////////////////////////////////////////////
|
|
|
// 2.拟合回归算法中用到的矩阵相关,大都是static函数,以VecDouble为载体,对应 zxAlgMatrixEx.cpp 文件
|
|
|
|
|
|
public:
|
|
|
|
|
|
// 求矩阵行列式。
|
|
|
static double matrixDet(VecDouble vMatrix, int nRow);
|
|
|
|
|
|
// 矩阵乘法,矩阵*矩阵
|
|
|
static bool plusMatrix(VecDouble& vResult, int &nResultRow, \
|
|
|
VecDouble vLeft, int nLetfRow, \
|
|
|
VecDouble vRight, int nRightRow);
|
|
|
|
|
|
// 矩阵乘法,矩阵*数值
|
|
|
static bool plusMatrix(VecDouble& vResult, double dFactor);
|
|
|
|
|
|
// 将矩阵由一维形式转为二维形式
|
|
|
static bool vec2VecRow2D(VecDouble vec, int nRow, \
|
|
|
VVecDouble& vec2D);
|
|
|
|
|
|
// 行*列
|
|
|
static bool plusRow(double& dResult,VecDouble vRow, \
|
|
|
VecDouble vCol);
|
|
|
|
|
|
// 求矩阵伴随阵
|
|
|
static bool adjoinMatrix(VecDouble& vMatrix, int nRow);
|
|
|
|
|
|
// 求矩阵某一个元素的代数余子式
|
|
|
static bool cofactor(double &dResult, VecDouble vMatrix, \
|
|
|
int nRow, int i, int j);
|
|
|
|
|
|
// 矩阵求逆
|
|
|
static bool inverseMatrix(VecDouble& vMatrix, int nRow);
|
|
|
|
|
|
// 矩阵转置
|
|
|
static bool transposeMatrix(VecDouble& vMatrix, int& nRow);
|
|
|
|
|
|
// 矩阵加法
|
|
|
static bool AddMatrix(VecDouble& vResult, int &nResultRow, \
|
|
|
VecDouble vLeft, int nLetfRow, \
|
|
|
VecDouble vRight, int nRightRow);
|
|
|
// 矩阵减法
|
|
|
static bool subMatrix(VecDouble& vResult, int& nResultRow, \
|
|
|
VecDouble vLeft, int nLetfRow, \
|
|
|
VecDouble vRight, int nRightRow);
|
|
|
};
|
|
|
|
|
|
// 列向量
|
|
|
class I_ALGMATH_EXPORT zxAlgMatrixCol
|
|
|
{
|
|
|
public:
|
|
|
|
|
|
zxAlgMatrixCol();
|
|
|
zxAlgMatrixCol(int nRow, int nCol = 1, double val = 0.0);
|
|
|
|
|
|
static zxAlgMatrixCol Zero(int nRow, int nCol = 1);
|
|
|
int rows();
|
|
|
|
|
|
double operator()(int i, int j = 0) const;
|
|
|
double& operator()(int i, int j = 0);
|
|
|
|
|
|
double& operator[](int i);
|
|
|
const double& operator[](int i) const;
|
|
|
|
|
|
// 赋值函数
|
|
|
zxAlgMatrixCol operator=( zxAlgMatrixCol other);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 数据体
|
|
|
VecDouble m_vecData;
|
|
|
};
|
|
|
|