矩阵计算(C++)

这是一个C++实现的矩阵类,包含构造函数、拷贝构造函数、矩阵元素访问与修改、矩阵运算(加减乘、转置、求逆、行列式)等功能。类内部使用动态数组存储矩阵元素,并提供了格式化输出矩阵的函数。
摘要由CSDN通过智能技术生成

#ifndef _MATRIX_H
#define _MATRIX_H

class Matrix
{
 private:
  int  row; // 矩阵的行数
  int  col; // 矩阵的列数
  int  n;  // 矩阵元素个数
  double* mtx; // 动态分配用来存放数组的空间
 public:
  Matrix(int row=1, int col=1);     // 带默认参数的构造函数
  Matrix(int row, int col, double mtx[]);   // 用数组创建一个矩阵
  Matrix(const Matrix &obj);      // copy构造函数
    ~Matrix() { delete[] this->mtx; }    

  void print()const;                        // 格式化输出矩阵
  int  getRow()const { return this->row; }  // 访问矩阵行数
  int  getCol()const { return this->col; }  // 访问矩阵列数
  int  getN()const   { return this->n;   }  // 访问矩阵元素个数
  double* getMtx()const { return this->mtx; }  // 获取该矩阵的数组
  
  // 用下标访问矩阵元素
  double  get(const int i, const int j)const;
  // 用下标修改矩阵元素值
  void  set(const int i, const int j, const double e);

  // 重载了一些常用操作符,包括 +,-,x,=,负号,正号,
  // A = B
  Matrix &operator= (const Matrix &obj);
  // +A
  Matrix  operator+ ()const { return *this; }
  // -A
  Matrix  operator- ()const;
  // A + B
  friend  Matrix  operator+ (const Matrix &A, const Matrix &B);
  // A - B
  friend  Matrix  operator- (const Matrix &A, const Matrix &B);
  // A * B 两矩阵相乘
  friend  Matrix  operator* (const Matrix &A, const Matrix &B);
  // a * B 实数与矩阵相乘
  friend  Matrix  operator* (const double &a, const Matrix &B);
  // A 的转置
  friend  Matrix  trv(const Matrix &A);
  // A 的行列式值,采用列主元消去法
  // 求行列式须将矩阵化为三角阵,此处为了防止修改原矩阵,采用传值调用
  friend  double  det(Matrix A);
  // A 的逆矩阵,采用高斯-若当列主元消去法
  friend  Matrix  inv(Matrix A);
};

#endif       

//===================================

 #include<iostream.h>                                                                              
#include<math.h>                                                                                  
#include<stdlib.h>                                                                                
#include<iomanip.h>                                                                               
#include"matrix.h"    
                                                                           
// 带默认参数值的构造函数                                                                         
// 构造一个row行col列的零矩阵                                                                     
Matrix::Matrix(int row, int col)                                                                  
{                                                                                                 
 this->row = row;    this->col = col;                                                        
 this->n   = row * col; this->mtx = new double[n];                                              
 for(int i=0; i<n; i++)                                                                          
  this->mtx[i] = 0.0;                                                                           
}  
                                                                                              
// 用一个数组初始化矩阵                                                                           
Matrix::Matrix(int row, int col, double mtx[])                                                    
{                                                                                                 
 this->row = row;    this->col = col;                                                        
 this->n   = row * col; this->mtx = new double[n];                                              
 for(int i=0; i<n; i++)                                                                          
  this->mtx[i] = mtx[i];                                                                        
}
                                                                                                 
// 拷贝构造函数,因为成员变量含有动态空间,防止传递参数                                           
// 等操作发生错误                                                                                 
Matrix::Matrix(const Matrix &obj)                                                                 
{                                                                                                 
 this->row = obj.getRow();                                                      

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C++中,可以通过一些技巧和优化来提升矩阵计算的效率。下面是一些常用的方法: 1. 使用矩阵库:使用高效的矩阵库可以简化矩阵计算的过程,并且库中通常会使用优化的算法和数据结构来提高计算效率。一些常用的矩阵库包括Eigen、BLAS和LAPACK等。 2. 矩阵布局优化:在内存中存储矩阵时,可以选择合适的布局方式来提高访问效率。例如,使用行主序(row-major)或列主序(column-major)布局,以便更好地利用缓存。 3. 并行计算:利用多线程或并行计算库,将矩阵计算任务分解为多个子任务并行执行,以提高计算效率。例如,可以使用OpenMP或CUDA等并行计算框架。 4. 矩阵乘法优化:矩阵乘法是矩阵计算中最常见的操作之一。可以使用优化的算法,如Strassen算法或Coppersmith-Winograd算法,来加速矩阵乘法。 5. 编译器优化:使用合适的编译器选项和优化级别,以便编译器能够对代码进行更好的优化。例如,启用编译器的向量化优化选项,以利用SIMD指令集进行并行计算。 6. 内存访问优化:尽量减少对内存的频繁访问,可以通过合理地利用缓存、使用局部变量和避免不必要的内存拷贝等方式来提高效率。 7. 算法优化:选择合适的算法和数据结构,以减少计算量和内存访问次数。例如,使用分块矩阵算法或稀疏矩阵算法来处理特殊类型的矩阵
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值