Nacho:一个轻量级的C++矩阵运算类库

项目背景

从连通性的角度为一个管道网络建立数学模型其实很简单:

204723_3Yhu_1047422.png

把 A 称为该管网的连通矩阵。从定义中可以看出管网在这里被视为单向图。

根据节点质量守恒定律,在供水管网的每一个节点,流入该节点的质量应等于流出该节点的质量,从而可以建立整个管网的节点流量平衡方程组:

                                205144_GHMu_1047422.png

205219_2I2h_1047422.png

这个方程组就是供水管网水力分析的基础。

这是水力分析程序的整体架构:

210438_5syN_1047422.png

在计算过程中用到大量矩阵的加法、减法、乘法、转置等运算。Nacho就是为了满足这些计算需求而被设计的。



设计思想

采用面向对象的设计模式,将矩阵封装成一个CMatrix类,矩阵的转置、求范数、置零等操作由CMatrix的成员方法提供,然后通过定义“+”,“-”,“*”,“/”,“^”等操作符来完成矩阵的加、减、乘、除以及元素求幂等运算,最后单独定义了CMatrix的控制台输出操作符,可以方便的把矩阵打印出来。

下面给出CMatrix的定义:

// CMatrix.h

#ifndef CMATRIX_H
#define CMATRIX_H

#include <iostream>
using namespace std;

class CMatrix {

public:

        
	CMatrix(int m, int n);         //构建一个m*n的全零矩阵			 
	CMatrix(int n);                //构建一个n*n的全零矩阵	  			 
	CMatrix(const CMatrix &);      //拷贝构造函数,深拷贝		                 
	~CMatrix();

	static bool printWhenCreateAndDelete;    //控制是否打印构造与析构

	int getRowNum() const;             //返回矩阵的行数
	int getColNum() const;             //返回矩阵的列数
	bool getTransState() const;        //返回矩阵的转置状态

	CMatrix trans() const;                     //将矩阵转置
	double norm() const;                       //求解矩阵F范数
	double get(int i, int j) const;            //返回矩阵第i行j列元素
	void set(int i, int j, double val);        //设置矩阵第i行j列元素为val
	void diagUnitize();                        //将方阵对角线元素全部设置为1
	void clear();                              //将矩阵所有元素设置为零

	CMatrix operator +(const CMatrix &mat);	       //两个矩阵相加
	CMatrix operator -(const CMatrix &mat);	       //两个矩阵相减
	CMatrix operator *(const CMatrix &mat);	       //两个矩阵相乘
	CMatrix operator *(const double f);            //矩阵乘以常数
	CMatrix operator /(const double f);            //矩阵除以常数
	CMatrix operator ^(const double f);            //矩阵元素分别求幂
	void operator =(const CMatrix &mat);           //将一个矩阵赋给另一个

private:

	double *start;		//指向矩阵首元素的指针
	int rowNum;		//矩阵行数
	int colNum;		//矩阵列数

	bool isTransposed;	//记录矩阵是否转置
	void rowColSwap();	//转置时用于交换row_num与col_num的值
};

//在控制台以规范的格式打印矩阵
ostream & operator <<(ostream &, const CMatrix &);

#endif


开源项目

项目地址:https://github.com/lbbc1117/Nacho

项目中包含了简单的API文档。

我还另外定义了一个CTest类,里面包含了不同的方法,对CMatrix各种运算进行测试,并将测试结果输出到控制台。

CTest也包括在开源项目中。

转载于:https://my.oschina.net/findbill/blog/498844

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值