离散数学之图的矩阵表示及基本运算
- 格式:doc
- 大小:33.00 KB
- 文档页数:5
矩阵的基本概念与运算矩阵是线性代数学科中的基础工具,这是因为矩阵可以用来表示线性变换和线性方程组。
对于矩阵的基本概念与运算,我们需要从以下几个方面来分析。
一、矩阵的基本概念1、定义与记法矩阵是一个由m行n列元素排成的矩形阵列,常用大写字母表示,如A、B、C等。
其中,阵列中的m表示矩阵的行数,n则表示矩阵的列数。
因此,一个m行n列的矩阵可以写成:$A_{m×n}=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\vdots&\vdots&\ddots&\vdots\\a_{m1}&a_{m2}& \cdots&a_{mn}\\\end{bmatrix}$其中,$a_{ij}$ 表示矩阵 A 中第 i 行第 j 列的元素。
2、矩阵的类型按照元素类型可以将矩阵分为实矩阵、复矩阵和布尔矩阵等。
按照矩阵的形状,矩阵可以分为方矩阵、长方矩阵和列矩阵等。
二、矩阵的基本运算1、矩阵的加法假设有两个矩阵 $A_{m×n}$ 和 $B_{m×n}$,它们对应位置相加的结果记作 $C=A+B$,则:$C_{ij}=A_{ij}+B_{ij}$2、矩阵的数乘假设有一个矩阵 $A_{m×n}$ 和一个数 $\lambda$,则它们的乘积记作 $B=\lambda A$,则:$B_{ij}=\lambda A_{ij}$3、矩阵的乘法假设有两个矩阵 $A_{m×n}$ 和 $B_{n×p}$,它们的乘积记作$C=AB$,则:$C_{ij}=\sum_{k=1}^n A_{ik}B_{kj}$矩阵乘法需要满足结合律,但不满足交换律,也就是说,$AB$ 与 $BA$ 不一定相等。
中国矿业大学软件开发基础实践报告姓名: xxs 学号: bbaa0edf 专业:计算机科学与技术指导教师: sjc 职称: js(仅供徐海计算机参考哈哈哈哈)2012 年 6 月 20 徐州目录第一章实验概述 (3)1.1实验目的 (3)1.2实验内容 (3)1.3实验环境 (3)第二章实验原理和实现过程 (4)2.1实验原理 (4)2.1.1建立图的邻接矩阵,判断图是否连通 (4)2.1.2 计算任意两个结点间的距离 (4)2.1.3对不连通的图输出其各个连通支 (5)2.2实验过程(算法描述) (5)2.2.1 程序整体思路 (5)2.2.2具体算法流程 (5)第三章实验数据及结果分析 (7)3.1建立图的邻接矩阵并判断图是否连通的功能测试及结果分析 (7)3.1.1输入无向图的边 (7)3.1.2建立图的连接矩阵 (8)3.2其他功能的功能测试和结果分析 (9)3.2.1计算节点间的距离 (9)3.2.2判断图的连通性 (9)3.2.3输出图的连通支 (10)3.2.4退出系统 (10)第四章实验收获和心得体会 (11)4.1实验收获 (11)4.2心得体会 (12)第五章实验源程序清单 (13)5.1程序代码 (13)第一章实验概述1.1 实验目的理解图论的基本概念,图的矩阵表示,图的连通性,图的遍历,以及求图的连通支方法。
通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算,培养逻辑思维;通过实验提高学生编写实验报告、总结实验结果的能力,提高理论联系实际的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。
1.2 实验内容以偶对的形式输入一个无向简单图的边,建立该图的邻接矩阵,判断图是否连通(A),并计算任意两个结点间的距离(B),对不连通的图输出其各个连通支(C)。
注意:题目类型分为A,B,C三类,其中A为基本题,完成A类题目可达到设计的基本要求,其他均为加分题,并按字母顺序分数增加越高。
实验四图的矩阵表示及基本运算实验目的学习图在计算机中的矩阵表示,并能利用课堂所学知识进行出度和入度的计算。
实验内容与要求根据输入的整数对,输出一个图形的邻接矩阵。
并求出各结点的出度和入度。
实验准备图可以用多种方式来表示,其中邻接矩阵是一种较简单的方式。
复习关于邻接矩阵的描述。
明确一下内容:1.如何使用邻接矩阵表示图。
2.利用图的邻接矩阵求结点的出度和入度的方法。
#include <iostream.h>int** g(int n){int** a, i, j;a = new int* [n];//分配指针数组for(i=0; i<n; i++)a[i] = new int[n];//分配每个指针所指向的数组for(i=0; i<n; i++)for(j=0; j<n; j++) a[i][j]=0;return a;}struct M{int n;int isOrient;int **ele;};class Operators{public:void CreateMatrix2(M *x, int n, int isOrient);void Input(M *x);void Show(M *x);int deg_out(M *a, int i);int deg_in(M *a, int i);void Maccessibility(M *a, M *Ma);void MatrixMultiple(M *a, M *b, M *m);void MatrixAdd(M *a, M *b);};void Operators::CreateMatrix2(M *x, int n, int isOrient){x->n=n;x->isOrient=isOrient;x->ele=g(x->n);}void Operators::CreateMatrix(M *x){int n, isOrient;cout<<"Matrix's n=";cin>>n;cout<<"Is the graph oriented? 1=yes, 0=no :";cin>>isOrient;CreateMatrix2(x, n, isOrient);}void Operators::Input(M *x){int i, j;while(1){cout<<"Input the edge's start-point and end-point, -1 is to finish inputing:";cin>>i>>j;if(i==-1 || j==-1) break;x->ele[i][j]=1;if(!x->isOrient) x->ele[j][i]=1;}}{int i, j;if(x->isOrient)cout<<"The oriented matrix: "<<endl;elsecout<<"The no-oriented matrix: "<<endl;for(i=0;i<x->n;i++){for(j=0;j<x->n;j++) cout<<x->ele[i][j]<<" ";cout<<endl;}}int Operators::deg_out(M *x, int i){int deg=0;for(int j=0; j<x->n; j++)if(x->ele[i][j]) deg++;return deg;}int Operators::deg_in(M *x, int i){int deg=0;for(int j=0; j<x->n; j++)if(x->ele[j][i]) deg++;return deg;}void Operators::MatrixMultiple(M *a, M *b, M *temp){int i,j,k;for(i=0;i<a->n;i++)for(j=0;j<b->n;j++)for(k=0;k<a->n;k++)temp->ele[i][j]+=a->ele[i][k]*b->ele[k][j];for(i=0;i<a->n;i++)for(j=0;j<b->n;j++)b->ele[i][j]=temp->ele[i][j];}void Operators::MatrixAdd(M *a, M *b){int i,j;for(i=0;i<a->n;i++)for(j=0;j<b->n;j++)a->ele[i][j]+=b->ele[i][j];}void Operators::Maccessibility(M *a, M *Ma){int i,j;M p, temp;CreateMatrix2(&p, a->n, a->isOrient);CreateMatrix2(&temp, a->n, a->isOrient);MatrixAdd(&p, a);MatrixAdd(Ma, a);for(i=0; i<=a->n; i++){MatrixMultiple(a, &p, &temp);MatrixAdd(Ma, &p);}Show(&p);Show(Ma);for(i=0;i<Ma->n;i++)for(j=0;j<Ma->n;j++)if(Ma->ele[i][j]) Ma->ele[i][j]=1;}void main(){Operators o;M x, y;o.CreateMatrix(&x);o.CreateMatrix2(&y, x.n, x.isOrient);o.Input(&x);o.Show(&x);int i;cout<<endl<<"The deg-out for the points"<<endl;for(i=0;i<x.n;i++)cout<<i<<":"<<o.deg_out(&x,i)<<" ";cout<<endl<<"The deg-in for the points"<<endl;for(i=0;i<x.n;i++)cout<<i<<":"<<o.deg_in(&x,i)<<" ";cout<<endl;o.Maccessibility(&x, &y);o.Show(&y);}。
离散数学矩阵运算规律和应用矩阵是离散数学中的一个重要概念,广泛应用于各个领域。
矩阵的运算规律是研究矩阵性质和解决实际问题的基础。
本文将从定义、运算规律和应用三个方面详细介绍离散数学中矩阵运算规律的相关知识。
一、矩阵的定义矩阵是由m行n列元素排列成的矩形阵列,记作A=[aij],其中1≤i≤m,1≤j≤n。
矩阵的每个元素aij称为矩阵A的第i行第j列元素。
二、矩阵的运算规律1. 加法运算:矩阵相加时,要求两个矩阵的行数和列数相等。
对应位置的元素相加,得到新的矩阵。
2. 乘法运算:矩阵相乘时,要求第一个矩阵的列数等于第二个矩阵的行数。
按照阿基米德定律,逐个计算新矩阵的元素。
3. 数乘运算:将矩阵中的每个元素都乘以一个标量,得到新的矩阵。
4. 转置运算:将矩阵的行列互换,得到新的矩阵。
即A的转置记作AT。
5. 逆运算:若矩阵A存在逆矩阵A-1,满足AA-1=A-1A=I,其中I为单位矩阵。
只有方阵才存在逆矩阵。
三、矩阵运算的应用1. 线性方程组求解:可以利用矩阵运算求解线性方程组。
将线性方程组的系数矩阵和常数矩阵进行运算,得到方程组的解。
2. 网络图论:网络图论中的节点之间的连接可以用矩阵表示,利用矩阵运算可以分析网络的连通性、最短路径等问题。
3. 数据处理:在数据处理中,经常需要对数据进行矩阵运算,例如矩阵的加权平均、数据的降维等。
4. 图像处理:图像可以看作是一个二维矩阵,图像处理中常用的滤波器、旋转等操作都可以通过矩阵运算实现。
5. 人工智能:在神经网络和机器学习中,矩阵运算被广泛应用于模型的训练和预测过程中。
综上所述,离散数学中的矩阵运算规律和应用广泛且重要。
正确理解和应用矩阵运算规律,对于解决实际问题具有重要的意义。
无论是在学术研究还是工程实践中,对矩阵运算规律的熟练掌握和灵活应用都是必不可少的。
通过不断学习和实践,我们可以进一步提高对离散数学矩阵运算规律的理解和运用水平,为实际问题的解决提供更有效的方法和思路。