矩阵及其基本算法

合集下载

《有趣的矩阵:看得懂又好看的线性代数》笔记

《有趣的矩阵:看得懂又好看的线性代数》笔记

《有趣的矩阵:看得懂又好看的线性代数》阅读随笔目录一、矩阵基础篇 (2)1.1 矩阵的定义与性质 (3)1.2 矩阵的运算 (4)1.3 矩阵的秩与行列式 (5)二、矩阵应用篇 (6)2.1 矩阵在物理学中的应用 (7)2.2 矩阵在计算机科学中的应用 (8)2.2.1 图像处理 (9)2.2.2 机器学习 (10)2.3 矩阵在经济学中的应用 (11)三、矩阵可视化篇 (13)3.1 利用图表展示矩阵 (14)3.2 利用动画展示矩阵运算 (15)3.3 利用交互式工具探索矩阵世界 (16)四、矩阵挑战篇 (17)4.1 解决矩阵方程 (19)4.2 矩阵分解技巧 (20)4.3 矩阵的逆与特征值问题 (21)五、矩阵与艺术篇 (22)5.1 矩阵在艺术设计中的应用 (23)5.2 矩阵与音乐的关系 (25)5.3 矩阵与建筑的空间结构 (26)六、矩阵学习策略篇 (27)6.1 如何选择合适的矩阵学习材料 (28)6.2 矩阵学习的有效方法 (29)6.3 如何克服矩阵学习的障碍 (31)七、矩阵趣味问答篇 (32)7.1 矩阵相关的趣味问题解答 (33)7.2 矩阵在日常生活中的实际应用 (33)7.3 矩阵的趣味故事与趣闻 (34)八、结语 (35)8.1 阅读随笔总结 (36)8.2 对矩阵未来的展望 (38)一、矩阵基础篇在《有趣的矩阵:看得懂又好看的线性代数》作者以一种通俗易懂的方式向我们介绍了矩阵的基本概念和性质。

矩阵是线性代数中的一个重要概念,它可以用来表示线性方程组、线性变换等。

我们将学习矩阵的基本运算,包括加法、减法、乘法等,并通过实际的例子来理解这些运算的含义。

我们来学习矩阵的基本运算,矩阵是由m行n列的数排成的矩形阵列,其中m和n分别表示矩阵的行数和列数。

每个元素用一个位于其行列索引处的小写字母表示,例如矩阵A [13 4]中,A[1][2]表示矩阵A的第一行第三列的元素,即3。

矩阵乘法数量积_概述说明以及解释

矩阵乘法数量积_概述说明以及解释

矩阵乘法数量积概述说明以及解释1. 引言1.1 概述矩阵乘法数量积是线性代数中的一个重要概念,它用于计算两个矩阵之间的相乘结果。

通过对每个元素按一定规则进行乘法和求和运算,数量积可以得到一个新的矩阵。

这种操作在各个学科领域有广泛的应用,包括数学、物理和工程等。

1.2 文章结构本文将从以下几个方面对矩阵乘法数量积进行详细说明。

首先,我们将介绍矩阵乘法的基本概念,包括定义和性质。

然后,我们将解释矩阵乘法数量积的原理,并说明其实现过程。

接下来,我们将探讨矩阵乘法数量积在不同领域中的应用情况,包括数学、物理和工程等方面。

此外,本文还将介绍一些常见的算法和计算优化技巧,以提高矩阵乘法数量积的效率。

最后,在结论部分,我们会总结以上内容,并展望未来矩阵乘法数量积的发展趋势并给出相关建议。

1.3 目的本文旨在深入探讨矩阵乘法数量积的概念和原理,以及其在不同领域中的应用。

通过介绍常用的算法和计算优化技巧,我们希望读者能够了解到如何提高矩阵乘法数量积的计算效率。

同时,本文还旨在为未来研究者提供一些思考点,并展望矩阵乘法数量积在未来可能的发展方向。

2. 矩阵乘法数量积的定义与原理2.1 矩阵乘法的基本概念矩阵乘法是指将两个矩阵相乘得到一个新的矩阵的操作。

如果矩阵A是一个m 行n列的矩阵,而矩阵B是一个n行p列的矩阵,那么它们的乘积C将是一个m行p列的矩阵。

在此过程中,对应位置上两个矩阵元素的相乘并求和得到结果矩阵C中对应位置上的元素。

