⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 Matrix_and_Vector packetMatrix_and_Vector packetMatrix_and_Vector packetMatrix_and_Vector packetMatr
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include"iostream.h"
#include"math.h"
#include"stdio.h"
#include"iomanip.h"
#include"fstream.h"

//这是一个向量类
#define Max_Dimension	50	 //向量最大的维数,也是默认情况下向量的维数			
class	Vector					
{
private:
	double	Element[Max_Dimension+1];
	int Dimension;
public:
	Vector();
	Vector(int Dimension);
	~Vector();

	Vector operator +(Vector	X2);
	Vector operator -(Vector	X2);
	Vector operator *(double 	X2);
	Vector operator /(double 	X2);
	double Get_Element(int i);		//获取第i个元素的值
	void Set_Element(int i,double Element_Known);		//获取第i个元素的值

	int Get_Dimension();
};
//不带参数的构造函数
//把元素全置0
Vector::Vector()
{
	Dimension=Max_Dimension;
	for(int i=1;i<=Dimension;i++)
		this->Element[i]=0;
}
//带参数的构造函数
Vector::Vector(int Dimension_You_Want)
{
	Dimension=Dimension_You_Want;
	for(int i=1;i<=Dimension;i++)
		this->Element[i]=0;
}
Vector::~Vector()
{
}
int Vector::Get_Dimension()
{
	return Dimension;
}
double Vector::Get_Element(int i)		//获取第i个元素的值
{
	if(i>=1&&i<=Dimension)
		return this->Element[i];
	else
	{
		cout<<"获取向量元素数组越界!"<<endl;
		cout<<"i="<<i<<endl;
		return 0;
	}
}
void Vector::Set_Element(int i,double Element_Known)		//设置第i个元素的值
{	
	if(i>=1&&i<=Dimension)
		this->Element[i]=Element_Known;
	else
		cout<<"设置向量元素数组越界!"<<endl;


}
//针对向量的操作符重载
Vector Vector:: operator -(Vector	X2)
{
	Vector	X3(Dimension);
	if(X2.Get_Dimension()==Dimension)
	{
		for(int i=1;i<=Dimension;i++)
			X3.Set_Element(i,this->Element[i]-X2.Get_Element(i));
	}
	else
		cout<<"两向量维数不同,不能相减!"<<endl;
	return X3;
}
Vector Vector:: operator +(Vector	X2)
{

	Vector	X3(Dimension);
	if(X2.Get_Dimension()==Dimension)
	{
		for(int i=1;i<=Dimension;i++)
			X3.Set_Element(i,this->Element[i]+X2.Get_Element(i));
	}
	else
		cout<<"两向量维数不同,不能相加!"<<endl;
	return X3;
}
//这个函数实现向量除以实数
Vector Vector:: operator /(double	X2)
{
	Vector	X3(Dimension);
	for(int i=1;i<=Dimension;i++)
	X3.Set_Element(i,Element[i]/X2);
	return X3;
}
//这个函数实现向量乘以实数
Vector Vector:: operator *(double	X2)
{
	Vector	X3(Dimension);
	for(int i=1;i<=Dimension;i++)
	X3.Set_Element(i,Element[i]*X2);
	return X3;
}

//这个函数返回 T(X1)*X2
double T_Multiply(Vector X1,Vector X2)
{
	double sum=0;
	if(X1.Get_Dimension()==X2.Get_Dimension())
	{
		for(int i=1;i<=X1.Get_Dimension();i++)
			sum+=X1.Get_Element(i)*X2.Get_Element(i);
	}
	else
		cout<<"两向量维数不同,不能相乘!"<<endl;
	return sum;
}

//------------------------------------向量类完----------------------------------------------------------------

//------------------------------------矩阵类----------------------------------------------------------
#define Max_Row_Dimension  50			//矩阵的最大行数,也是默认情况下的行数
#define Max_Line_Dimension 50			//矩阵的最大列数,也是默认情况下的列数
class Matrix
{
private:
	double Element[Max_Row_Dimension+1][Max_Line_Dimension+1];			
	int	Row_Dimension,Line_Dimension;		
public:
	Matrix();
	Matrix(int Row_Dimension_You_Want,int Line_Dimension_You_Want);	//带参数的构造函数,其参数是想声明的矩阵的行列数	
	~Matrix();							//析构函数

	Vector operator *(Vector	X);		//operator overload Matrix * Vector
	Vector Get_Row(int i);					//获取第i行,以向量形式返回
	void   Set_Row(int i,Vector X);			//设置第i行为X的值
	Vector Get_Line(int j);					//获取第j列,以向量形式返回
	void   Set_Line(int j,Vector X);			//设置第j列为X的值

	//写这两个函数的主要目的是为了编写获取代数余子式的函数,从而编写求伴随矩阵的函数	
	void   Delete_Row(int i);				//删除第i行,第i行之后的元素统一前移一行
	void   Delete_Line(int j);				//删除第j列,第j列之后的元素统一前移一列
	


	void Set_Element(int i,int j,double Element_Known);	//设置第i行,第j列的元素
	double Get_Element(int i,int j);	//获取第i行,第j列的元素	
	int Get_Row_Dimension();	// 获取矩阵的行数
	int Get_Line_Dimension();	// 获取矩阵的列数
	
