码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-28 21:47:20      阅读:343      评论:0      收藏:0      [点我收藏+]

标签:

项目背景

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

技术分享

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

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

                                技术分享

技术分享

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

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

技术分享

在计算过程中用到大量矩阵的加法、减法、乘法、转置等运算。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也包括在开源项目中。

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

标签:

原文地址:http://my.oschina.net/findbill/blog/498844

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!