2.2 数量积的定义与性质数量积也被称为内积、点积或标量积。

对于两个向量a和b,它们之间的数量积表示为a∙b。

数量积满足以下性质:- 若a和b平行(夹角为0度),则a∙b = |a|*|b|- 若a和b垂直(夹角为90度),则a∙b = 0- 对任意向量c和标量k,有(kc)∙(kc) = k^2 * (c∙c)2.3 矩阵乘法数量积的原理解释矩阵乘法数量积可视作将两个向量进行投影、放缩和重新组合的过程。

矩阵计算与分析幂迭代法和逆幂迭代法

矩阵计算与分析幂迭代法和逆幂迭代法

矩阵计算与分析幂迭代法和逆幂迭代法矩阵计算是数学中的一个重要分支,它涉及到对矩阵进行各种运算和分析。

其中,幂迭代法和逆幂迭代法是解决矩阵特征值和特征向量的常用方法。

本文将详细介绍这两种方法的原理、步骤及其在实际问题中的应用,并对它们进行比较与分析。

一、幂迭代法幂迭代法是一种通过不断迭代矩阵的幂次来逼近矩阵的最大特征值和对应的特征向量的方法。

其基本思想是利用矩阵的特征向量的方向不变性,将任意一个非零向量经过多次矩阵乘法后逼近于特征向量。

具体步骤如下:1.选取一个初始向量x0,通常为一个随机向量。

2. 计算xn+1 = Axn,其中A为给定矩阵。

3. 归一化xn+1,即xn+1 = xn+1/,xn+1,其中,xn+1,表示向量的模。

4. 如果迭代次数n足够大,那么xn将逼近A的最大特征值对应的特征向量。

幂迭代法的收敛性与初始向量的选择有很大关系,通常情况下,初始向量选取得越接近最大特征值所对应的特征向量,迭代次数越少,精度越高。

幂迭代法主要用于计算矩阵的最大特征值和对应的特征向量。

在实际问题中,矩阵的最大特征值和特征向量常常具有重要的物理意义,比如在结构力学中,最大特征值代表了结构的自然频率,对应的特征向量则代表了结构的振型。

因此,幂迭代法在结构优化、振动分析等领域有广泛的应用。

逆幂迭代法是幂迭代法的一个改进方法,它主要用于计算矩阵的最小特征值和对应的特征向量。

逆幂迭代法的基本思想是通过不断迭代矩阵的逆幂次来逼近矩阵的最小特征值和对应的特征向量。

具体步骤如下:1.选取一个初始向量x0,通常为一个随机向量。

2. 计算xn+1 = A^-1xn,其中A为给定矩阵,A^-1为A的逆矩阵。

3. 归一化xn+1,即xn+1 = xn+1/,xn+1,其中,xn+1,表示向量的模。

4. 如果迭代次数n足够大,那么xn将逼近A的最小特征值对应的特征向量。

逆幂迭代法的收敛性与初始向量的选择有很大关系,与幂迭代法相同,初始向量选取得越接近最小特征值所对应的特征向量,迭代次数越少,精度越高。

矩阵乘法数量积

矩阵乘法数量积

矩阵乘法数量积全文共四篇示例,供读者参考第一篇示例:矩阵乘法是线性代数中的一个重要概念,是在计算机科学、数学、物理学、工程学等领域中经常用到的一种运算。

矩阵乘法的数量积是指将两个矩阵相乘得到的结果矩阵,它的计算规则是矩阵的行与列进行对应元素相乘并相加得到新矩阵的对应元素。

矩阵乘法数量积的定义如下:设有两个矩阵A和B,分别为m×n 和n×p的矩阵,其中矩阵A的列数与矩阵B的行数相等,即n相等,则它们的乘积矩阵C为m×p的矩阵,其中矩阵C的元素c_ij等于矩阵A的第i行元素与矩阵B的第j列元素对应位置相乘后相加的结果,即c_ij = a_i1 * b_1j + a_i2 * b_2j + ... + a_in * b_nj。

在计算中,可以采用两种常见的方法来计算矩阵乘法数量积,一种是传统的矩阵相乘方法,另一种是使用Strassen算法进行矩阵乘法计算。

下面我们将具体介绍这两种方法的计算过程和优缺点。

传统的矩阵相乘方法是通过遍历矩阵的行和列元素进行计算,具体流程如下:1. 初始化结果矩阵C为m×p的零矩阵。