	Matrix operator *(double M);	//实现矩阵与数的相乘
	Matrix operator /(double M);	//实现矩阵与数的相除

	Matrix operator *(Matrix M2);	//实现矩阵与矩阵的相乘
	Matrix operator +(Matrix M2);	//实现矩阵与矩阵的相乘
	Matrix operator -(Matrix M2);	//实现矩阵与矩阵的相乘
	

};
//不带参数的构造函数
//把元素全置0
Matrix::Matrix()
{
	Row_Dimension=Max_Row_Dimension;
	Line_Dimension=Max_Line_Dimension;
	for(int i=0;i<=Row_Dimension;i++)
		for(int j=0;j<=Line_Dimension;j++)
			Element[i][j]=0;
}
Matrix::Matrix(int Row_Dimension_You_Want,int Line_Dimension_You_Want)
{

	Row_Dimension=Row_Dimension_You_Want;
	Line_Dimension=Line_Dimension_You_Want;
	for(int i=0;i<=Row_Dimension;i++)
		for(int j=0;j<=Line_Dimension;j++)
			Element[j][i]=0;
}
Matrix::~Matrix()
{
}


//实现矩阵与向量的相乘
Vector Matrix::operator *(Vector	X)
{	

	Vector	X2(this->Row_Dimension);
	if(this->Line_Dimension==X.Get_Dimension())
	{
		for(int i=1;i<=this->Row_Dimension;i++)
		{
			double sum=0;
			for(int j=1;j<=Line_Dimension;j++)
			{
				sum+=Get_Element(i,j)*X.Get_Element(j);
			}
			X2.Set_Element(i,sum);
		}
	}
	else
		cout<<"矩阵列数和向量维数不相等,不能相乘!"<<endl;
	return X2;
}


void Matrix::Set_Element(int i,int j,double Element_Known)
{
	if(i>=1&&i<=Row_Dimension&&j>=1&&j<=Line_Dimension)
		this->Element[i][j]=Element_Known;
	else
	{
		cout<<"设置数组元素越界!"<<endl;
		cout<<"i="<<i<<" j="<<j<<endl;
	}
}
double Matrix::Get_Element(int i,int j)
{
	if(i>=1&&i<=Row_Dimension&&j>=1&&j<=Line_Dimension)
		return this->Element[i][j];
	else
	{
		cout<<"获取数组元素越界!"<<endl;
		cout<<"i="<<i<<" j="<<j<<endl;
		return 0;
	}
}

int Matrix::Get_Line_Dimension()	// 获取矩阵的列数
{
	return this->Line_Dimension;

}
int Matrix::Get_Row_Dimension()	// 获取矩阵的列数
{
	return this->Row_Dimension;
}

Matrix Matrix::operator *(double M)	//实现矩阵与数的相乘
{
	Matrix M2(this->Row_Dimension,this->Line_Dimension);
	for(int i=1;i<=this->Row_Dimension;i++)
		for(int j=1;j<=this->Line_Dimension;j++)
			M2.Set_Element(i,j,(this->Element[i][j])*M); 
	return M2;
}
Matrix Matrix::operator /(double M)	//实现矩阵与数的相除
{
	Matrix M2(this->Row_Dimension,this->Line_Dimension);
	for(int i=1;i<=this->Row_Dimension;i++)
		for(int j=1;j<=this->Line_Dimension;j++)
			M2.Set_Element(i,j,(this->Element[i][j])/M);
	return M2;
}
Matrix Matrix::operator *(Matrix M2)	//实现矩阵与矩阵的相乘
{
	Matrix M3(this->Row_Dimension,M2.Get_Line_Dimension());	
	if(this->Line_Dimension==M2.Get_Row_Dimension())		//判断相乘条件
	{
		for(int i=1;i<=M3.Get_Row_Dimension();i++)
		{
			for(int j=1;j<=M3.Get_Line_Dimension();j++)
			{
				M3.Set_Element(i,j,T_Multiply(this->Get_Row(i),M2.Get_Line(j)));						///???????????????????????+
			}
		}
	}
	else
	{
		cout<<"该矩阵列数与被乘矩阵行数不相等,不能相乘!"<<endl;
		cout<<"该矩阵列数="<<this->Line_Dimension<<" "<<"被乘矩阵行数="<<M2.Get_Row_Dimension()<<endl;
	}
	return M3;	

}
Matrix Matrix::operator +(Matrix M2)	//实现矩阵与矩阵的相加
{
	Matrix M3(this->Row_Dimension,this->Line_Dimension);	
	if(this->Row_Dimension==M2.Get_Row_Dimension()&&this->Line_Dimension==M2.Get_Line_Dimension())		//判断相加条件
	{
		for(int i=1;i<=M3.Get_Row_Dimension();i++)
		{
			for(int j=1;j<=M3.Get_Line_Dimension();j++)
			{
				M3.Set_Element(i,j,this->Element[i][j]+M2.Get_Element(i,j));						
			}
		}
	}
	else
		cout<<"该矩阵行列数与被乘矩阵行列数不相等,不能相加!"<<endl;	
	return M3;	

}
Matrix Matrix::operator -(Matrix M2)	//实现矩阵与矩阵的相减
{
	Matrix M3(this->Row_Dimension,this->Line_Dimension);	
	//判断相减条件

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -