C++矩阵运算(较全面)

`在这里插/C++矩阵运算库是基于面向对象完成开发
Write By ZhangFa 2019年3月9日
/

#include
#include
using namespace std;

class matrix
{
protected:
int row;
int col;
int size;
double data;
public:
matrix();
matrix(int r,int c); //构造函数,矩阵定义入口
matrix (const matrix& M); //拷贝构造函数
~matrix(void); //析构函数,自动释放内存
friend void free_place(matrix& M); //释放内存
matrix& operator=(matrix& M); //重载=运算符
matrix operator+(matrix& M); //重载+运算符矩阵相加
matrix operator+(double pos); //重载+运算符矩阵与一个数相加,矩阵每个元素加这个数
matrix operator+=(matrix& M); //重载累加运算符
matrix operator-(matrix& M); //重载-运算符矩阵相加
matrix operator-=(matrix& M); //重载累减运算符
double operator()(int r=0,int c=0); //索引内部元素
friend matrix operator
(matrix& M1,matrix& M2); //重载运算符矩阵乘法
friend matrix operator
(matrix& M1, double pos);//重载*运算符,矩阵元素同时乘以一个数
friend matrix operator/(matrix& M1, double pos);//重载/运算符,矩阵元素同时除以一个数
friend ostream& operator<<(ostream& out, matrix& M);//重载输出运算符
friend istream& operator>>(istream &input, matrix &M);//重载输入运算符,一个一个的输入

public:
int size1(); //矩阵行数
int size2(); //矩阵列数
int numel(); //矩阵元素总数
void array_to_matrix(double *array); //数组转化为矩阵

public: //向量的基本操作
double mean(); //求向量元素的平均数
double sum(); //向量内部元素之和
double length(); //向量长度
double norm(); //向量的模
double index(int n); //向量索引元素,注意下标从零开始
int number_find(double pos); //向量中查找某个数的位置
friend double dot(matrix& M1,matrix& M2); //向量的点乘,MATLAB中的dot语句
friend matrix cross(matrix& M1,matrix& M2); //向量叉乘,仅限于3阶向量
matrix blocks(int a,int b); //向量截取,从a到b,注意下标从零开始
friend matrix sequence(double beg,double en,double step);//向量下标递增数列,给定开始和结尾数据
void deassign(int n, double pos); //对向量某个元素重新赋值,从零开始
matrix point_power(double n); //向量点方,相当于.^n
void push_back(double pos); //向量后面增加一个数

public: //二维矩阵的基本操作
double index(int x,int y); //索引矩阵某一个元素
void deassign(int r,int c,double pos); //对矩阵中的某个元素赋值或重新赋值,从零开始
double det(); //矩阵行列式
friend matrix numpy(matrix& M1,matrix& M2); //两个矩阵对应元素相乘,相当于.*
friend matrix merge(matrix& M1, matrix& M2); //合并两个矩阵,[M1,M2]横排
friend matrix vertical(matrix& M1,matrix& M2); //合并两个矩阵,[M1;M2]竖排
void grow_col(matrix& M); //矩阵动态增长,M=[M,M1];
void grow_row(matrix& M); //矩阵动态增长,M=[M;M1];
friend matrix zeros(int r = 0, int c = 0); //生成零矩阵
friend matrix eye(int num); //生成单位矩阵
friend matrix ones(int r, int c); //产生元素全为1的矩阵
//matrix ones(double n); //由某个向量扩充,元素有每一行第一个个数复制得到
matrix diag(); //生成对角阵,通过向量生成
matrix trans(); //矩阵转置
matrix inverse(); //矩阵求逆
matrix GuassInversion(); //高斯消元发求矩阵的逆
matrix adjoint(); //伴随矩阵
matrix getrow(size_t index); //得到矩阵的行向量
matrix getcol(size_t index); //得到矩阵的列向量
matrix blocks(int a,int b,int m,int n); //矩阵块提取,参数分别为从矩阵(a,b)开始,提取(m,n)块
void replace(int a, int b, matrix& M); //已知矩阵用M矩阵重新赋值,从矩阵(a,b)开始,替换长度由M决定。矩阵长度从零开始
void doolittle(matrix& L,matrix& U); //矩阵三角分解
matrix Cholesky(); //chol分解
void QR(matrix& Q,matrix& R); //矩阵QR分解
matrix eig_val(In_opt unsigned _iters); //用QR分解计算特征值
matrix eig_vect(In_opt unsigned _iters); //特征向量
};

//三维矩阵
class Mat3D :public matrix //类的继承与派生
{
private:
int lay;

public: //三维矩阵的基本操作
Mat3D(); //空矩阵
Mat3D(int r, int c, int l); //构造函数
~Mat3D(void); //析构函数 Mat3D(const Mat3D& M); //拷贝赋值
Mat3D& operator=(Mat3D& M); //重载=运算符
friend ostream& operator<<(ostream& out, Mat3D& M);//重载输出运算符
void zeros_3D(); //生成零矩阵 void save_in_ij(matrix& M); //把矩阵保存到ij面内
void save_in_jk(matrix& M); //把矩阵保存到jk面
void save_in_ik(matrix& M); //把矩阵保存到ik面内
matrix pick_from_ij(int k); //从三维矩阵提取ij面的元素
matrix pick_from_jk(int i);
matrix pick_from_ik(int j);
double index_3D(int a,int b,int c); //索引某一点出元素
matrix pick_col_i(int j,int k); //取平行于i的一列元素
matrix pick_col_j(int i,int k);
matrix pick_col_k(int i,int j);
void replace_ij(int k,matrix& M); //已知三维矩阵自身的变换,k层元素的替换,返回是替换后的矩阵
void replace_jk(int i,matrix& M); //已知三维矩阵自身的变换,i层元素的替换,返回是替换后的矩阵
void replace_ik(int j,matrix& M); //已知三维矩阵自身的变换,j层元素的替换,返回是替换后的矩阵 };入代码片

`@C++矩阵运算(较全面)

链接: https://mp.csdn.net/console/upDetailed.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值