解線性方程組

作者: Phinecos(洞庭散人)  來源: 博客園  發布時間: 2008-08-16 22:51  閱讀: 1162 次  推薦: 0   原文鏈接   [收藏]  
幫一個朋友做的作業題,現在真是什么專業都要學編程了呀。。
//向量類
/*
**author:phinecos
**date:7/17/2008
*/

class CVector
{
public:
    CVector(unsigned 
int d=0);//由向量的維數創建向量,向量元素值初始化為
    CVector(unsigned int d, double* pe);//由向量的維數和向量元素數組創建數組
    CVector(double x, double y);//由兩個元素生成二維向量
    CVector(double x, double y, double z);//由三個元素生成三維向量
    CVector(CVector& v);//復制構造函數

    ~CVector();//析構函數

    CVector& operator =(const CVector& v);//重載賦值運算符
    CVector& operator +(void);//重載一元運算符+
    CVector operator +(const CVector& v) const;//重載二元運算符+
    CVector& operator -(void);//重載一元運算符-
    CVector operator -(const CVector& v) const;//重載二元運算符-
    CVector operator *(const CVector& v) const;//重載二元運算符*,表示向量的叉乘(向量積)
    double operator %(const CVector& v) const;//重載二元運算符%,表示向量的點乘(數量積)
    CVector operator *(const double& d) const;//重載二元運算符*,表示向量的數乘

    double& operator [](const unsigned int i);//重載操作符[],對指定向量元素進行操作

    unsigned int GetDegree() const;//獲取向量維數
    void printElements();
    friend 
class CLinearEquation;

private:
    
double* pElement;    //向量元素存儲地址
    unsigned int nDegree;//向量的維數
    void initByZero();//初始化為
    void initByArray(double* pe);//用數組初始化
    void alloc(unsigned int n=0);//分配空間
    void reverse();//變號
    void destory();
}
;
向量類實現
class CVector;//前向聲明
//矩陣類
/*
**author:phinecos
**date:7/17/2008
*/

class CMatrix
{
public:
    CMatrix(unsigned 
int r=0,unsigned int c=0);    //由矩陣的行數和列數創建矩陣類對象,并為矩陣元素分配存儲空間,將矩陣初始化為單位矩陣;
    CMatrix(const char* pFileName);    //由矩陣存儲文件名創建矩陣類對象,文件格式可參考附錄,但不限于采用此格式;
    CMatrix(const CMatrix& m); //復制構造函數,由已有矩陣類對象創建新的矩陣類對象;    

    unsigned int GetRowsNum() const;//獲取矩陣的行數    
    unsigned int GetColumnsNum() const;//獲取矩陣的列數    

    double& operator ()(unsigned int r, unsigned int c);//重載運算符(),用于提取指定行(r)列(c)的元素值
    CMatrix& operator =(const CMatrix& m);    //重載運算符=,用于矩陣之間相互賦值    
    CMatrix& operator +() const;//重載一元運算符+,即取矩陣本身    
    CMatrix operator -() const;//重載一元運算符-,即矩陣元素取相反數    
    CMatrix operator +(const CMatrix& m) const;//重載二元運算符+,即兩個矩陣求和
    CMatrix operator -(const CMatrix& m) const;//重載二元運算符-,即兩個矩陣求差    
    CMatrix operator *(const CMatrix& m) const;//重載二元運算符*,即兩個矩陣求積
    CMatrix operator *(const double& x) const;//重載二元運算符*,即矩陣與數相乘
    CMatrix operator *(CVector& v) const;//重載二元運算符*,即矩陣與向量相乘
    CMatrix operator /(const double& x ) const;//重載二元運算符/,即矩陣與數相除
    CMatrix operator ^(const int& t) const;//重載二元運算符^,即矩陣求t次冪
    void operator -=(const CMatrix& m);    //重載二元運算符-=,即自減運算
    void operator +=(const CMatrix& m);//重載二元運算符-=,即自加運算
    void operator *=(const double x);//重載二元運算符*=,即自乘運算(矩陣)

    CMatrix Tranpose() const;//求矩陣的轉置的函數
    CMatrix Invert() const;//求矩陣的逆的函數
    void Zeros();//矩陣歸零化,將當前矩陣的所有元素歸零
    void Unit();//矩陣單元化,將當前矩陣轉換為單位矩陣
    int AddRow(double* pe, unsigned int nr);//在矩陣的nr行位置插入一行,數據存放地址為pe,返回行標
    int AddColumn(double* pe, unsigned int nc);//在矩陣的nc列位置插入一列,數據存放地址為pe,返回列標 
    double* DeleteRow(unsigned int nr);//刪除矩陣nr行,返回該行元素值(臨時存儲地址)
    double* DeleteColumn(unsigned int nc);//刪除矩陣nc列,返回該列元素值(臨時存儲地址)

    friend class CLinearEquation;//聲明友元類CLinearEquation
    friend class CVector;//聲明友元類CVector

    
//析構函數,釋放存儲矩陣元素的空間
    virtual ~CMatrix(void);
    
//void printMatrix()const;
private:
    
double* pElement;//元素存儲區
    unsigned int nRow;//行數
    unsigned int nColumn;//列數
    void destroy();
    
void alloc(unsigned int n=0);//分配空間
protected:
    
virtual void InitFromFile(const char* pFileName);//從文件中初始化
public:
    
virtual int MatOut(const char* pFileName); //將矩陣以pFileName為文件名進行文件輸出
}
;
矩陣類實現
#include "matrix.h"

class CVector;
//線性方程組類
/*
**author:phinecos
**date:7/17/2008
*/

class CLinearEquation :public CMatrix
{
public:
    CLinearEquation(
void);
    CLinearEquation(CMatrix
& coe, CVector& con );//通過系數矩陣和常數向量創建線性方程組
    CLinearEquation(const char* pFile);//通過數據文件創建線性方程組
    CLinearEquation(unsigned int ne, unsigned int nv);//通過方程個數和未知數創建線性方程組
    ~CLinearEquation(void);

public:
    
int AddVariable(double *pcoe, unsigned int pc);//為方程組增加一個變量,其系數矩陣增加一列,pcoe為增加系數地址,pc為增加系數列的序號,為最前面,默認追加在尾部,成功返回未知數個數,否則為-1
    int AddEquation(double *pcoe, double con, unsigned int pr);//為方程組增加一個方程,其系數矩陣增加一行,pcoe為增加系數地址,con為增加方程的常數項,pr為增加系數行的序號,為最前面,默認追加在尾部,成功返回方程個數,否則為-1
    int DeleteVariable(unsigned int pc);//刪除方程組中第pc個未知數,并刪除其系數列
    int DeleteEquation(unsigned int pr);//刪除方程組中第pr個方程
    CVector Gaussian();//高斯消元法解線性方程組
    int CLinearEquation::MatOut(const char* pFileName);
public:
    CVector
* Constant;//方程組的常數向量,新增成員
    
//方程組系數矩陣,繼承成員,不可見
    
//方程組中方程個數,繼承成員,矩陣行數,不可見
    
//方程組中未知數個數,繼承成員,矩陣列數,不可見
private:
    
void InsertConstant(double num,int pos);
    
void DeleteConstant(unsigned int pos);
    
void InitFromFile(const char* pFileName);
}
;
線性方程組類實現
測試程序
0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()