2. 遍历矩阵A的行i和矩阵B的列j,计算矩阵C的元素c_ij。

3. 根据矩阵乘法的定义,计算矩阵C中的元素c_ij。

4. 重复步骤2和步骤3,直到遍历完所有行和列元素。

5. 返回最终的结果矩阵C。

传统的矩阵相乘方法的时间复杂度为O(mnp),即矩阵A为m×n,矩阵B为n×p时,时间复杂度为O(mnp),这种方法的计算速度较慢,尤其是在大规模矩阵相乘时效率很低。

1. 初始化结果矩阵C为m×p的零矩阵。

2. 将矩阵A和矩阵B分别分解成四个子矩阵,即A11、A12、A21、A22和B11、B12、B21、B22。

3. 计算临时矩阵M1到M7,其中M1 = (A11 + A22) × (B11 + B22),M2 = (A21 + A22) × B11,M3 = A11 × (B12 - B22),M4 =A22 × (B21 - B11),M5 = (A11 + A12) × B22,M6 = (A21 - A11) × (B11 + B12),M7 = (A12 - A22) × (B21 + B22)。

矩阵分析课件精品PPT

矩阵分析课件精品PPT

典型例题解析
例1
求矩阵A的特征值和特征向量,其中A=[[3,1],[2,2]]。
例2
已知矩阵A的特征值为λ1=2, λ2=3,对应的特征向量为 α1=[1,1]T, α2=[1,-1]T,求矩阵A。
解析
首先求出矩阵A的特征多项式为f(λ)=(λ-1)(λ-4),解得特 征值为λ1=1, λ2=4。然后分别将特征值代入(A-λI)x=0求 解对应的特征向量。
应用举例
通过克拉默法则求解二元、三元线性方程组,并验证解的正确性 。
典型例题解析
01
例题1
求解三元线性方程组,通过高斯消元 法得到增广矩阵的上三角形式,然后 回代求解未知数列向量x。
02
03
例题2
例题3
判断四元线性方程组的解的情况,通 过计算系数矩阵的行列式|A|以及替换 列向量后的矩阵行列式|Ai|,根据克 拉默法则判断方程组的解是唯一解、 无解还是无穷多解。
特殊类型矩阵介绍
01
02
03
04
方阵
行数和列数相等的矩阵称为方 阵。
零矩阵
所有元素都是零的矩阵称为零 矩阵。
对角矩阵
除主对角线外的元素全为零的 方阵称为对角矩阵。
单位矩阵
主对角线上的元素全为1,其 余元素全为0的方阵称为单位 矩阵。
矩阵性质总结
Байду номын сангаас
01
结合律
02
交换律
03 分配律
04
数乘结合律
数乘分配律
• 对于每一个特征值m,求出齐次线性方程组(A-mI)x=0的一个基础解系,则A对应于特征值m的全部特征向量(其中I是与A 同阶的单位矩阵)。
特征值和特征向量求解方法

矩阵及其基本算法

矩阵及其基本算法

矩阵及其基本算法矩阵是数学和计算机科学中常见的概念,它是由一组数按照固定的行数和列数排列成的矩形阵列。

矩阵在各个领域中具有重要的应用,如代数学、线性方程组的求解、图像处理、数据分析等。

本文将介绍矩阵的基本概念和常见的算法。

1.矩阵的基本概念:-矩阵的行数和列数被称为矩阵的维度。

一个mxn的矩阵有m行n列。

-矩阵元素指的是矩阵中的每个个体数值,可以用a[i][j]表示,其中i表示行数,j表示列数。

-方阵是指行数和列数相等的矩阵,即nxn的矩阵。

-零矩阵是所有元素都是0的矩阵,通常用0表示。

-单位矩阵是一个方阵,其对角线上的元素都是1,其余元素都是0。

2.矩阵的运算:-矩阵的加法:两个相同大小的矩阵相加,即对应位置的元素相加。

-矩阵的减法:两个相同大小的矩阵相减,即对应位置的元素相减。

-矩阵的乘法:两个矩阵相乘,要求左操作数矩阵的列数等于右操作数矩阵的行数。

结果矩阵的行数等于左操作数矩阵的行数,列数等于右操作数矩阵的列数。

乘法运算是对应位置的元素相乘再求和的过程。

-矩阵的转置:将mxn的矩阵转置为nxm的矩阵,即原矩阵的行列互换。

