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

📄 矩阵计算.cpp

📁 这是一些c++例程
💻 CPP
字号:
// 矩阵计算.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

class Matrix
{
public:
	int x,y;								//x,y分别表示矩阵的列数与行数
	double** element;							//我们用二维数组来代表矩阵
	Matrix(int a=1,int b=1);
	~Matrix();
	
	Matrix& operator=(Matrix&);					//成员函数,重载运算符"=",进行变量赋值
	Matrix& operator+(Matrix&); 					//成员函数,重载运算符"+",进行两矩阵加法
	Matrix& operator-(Matrix&); 					//成员函数,重载运算符"-",进行两矩阵减法
	Matrix& operator*(Matrix&);					//成员函数,重载运算符"*",进行两矩阵乘法
	
	void PrintOut();							//成员函数,用于输出矩阵
};

Matrix::Matrix(int a,int b)							//构造函数
{
	x=a;y=b;								//长宽定义
	element=new double*[y];						//首先分配一维(宽)
	for(int i=0;i<y;i++)
		element[i]=new double[x];					//分配二维(长)
}

Matrix::~Matrix()								//析构函数
{
	for(int i=0;i<y;i++)							//析构第二维
		delete[] element[i];
	delete[] element;							//析构第一维
}

Matrix& Matrix::operator =(Matrix& oth)				//重载等号
{
	if(x==oth.x && y==oth.y)						//首先判断矩阵构造是否相同
		for(int i=0;i<y;i++)
			for(int j=0;j<x;j++)
				element[i][j]=oth.element[i][j];		//相同则分别赋值
	else
		printf("Matrix do not match!\n");				//不同则输出错误信息
	return *this;
}

Matrix& Matrix::operator +(Matrix& oth)				//重载加号
{
	if(x==oth.x && y==oth.y)						//首先判断矩阵构造是否相同
	{
		Matrix *res=new Matrix(x,y);				//生成一个新矩阵,用来计算矩阵和。
		for(int i=0;i<y;i++)
			for(int j=0;j<x;j++)
				res->element[i][j]=element[i][j]+oth.element[i][j];  		//进行加法运算
		return *res;
	}
	else
	{
		printf("Matrix do not match!\n");				//如果构造不同,则输出错误信息
		return *this;
	}
}

Matrix& Matrix::operator -(Matrix& oth)				//重载减号,方法与加号类似
{
	if(x==oth.x && y==oth.y)						//首先判断矩阵构造是否相同
	{
		Matrix *res=new Matrix(x,y);				//生成一个新矩阵,用来计算矩阵差。
		for(int i=0;i<y;i++)
			for(int j=0;j<x;j++)
				res->element[i][j]=element[i][j]-oth.element[i][j];  		//进行减法运算
		return *res;
	}
	else
	{
		printf("Matrix do not match!\n");				//如果构造不同,则输出错误信息
		return *this;
	}
}

Matrix& Matrix::operator*(Matrix& oth)					//重载乘号
{
	if(x==oth.y)								//首先进行条件的判断
	{
		Matrix *res=new Matrix(oth.x,y);				//若允许,产生新矩阵,用来计算矩阵积
		for(int i=0;i<y;i++)
			for(int j=0;j<oth.x;j++)
			{
				res->element[i][j]=0;			//计算乘积
				for(int k=0;k<x;k++)
					res->element[i][j]+=element[i][k]*oth.element[k][j];
			}
		return *res;
	}
	else									//如果不允许,则输出错误信息
	{
		printf("Matrix do not match!\n");
		return *this;
	}
}

void Matrix::PrintOut()							//输出矩阵
{
	for(int i=0;i<y;i++)
	{
		for(int j=0;j<x;j++)
			printf("%.3f\x09",element[i][j]);			//按顺序输出各元素
		printf("\n");
	}
     	printf("\n");
}

void main()
{
	Matrix A(3,2),B(3,3),C(3,2);					//声明矩阵变量,并给出对应的构造。

	//给出各矩阵元素值
	A.element[0][0]=1;
	A.element[0][1]=2;
	A.element[0][2]=3;
	A.element[1][0]=4;
	A.element[1][1]=5;
	A.element[1][2]=6;
	
	B.element[0][0]=-1;
	B.element[0][1]=1;
	B.element[0][2]=5;
	B.element[1][0]=-3;
	B.element[1][1]=2;
	B.element[1][2]=0;
	B.element[2][0]=2;
	B.element[2][1]=0;
	B.element[2][2]=4;
	
	C.element[0][0]=0;
	C.element[0][1]=3;
	C.element[0][2]=2;
	C.element[1][0]=2;
	C.element[1][1]=3;
	C.element[1][2]=0;
	
	//输出矩阵
	printf("A\n");
	A.PrintOut();
	printf("B\n");
	B.PrintOut();
	printf("C\n");
	C.PrintOut();

	//进行加法、减法,乘法运算,并输出结果
	A=A+C;
	printf("A:=A+C\n");
	A.PrintOut();

	C=A-C;
	printf("C:=A-C\n");
	C.PrintOut();

	A=C*B;
	printf("A:=C*B\n");
	A.PrintOut();
}

⌨️ 快捷键说明

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