3.矩阵的基本算法:-矩阵的求逆:对于一个可逆矩阵A,存在一个矩阵B,使得A与B的乘积等于单位矩阵。

求逆矩阵的常用方法是高斯-约当消元法。

-矩阵的行列式:行列式是一个与方阵相关的标量,它可以通过递归计算进行求解。

行列式的值可以用于判断矩阵是否可逆,以及计算矩阵的特征值等。

-矩阵的特征值和特征向量:特征值是一个标量,特征向量是与特征值相关联的非零向量。

特征值和特征向量在矩阵的特征值分解、主成分分析等领域有着重要应用。

4.应用实例:-线性方程组的求解:线性方程组可以表示为一个矩阵乘以一个向量的形式,通过求解矩阵的逆,可以得到方程组的解。

-图像处理:图像可以表示为一个像素矩阵,通过对矩阵的像素进行运算,可以实现图像的旋转、缩放、滤波等操作。

-数据分析:矩阵在数据分析中广泛应用,如矩阵分解、矩阵乘法、矩阵求逆等操作可以用于数据降维、主要成分分析、聚类分析等。

第二章 矩阵变换和计算

第二章 矩阵变换和计算

·第二章 矩阵变换和计算一、内容提要本章以矩阵的各种分解变换为主要内容,介绍数值线性代数中的两个基本问题:线性方程组的求解和特征系统的计算,属于算法中的直接法。

基本思想为将计算复杂的一般矩阵分解为较容易计算的三角形矩阵. 要求掌握Gauss (列主元)消去法、矩阵的(带列主元的)LU 分解、平方根法、追赶法、条件数与误差分析、QR 分解、Shur 分解、Jordan 分解和奇异值分解.(一) 矩阵的三角分解及其应用 1.矩阵的三角分解及其应用考虑一个n 阶线性方程组b Ax =的求解,当系数矩阵具有如下三种特殊形状:对角矩阵D ,下三角矩阵L 和上三角矩阵U ,这时方程的求解将会变得简单. ⎪⎪⎪⎪⎪⎭⎫⎝⎛=n d dd D21, ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=nnn n l l l l l l L21222111, ⎪⎪⎪⎪⎪⎭⎫⎝⎛=nn n n u u u u u u U22212111. 对于b Dx =,可得解为i i i d b x /=,n i ,,2,1 =.对于b Lx =,可得解为1111/l b x =,ii i k k iki i l x lb x /)(11∑-=-=,n i ,,3,2 =.对于b Ux =,可得解为nn n n l b x /=,ii ni k k iki i l x lb x /)(1∑+=-=,1,,2,1 --=n n i .虽然对角矩阵的计算最为简单,但是过于特殊,任意非奇异矩阵并不都能对角化,因此较为普适的方法是对矩阵进行三角分解.1).Gauss 消去法只通过一系列的初等行变换将增广矩阵)|(b A 化成上三角矩阵)|(c U ,然后通过回代求与b Ax =同解的上三角方程组c Ux =的解.其中第k 步消元过程中,在第1-k 步得到的矩阵)1(-k A 的主对角元素)1(-k kka 称为主元.从)1(-k A 的第j 行减去第k 行的倍数)1()1(--=k kkk jkjk a a l (n j k ≤<)称为行乘数(子).2).矩阵A 的LU 分解对于n 阶方阵A ,如果存在n 阶单位下三角矩阵L 和n 阶上三角矩阵U ,使得LU A =, 则称其为矩阵A 的LU 分解,也称为Doolittle 分解.Gauss 消去法对应的矩阵形式即为LU 分解, 其中L 为所有行乘子组成的单位下三角矩阵, U 为Gauss 消去法结束后得到的上三角矩阵. 原方程组b Ax =分解为两个三角形方程组⎩⎨⎧==yUx b Ly .3).矩阵LU 分解的的存在和唯一性如果n 阶矩阵A 的各阶顺序主子式),,2,1(n k k =D 均不为零, 则必有单位下三角矩阵L 和上三角矩阵U ,使得LU A =, 而且L 和U 是唯一存在的.4).Gauss 列主元消去法矩阵每一列主对角元以下(含主对角元)的元素中, 绝对值最大的数称为列主元. 为避免小主元作除数、或0作分母,在消元过程中,每一步都按列选主元的Guass 消去法称为Gauss 列主元消去法.由于选取列主元使得每一个行乘子均为模不超过1的数,因此它避免了出现大的行乘子而引起的有效数字的损失.5).带列主元的LU 分解Gauss 列主元消去法对应的矩阵形式即为带列主元的LU 分解,选主元的过程即为矩阵的行置换. 因此, 对任意n 阶矩阵A ,均存在置换矩阵P 、单位下三角矩阵L 和上三角矩阵U ,使得LU PA =.由于选列主元的方式不唯一, 因此置换矩阵P 也是不唯一的. 原方程组b Ax =两边同时乘以矩阵P 得到Pb PAx =, 再分解为两个三角形方程组⎩⎨⎧==y Ux PbLy .5).平方根法(对称矩阵的Cholesky 分解)对任意n 阶对称正定矩阵A ,均存在下三角矩阵L 使T LL A =,称其为对称正定矩阵A 的Cholesky 分解. 进一步地, 如果规定L 的对角元为正数,则L 是唯一确定的.原方程组b Ax =分解为两个三角形方程组⎩⎨⎧==y x L bLy T .利用矩阵乘法规则和L 的下三角结构可得21112⎪⎪⎭⎫ ⎝⎛-=∑-=j k jkjj jjla l , jj j k jkikij ij l l la l /11⎪⎪⎭⎫⎝⎛-=∑-=, i=j +1, j +2,…,n , j =1,2,…,n . 计算次序为nn n n l l l l l l l ,,,,,,,,,2322212111 .由于jj jk a l ≤,k =1,2,…,j .因此在分解过程中L 的元素的数量级不会增长,故平方根法通常是数值稳定的,不必选主元.6).求解三对角矩阵的追赶法 对于三对角矩阵⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=---n nn n n b a c b a c b a c b 11122211A , 它的LU 分解可以得到两个只有两条对角元素非零的三角形矩阵⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=--n n n nu d u d u d u l l l 11221132,1111U L . 其中⎪⎪⎩⎪⎪⎨⎧=-====-==--n i c l b u n i u a l b u n i c d i i i i i i i i i ,,3,2,,,3,2,/1,,2,1,1111计算次序是n n u l u l u l u →→→→→→→ 33221. 原方程组b Ax =分解为两个三角形方程组⎩⎨⎧==y Ux b Ly . 计算公式为n i y l b y b y i i i i ,,3,2,,111 =-==-,.1,,2,1,/)(,/1 --=-==+n n i u x c y x u y x i i i i i nn n该计算公式称为求解三对角形方程组的追赶法.当A 严格对角占优时,方程组b Ax =可用追赶法求解, 解存在唯一且数值稳定.7).矩阵的条件数设A 为非奇异矩阵,⋅为矩阵的算子范数,称1)(cond -=A A A 为矩阵A 的条件数.矩阵的条件数是线性方程组b Ax =, 当A 或b 的元素发生微小变化,引起方程组解的变化的定量描述, 因此是刻画矩阵和方程组性态的量. 条件数越大, 矩阵和方程组越为病态, 反之越小为良态.常用的矩阵条件数为∞-条件数: ∞-∞∞=1)(cond AA A ,1-条件数: 1111)(cond -=AAA ,2-条件数: )()()(cond mi n max 2122A A A A AAA HHλλ==-.矩阵的条件数具有如下的性质: (1) 1)(cond ≥A ;(2) )(cond )(cond 1-=A A ;(3) )(cond )(cond A A =α,0≠α,R ∈α;(4) 如果U 为正交矩阵,则1)(cond 2=U ,)(cond )(cond )(cond 222A AU UA ==.一般情况下,系数矩阵和右端项的扰动对解的影响为定理 2.5 设b Ax =,A 为非奇异矩阵,b 为非零向量且A 和b 均有扰动.若A 的扰动δA 非常小,使得11<-A A δ,则)()(cond 1)(cond bδb AδA AA A A xδx +-≤δ.关于近似解的余量与它的相对误差间的关系有定理2.6 设b Ax =,A 为非奇异矩阵,b 为非零向量,则方程组近似解x ~的事后估计式为bx A b A xx x bx A b A ~)cond(~~)cond(1-≤-≤-.其中称x A b ~-为近似解x ~的余量,简称余量。

矩阵特征值求解

矩阵特征值求解

矩阵特征值求解的分值算法12组1.1矩阵计算的基本问题(1)求解线性方程组的问题•即给定一个n阶非奇异矩阵A和n维向量b,求一个n维向量X,使得Ax =b (1. 1. 1 )(2)线性最小二乘问题,即给定一个mx n阶矩阵A和m维向量b ,求一个n维向量X,使得|AX -b| =min{ | Ay -比严R n} (1.1.2 )(3)矩阵的特征问题,即给定一个n阶实(复)矩阵A,求它的部分或全部特征值以及对应的特征向量,也就是求解方程(1. 1. 3 )一对解(4 X),其中R(C), x- R n(C n),即A为矩阵A的特征值,X为矩阵Ax = ZxA的属于特征值A的特征向量。

在工程上,矩阵的特征值具有广泛的应用,如大型桥梁或建筑物的振动问题:机械和机件的振动问题;飞机机翼的颤振问题;无线电电子学及光学系统的电磁振动问题;调节系统的自振问题以及声学和超声学系统的振动问题•又如天文、地震、信息系统、经济学中的一些问题都与矩阵的特征值问题密切相关。

在科学上,计算流体力学、统计计算、量子力学、化学工程和网络排队的马尔可夫链模拟等实际问题,最后也都要归结为矩阵的特征值问题.由于特征值问题在许多科学和工程领域中具有广泛的应用,因此对矩阵的特征值问题的求解理论研究算法的开发软件的制作等是当今计算数学和科学与工程计算研究领域的重大课题,国际上这方面的研究工作十分活跃。

1.2矩阵的特征值问题研究现状及算法概述对一个nxn阶实(复)矩阵A,它的特征值问题,即求方程(1.1.3)式的非平凡解,是数值线性代数的一个中心问题•这一问题的内在非线性给计算特征值带来许多计算问题•为了求(1.1.3)式中的A ,—个简单的想法就是显式地求解特征方程det (A 一几I)二0 (121 ) 除非对于个别的特殊矩阵,由于特征方程的系数不能够用稳定的数值方法由行列式的计算来求得,既使能精确计算出特征方程的系数,在有限精度下,其特征多项式f〃)二det(A-ZJ)的根可能对多项式的系数非常敏感能•因此,这个方法只在理论上是有意义的,实际计算中对一般矩阵是不可行的数 _ . _ . 人较大,则行列式det (A -几I)的计算量将非常大;其次,根据•首先,右矩即AfbJ阳数大于四的多项式求根不存在一种通用的方法,基于上述原Galois理论对于次因,人们只能寻求其它途径•因此,如何有效地!精确地求解’矩阵特征值问题,就成为数值线性代数领域的一个中心问题.目前,求解矩阵特征值问题的方法有两大类:一类称为变换方法,另一类称为向量迭代方法•变换方法是直接对原矩阵进行处理,通过一系列相似变换,使之变换成 一个易于求解特征值的形式,如Jacobi 算法,Givens 算法,QR 算法等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
矩阵及其基本算法
计13 刘汝佳
矩阵及其基本算法
矩阵的表示 矩阵的基本运算 小结和应用举例
一、矩阵的表示
矩阵在形式上最直接的表示是一个二维数组,但 是在一些特殊的场合中,我们需要引入一些特殊 的方法来表示一些特殊的矩阵。在本节中,大家 还将了解到以下几种表示方法: 还将了解到以下几种表示方法:
三角矩阵的压缩表示法 稀疏矩阵的三元组表示法 稀疏矩阵的十字链表表示法
稀疏矩阵的十字链表表示(3) 稀疏矩阵的十字链表表示
结点类型如下定义:
struct Tnode { int row, col; int value; Tnode *left, *right, *up, *down; }; row,col分别为该非零元素的位置,value为它的值。 row,col分别为该非零元素的位置,value为它的值。 left,right,up,down分别为指向四个方向的后继元素。 left,right,up,down分别为指向四个方向的后继元素。
稀疏矩阵的十字链表表示(2) 稀疏矩阵的十字链表表示
为了加强同一行和同一列之间元素的联系,我 们把每一行分别做成一个链表,把每一列也分 别做成一个链表。 通过对链表的遍历,我们可以很方便的按顺序 访问到某一特定行或列的所有元素。插入和删 除操作也很方便。 这样,我们了建立一种十字型的链表结构,每 个结点有上,下,左,右四个指针和自身的位 置坐标,大小共7 置坐标,大小共7个域。
第三种情况和三元组表示下的加法很类似,只 是下标pA,pB换成了指针。 是下标pA,pB换成了指针。 同样的,需要注意两个非零元素之和可能等于 零,从而不能插入到结果中
矩阵的转置(1) 矩阵的转置
矩阵的转置
在二维数组中,转置可以通过简单的坐标变换得到 在三元组表示法中,在对每个元素进行坐标变换后 还需要进行一次排序,以维持元素位置的有序性。 在十字链表表示法中,我们不仅需要对每个结点进 行坐标变换,还需要交换行链表和列链表,以及更 改每个结点四个方向的指针,实现比较麻烦。
三角矩阵的压缩表示(2) 三角矩阵的压缩表示
我们从上到下,从左到右地储存各个元 素,如下图:
a11 a12 a13 a14 a a a 22 23 24 a33 a34 a44
i −1 l =1
a1 a2 a3 a4 a a a 5 6 7 a8 a9 a10
矩阵乘法(1) 矩阵乘法
矩阵乘法
在二维数组表示中,最简单的方法就是对每个元素用循环累 加出结果,二重循环枚举每个元素,共三层循环。 在三元组表示中,对于A中的一个元素A 我们只需要访问B 在三元组表示中,对于A中的一个元素Aij,我们只需要访问B 中第j行所有元素B 中第j行所有元素Bjk,把每个乘积Aij ×Bjk加到Cik中。这样, 把每个乘积A 加到C 每遍历A的一行元素,就计算出了C 每遍历A的一行元素,就计算出了C的一行元素。和快速转置 算法类似,我们可以事先算出B 算法类似,我们可以事先算出B的每行元素的下标范围,再用 一个循环依次考虑A 一个循环依次考虑A中的每个元素就可以了。 十字链表在本质上是三元组的链式存储,所以乘法和三元组 差别不大,但是实现却麻烦得多。该方法的好处在于,把中 间结果A 间结果Aij ×Bjk 加到Cik时,如果Cik并不存在,就需要对矩阵 加到C 时,如果C 进行插入操作。在十字链表上的插入操作比三元组快得多。
矩阵表示方法小结
矩阵的表示方法和应用是分不开的。 我们衡量一种表示方法的优劣,需要从不同的 角度进行分析。 适用范围 空间需求量 基本操作的时间消耗 实现的难易程度 以上几种方法都在某些方面表现良好而其他方 面不够理想,因此我们需要根据实际需要的侧 重点不同,选择合适的表示方法
二、矩阵的基本运算以通过下列代码来实现: void MatrixT(TMatrix A) { TMatrix B; B.m=A.n; B.n=A.m; for(int i=1;i<=A.n;i++) for(int j=1;j<=A.m;j++) B.numbers[j][i]=A.numbers[i][j]; return B; }
对代码稍作修改,我们可以对矩阵进行旋转和镜像变换生成8 对代码稍作修改,我们可以对矩阵进行旋转和镜像变换生成8个新矩阵
矩阵的转置(3) 矩阵的转置
前面提到过,三元组表示法中,矩阵的转置可 以通过坐标变换后排序来实现。 不过,我们通常使用的是另外一种方法。这种 方法不用排序,而速度也更快。 快速转置算法:直接写到正确的位置。
矩阵的线性运算
矩阵的数乘: 矩阵的数乘: B=kA
在任何一种表示法中,我们都可以通过遍历所有 元素的方法完成数乘运算。
矩阵的加法: 矩阵的加法: C=A+B
在二维数组表示法中,我们可以通过二重循环来 进行矩阵加法 在稀疏矩阵中,注意到结果中的非零元素所在的 位置必对应A 位置必对应A或B中的一个非零元素,所以加法运 算不会在A 算不会在A和B中原非零元素之外的其他位置上生 成新的非零元素。
矩阵的线性运算(2) 矩阵的线性运算
考虑三元组表示法中的矩阵加法。由于 都需要按顺序储存各个元素,我们应当 按顺序对每个A 按顺序对每个A或B中非零的位置做加法。 下面有一个例子:
1 0 0 0 0 2 1 0 2 0 5 0 + 3 0 0 = 3 5 0 0 2 0 0 7 0 0 9 0
矩阵的线性运算(3) 矩阵的线性运算
我们记录两个矩阵A 我们记录两个矩阵A,B的当前非零元素 序号pA和pB。 序号pA和pB。为了保证结果的有序性, 我们每次比较这两个当前元素的位置。
如果A的当前位置靠前,则把A的第pA个元素加入 如果A的当前位置靠前,则把A的第pA个元素加入 矩阵C 并使pA=pA+1 矩阵C,并使pA=pA+1 如果B的当前位置靠前,则把B的第pB个元素加入 如果B的当前位置靠前,则把B的第pB个元素加入 矩阵C 并使pB=pB+1 矩阵C,并使pB=pB+1 如果当前位置相同,则先使pA=pA+1, pB=pB+1。 如果当前位置相同,则先使pA=pA+1, pB=pB+1。 如果A的第pA- 个元素和B的第pB如果A的第pA-1个元素和B的第pB-1个元素的和不为 零,则把它加到矩阵C 零,则把它加到矩阵C中。
稀疏矩阵的十字链表表示(4) 稀疏矩阵的十字链表表示
为了方便的找到每一个包含非零元素的 行和列,我们把所有行串在一起,组成 一个行链表,把所有列也串在一起,组 成一个列链表。像这样:
struct TRow { int RowNo; TNode * firstnode; }; struct TCol { int ColNo; TNode * firstnode; };
稀疏矩阵的三元组表示法
显然,表示稀疏矩阵最直接的方法就是 仅记录下非零元素的个数L和这L 仅记录下非零元素的个数L和这L个元素 的位置(row,col)和大小(value), 的位置(row,col)和大小(value),即下面这 个结构:
struct TMatrix2 { int l; int row[MAXL],col[MAXL],value[MAXL]; };
稀疏矩阵的十字链表表示(1) 稀疏矩阵的十字链表表示
三元组表示法比较好的解决了稀疏矩阵的空间存储问 题,却忽视了稀疏矩阵可能进行了一些基本操作。 考虑两个稀疏矩阵A 考虑两个稀疏矩阵A和B相加的问题。对于运算结果矩 阵C来说,可能会因为正负抵消而产生出很多新的零元 素和非零元素,导致三元组需要进行一些插入和删除 操作。当这些操作很频繁的时候,程序的速度会明显 变慢。 在某些特定情况下,我们需要对元素进行检索,由于 三元组的元素之间联系并不紧密,所以检索很不方便。
矩阵的判重 矩阵的线性运算 矩阵的转置 矩阵乘法
矩阵的判重
在二维数组表示法中,我们可以用一个二重循 环判断两个矩阵是否相等。 在三元组表示方法中,我们如果保证非零元素 是按照从上到下,从左到右的顺序储存的,则 可以用一个循环直接判断。但如果不能保证, 则需要二重循环。因此在未加说明的情况下, 三元组表示法均需要按顺序保存各个元素。 在十字链表表示方法中,我们需要依次遍历每 一个非零行(或者列)。
首先,求出每一列第一非零元素转置后的序号。这一步只需 要统计一下每列的非零元素的个数就可以了。 由于每一列的元素在转置以后的先后次序保持不变,每个元 素就可以直接写到该行的下一个空闲位置。
矩阵的转置(4) 矩阵的转置
请看下面的例子:
0 3 0 5 1 0 2 0 6 0 0 1 0 0 0 0 4 0 0 2 3 0 5 6 0 4 0 0 0 0 0 0 各列非零元素个数为:2,3,0,1 各列第一个元素序号:0,2,5,5 3 5 1 6 4 2 0 1 2 3 4 5
Aij前面的数的个数为: (n − l + 1) + ( j − 1) ∑ 计算得: 计算得:
1 k = (2n − i + 2)(i − 1) + j 2
稀疏矩阵
在前面的二维数组表示法中,我们表示 一个N*M的矩阵需要N*M个内存单元。 一个N*M的矩阵需要N*M个内存单元。 如果已知矩阵中存在着大量的0 如果已知矩阵中存在着大量的0元素,那 么这种表示方法是很浪费空间的。 由于非零元素的个数L 由于非零元素的个数L十分有限,我们可 以只储存下这L 以只储存下这L个元素的位置和大小,占 用的空间便会少得多。
普通的方法需要进行8次乘法。
矩阵乘法(3) 矩阵乘法
Strassen的新方法如下: Strassen的新方法如下:
矩阵的线性运算(4) 矩阵的线性运算
十字链表表示法下的加法可以一行行的做。即:
相关文档
最新文档