矩阵转置
矩阵转置的几何意义
矩阵转置的几何意义
矩阵转置是指将矩阵中的元素进行调整,使得原来的行变成列,原来的列变成行,这种运算符号形式上表现为:
对于 m×n 的矩阵A,其转置矩阵表示为 AT,其中 AT 是 n×m 的矩阵。
矩阵转置的几何意义体现在向量空间中,因为矩阵可以看作是向量的集合,而矩阵的转置运算可以看作是这些向量之间的运算,比如:当 m=n(即矩阵A为方阵)的时候,矩阵A中的每一列向量都是矩阵A的一个列向量,矩阵转置的几何意义则是将原矩阵中的每一行向量转换为矩阵A的一个行向量。
因此,可以将矩阵转置的几何意义理解为将矩阵A中的行向量转换为列向量,而原矩阵A的每一行向量都可以表示为其转置矩阵AT的一个列向量。
即:
AT = (a1,a2,…,an)T
其中a1, a2, …,an为原矩阵A的每一行向量。
综上,可以得出矩阵转置的几何意义:矩阵转置是将矩阵A中的行向量转换为列向量,行列向量之间的转换。
- 1 -。
矩阵的转置和伴随矩阵的计算
矩阵的转置和伴随矩阵的计算矩阵在数学中具有广泛的应用,是线性代数中重要的概念之一。
其中,矩阵的转置和伴随矩阵也是运用比较广泛的一种概念。
矩阵的转置是指将一个矩阵中的行和列交换得到的新矩阵。
如果矩阵A的大小为m*n,那么A的转置矩阵AT的大小就是n*m。
其实际操作就是将原矩阵沿着主对角线镜像,并交换行和列。
例如,如果有一个矩阵A=[1 2 3; 4 5 6],转置矩阵AT就是:AT=[1 4; 2 5; 3 6]。
矩阵的转置有很多应用,其中一个是用于矩阵的乘法。
对于矩阵乘法AB,如果A的大小为m*n,B的大小为n*p,那么乘积C=AB的大小为m*p。
在矩阵乘法中,我们可以看到在乘法运算中,如果A的列数等于B的行数,它们才是可乘的。
但是,在列向量和行向量的乘法中,则没有限制,因为列向量可以看做是一个m*1的矩阵,而行向量则可以看做是一个1*n的矩阵。
另外,在一些数学公式的推导中,矩阵的转置也会被用到。
例如,在求导中,矩阵的转置可以用来得到一个向量的Jacobi矩阵,从而计算偏导数。
伴随矩阵则是指一个矩阵的伴随矩阵的每个元素是该矩阵的代数余子式所组成的矩阵,并且该矩阵转置后得到的矩阵就是原矩阵的逆矩阵。
具体而言,如果矩阵A的大小为n*n,它的代数余子式为Aij,则伴随矩阵的大小也为n*n,其中第i行第j列的元素为Aij的代数余子式。
伴随矩阵常常用于求解线性方程组的解。
对于一个线性方程组Ax=B,如果A存在逆矩阵,那么其解就是x=A^-1*B,而A的逆矩阵就是其伴随矩阵除以该矩阵行列式的结果,即A^-1=adj(A)/det(A)。
因此,我们需要先求出矩阵A的伴随矩阵和行列式,才能得到A的逆矩阵。
此外,伴随矩阵还可以用于矩阵的对角化。
对于一个n*n的矩阵A,如果它满足A的伴随矩阵的特征值都为0,那么A就是可对角化的。
如果A可对角化,我们可以将其表示成一个对角矩阵D和一个可逆矩阵P的乘积形式,即A=PDP^-1,其中P和P^-1的列向量为A的特征向量,D的对角元素为A的特征值。
线性代数:转置矩阵
线性代数:转置矩阵
上⼀篇已经定义了转置矩阵,A的转置矩阵记作T(A),并且知道det(A) = det(A转置)。
1、矩阵乘积的转置
矩阵A、B,有T(AB) = T(B)*T(A)。
矩阵A1、A2...An, T(A1*A2*...An) = (T(An))*(T(An-1))*...*(T(A1))。
2、转置矩阵的逆
A的逆矩阵,记作I(A),单位矩阵记作E。
A*I(A) = E, T(A*I(A)) = T(I(A)) *T(A) = E,T(I(A)*A) = T(A)*T(I(A)) = E,这说明,A转置的逆矩阵为A逆的转置。
3、转置矩阵的加法
T(A+B) = T(A) +T(B)。
4、向量的转置
向量我们⼀般都当做列向量来处理,列向量的转置就是⾏向量了。
如果把向量当做矩阵,那么列向量是nx1矩阵,⾏向量是1xn矩阵,如果X是⾏向量,Y是列向量,那么X*Y是⼀个1x1矩阵,也可以当做⼀个标量来对待。
因此,以前所讲的向量点乘,X.Y = T(X)*Y = T(Y)*X。
假设A是线性变换矩阵,AX.Y = T(AX)*Y = T(X)*T(A)*Y = T(X)*(T(A)*Y) = X.(T(A)Y)。
矩阵转置c语言
矩阵转置c语言摘要:1.矩阵转置的概念与意义2.矩阵转置的C 语言实现3.示例代码及运行结果4.总结与展望正文:矩阵转置是线性代数中的一个重要概念,它可以将矩阵从一种表示形式转换为另一种表示形式。
矩阵转置在实际应用中有着广泛的应用,例如在图像处理、信号处理等领域。
本文将介绍矩阵转置的概念以及如何在C 语言中实现矩阵转置。
首先,我们来了解一下矩阵转置的概念。
设矩阵A 是一个m×n 矩阵,矩阵转置是将矩阵A 的行和列互换位置,得到一个新的矩阵A",使得A"是一个n×m 矩阵。
矩阵转置并不改变矩阵的行数和列数,但改变了元素的排列顺序。
接下来,我们将介绍如何在C 语言中实现矩阵转置。
为了实现矩阵转置,我们需要编写一个函数来完成这个任务。
首先,定义一个结构体来表示一个矩阵,如下所示:```c#include <stdio.h>#include <stdlib.h>typedef struct {int row;int col;double *data;} Matrix;```接着,编写一个函数`MatrixTranspose`来实现矩阵转置。
这个函数接收一个`Matrix`类型的参数,返回一个指向转置后矩阵的指针。
具体实现如下:```cMatrix *MatrixTranspose(Matrix *A) {Matrix *A_transpose = (Matrix *)malloc(sizeof(Matrix));A_transpose->row = A->col;A_transpose->col = A->row;A_transpose->data = (double *)calloc(A_transpose->row *A_transpose->col, sizeof(double));for (int i = 0; i < A->row; i++) {for (int j = 0; j < A->col; j++) {A_transpose->data[j * A_transpose->row + i] =A->data[i * A->col + j];}}return A_transpose;}```为了验证我们的实现是否正确,我们可以编写一个测试程序。
线性代数第一章矩阵的转置
矩阵转置具有一些重要的性质,如$(A+B)^T=A^T+B^T$、$(AB)^T=B^TA^T$、$(A^T)^T=A$等,这 些性质在基变换过程中具有重要作用。
实例分析:利用矩阵转置进行向量空间基变换
实例描述
基变换过程
结果分析
考虑二维平面上的一个向量空间,其 原基为$begin{bmatrix} 1 0 end{bmatrix}$和$begin{bmatrix} 0 1 end{bmatrix}$,现需要将其变换为 新基$begin{bmatrix} 1 1 end{bmatrix}$和$begin{bmatrix} -1 1 end{bmatrix}$。
线性代数第一章矩阵的转置
• 矩阵转置基本概念 • 矩阵转置与线性变换 • 特殊类型矩阵的转置 • 矩阵转置在方程组求解中应用 • 矩阵转置在向量空间中应用 • 总结与回顾
01
矩阵转置基本概念
矩阵转置定义
01
将矩阵的行和列互换得到的新矩 阵称为原矩阵的转置矩阵。
02
对于任意矩阵A,其转置矩阵记为 AT或A',满足AT=A'。
关键知识点总结
01
02
03
04
$(kA)^T = kA^T$,其中$k$ 是常数
$(AB)^T = B^TA^T$
对称矩阵:若矩阵$A$满足 $A^T = A$,则称$A$为对称
矩阵。
反对称矩阵:若矩阵$A$满足 $A^T = -A$,则称$A$为反
对称矩阵。
常见误区提示
误区一
认为只有方阵才能进行转 置操作。实际上,任何形 状的矩阵都可以进行转置。
误区二
错误地认为$(AB)^T = A^TB^T$。正确的公式是 $(AB)^T = B^TA^T$。
转置矩阵的符号
转置矩阵的符号【实用版】目录1.引言2.转置矩阵的定义和表示方法3.转置矩阵的性质4.转置矩阵的应用5.结论正文1.引言在数学和物理学中,矩阵是一种重要的数据结构,用于表示线性方程组、线性变换以及向量空间等概念。
矩阵的转置是矩阵操作中常见的一种,它涉及到矩阵的行和列的交换。
本文将介绍转置矩阵的符号、性质以及应用。
2.转置矩阵的定义和表示方法设矩阵 A 是一个 m×n 矩阵,其中 m 表示矩阵的行数,n 表示矩阵的列数。
矩阵 A 的转置记作 A^T,是一个 n×m 矩阵。
在 A^T 中,原矩阵 A 的行变为列,原矩阵 A 的列变为行。
具体表示如下:A = | a11 a12 a13 || a21 a22 a23 || a31 a32 a33 |A^T = | a11 a21 a31 || a12 a22 a32 || a13 a23 a33 |3.转置矩阵的性质转置矩阵具有以下几个性质:(1) 对于任意矩阵 A,其转置矩阵 A^T 的行数等于原矩阵 A 的列数,列数等于原矩阵 A 的行数。
(2) 矩阵 A 与其转置矩阵 A^T 的乘积等于单位矩阵:AA^T = A^T A = I,其中 I 表示单位矩阵。
(3) 矩阵 A 的逆矩阵与其转置矩阵互为逆矩阵:A^(-1) =(A^T)^(-1)。
(4) 转置矩阵的行列式等于原矩阵的行列式的相反数:|A^T| = -|A|。
4.转置矩阵的应用转置矩阵在实际应用中具有广泛的应用,例如:(1) 在线性代数中,求解线性方程组时,通过高斯消元法可以将增广矩阵转化为行最简矩阵,再通过转置操作可以得到列最简矩阵,从而简化计算过程。
(2) 在机器学习和数据挖掘领域,特征值分解是常用的方法。
在计算特征值分解时,矩阵的转置操作可以简化计算过程。
(3) 在计算机图形学中,矩阵的转置操作常用于将三维坐标系下的点投影到二维坐标系。
5.结论矩阵的转置操作是矩阵操作中常见的一种,它具有重要的性质和应用。
矩阵转置
02-矩阵的转置
(2)且 HH T = E.
证明(1) ∵ H T = (E − 2 XX )T T ( ) = E T − 2 XX T T
= E − 2XX T =H
∴ H 是对称矩阵 .
(2) HH T = H 2
(2 ) ( A + B )T = A T + B T ;
(3 ) (λ A )T = λ A T ; (4 ) ( AB )T = B T A T .
例 已知
A = ⎜⎛ 2 ⎝1
0 3
− 1 ⎟⎞ , 2⎠
⎜⎛ 1 B = ⎜4
⎜⎝ 2
7 2 0
− 1 ⎟⎞ 3 ⎟,
求
( AB )T .
1 ⎟⎠
所以 C 为对称矩阵.
= AT + A = C,
( ) 设 B = A − A T , 则 B T = A − A T T
所以 B 为反对称矩阵.
= AT − A = −B,
命题得证.
显然
A = A + AT + A − AT = C + B .
2
2
22
作业
习题二 2;8.
( ) = E − 2 XX T 2 = E − 4 XX T + 4(XX T )(XX T ) ( ) = E − 4 XX T + 4 X X T X X T
= E − 4 XX T + 4 XX T
= E.
例 证明任一 n 阶矩阵 A 都可表示成 对称阵与反对称阵之和.
( ) 证明 设 C = A + A T 则 C T = A + A T T
矩阵转置的概念
矩阵转置的概念矩阵转置的概念矩阵是数学中一个重要的概念,它是由若干行和若干列组成的二维数组。
在实际应用中,经常需要对矩阵进行一些操作,如矩阵加法、矩阵乘法等。
其中一个常见的操作就是矩阵转置。
一、什么是矩阵转置?矩阵转置是指将一个m×n的矩阵A的行和列互换,得到一个n×m的新矩阵B,即B[i][j] = A[j][i]。
例如,对于以下3×2的矩阵A:1 23 45 6其转置后得到2×3的新矩阵B:1 3 52 4 6二、为什么需要进行矩阵转置?1. 简化运算:在某些情况下,对于某个问题来说,使用转置后的矩阵可以更加方便地进行运算。
2. 程序实现:在程序实现中,有些算法需要使用到转置后的矩阵。
三、如何计算矩阵转置?对于一个m×n的矩阵A,其转置后得到一个n×m的新矩阵B。
可以通过以下方式计算矩阵转置:1. 遍历原矩阵:对于原矩阵A中的每一个元素A[i][j],将其赋值给新矩阵B中的B[j][i]。
2. 使用公式计算:对于原矩阵A中的每一个元素A[i][j],可以使用公式B[j][i] = A[i][j]计算转置后的新矩阵B。
四、矩阵转置的性质1. 转置后的转置等于原矩阵:即(A^T)^T = A。
2. 转置后的逆矩阵等于原矩阵的逆矩阵的转置:即(A^-1)^T =(A^T)^-1。
3. 线性变换下的转置:对于线性变换T(x),其在标准正交基下对应着一个m×n的矩阵A。
则其转置在标准正交基下对应着一个n×m的矩阵A^T,且有(T(x))^T = T(x^T)。
五、应用实例1. 线性代数中常用到的向量内积可以通过向量转为列向量和行向量,再进行点乘得到。
2. 在图像处理中,常使用卷积运算。
而卷积运算可以看做是将一个滤波器(卷积核)在图像上滑动,将每个位置上的像素值与滤波器对应位置上的系数相乘并求和得到新的像素值。
而这个滤波器可以看做是一个矩阵,因此需要对其进行转置后再进行卷积运算。
x的转置矩阵
x的转置矩阵矩阵是线性代数中的重要概念之一,而转置矩阵则是矩阵运算中的一种基本操作。
在本文中,我们将探讨转置矩阵的定义、性质以及其在数学和实际问题中的应用。
我们来定义什么是转置矩阵。
给定一个m×n的矩阵A,它的转置矩阵记作A^T,其中A的行变为A^T的列,A的列变为A^T的行。
换句话说,如果A的第i行第j列的元素是a_ij,那么A^T的第j行第i列的元素就是a_ij。
可以看出,转置矩阵的行数和列数与原矩阵相反。
转置矩阵具有以下几个重要的性质:1. (A^T)^T = A这个性质表明对一个矩阵进行两次转置操作,得到的结果与原矩阵相同。
也就是说,转置矩阵的转置矩阵等于原矩阵本身。
2. (A + B)^T = A^T + B^T这个性质表明两个矩阵的和的转置等于这两个矩阵的转置之和。
也就是说,矩阵和的转置等于每个矩阵的转置之和。
3. (kA)^T = kA^T这个性质表明一个矩阵乘以一个标量的转置等于这个标量乘以矩阵的转置。
也就是说,标量乘以矩阵的转置等于矩阵的转置乘以这个标量。
4. (AB)^T = B^T A^T这个性质表明两个矩阵的乘积的转置等于这两个矩阵的转置之积的逆序。
也就是说,矩阵乘积的转置等于每个矩阵的转置之积的逆序。
接下来,我们来讨论转置矩阵在数学和实际问题中的应用。
在数学中,转置矩阵广泛应用于线性代数的各个领域。
例如,在矩阵的运算中,转置矩阵常常用于求解线性方程组、求解矩阵的逆以及计算特征值和特征向量等。
此外,在矩阵的表示和计算中,转置矩阵也可以用于简化问题、转化算式和求解复杂的运算。
在实际问题中,转置矩阵也有广泛的应用。
例如,在数据分析和机器学习中,矩阵常用于存储和处理大量的数据。
通过对数据矩阵进行转置,可以改变数据的排列顺序,从而更方便地进行数据分析和模型建立。
此外,在图像处理和信号处理中,转置矩阵也常常用于图像旋转、信号采样和滤波等操作。
转置矩阵是矩阵运算中的一种基本操作,具有多个重要的性质。
矩阵转置与状态转移矩阵的关系
矩阵转置与状态转移矩阵的关系简介:矩阵转置和状态转移矩阵是线性代数和概率论中常见的概念,它们在不同领域有着重要的应用。
本文将探讨矩阵转置和状态转移矩阵之间的关系,并说明它们在实际问题中的意义和应用。
一、矩阵转置的定义和性质矩阵转置是指将矩阵的行和列互换得到的新矩阵。
设A是一个m×n的矩阵,记作A=[a_ij],则A的转置记作A^T=[a_ji]。
矩阵转置具有如下性质:1. (A^T)^T = A,即矩阵转置的转置等于原矩阵。
2. (A + B)^T = A^T + B^T,即矩阵的和的转置等于各矩阵转置后的和。
3. (kA)^T = k(A^T),即矩阵的数乘的转置等于数乘后的矩阵转置。
二、状态转移矩阵的定义和应用状态转移矩阵是概率论中描述状态转移的工具。
在马尔可夫链模型中,状态转移矩阵描述了系统从一个状态转移到另一个状态的概率。
设有n个状态,状态转移矩阵P=[p_ij]是一个n×n的矩阵,其中p_ij表示系统从状态i转移到状态j的概率。
状态转移矩阵P具有如下性质:1. 对于任意的i,有0 ≤ p_ij ≤ 1,且∑(j=1→n)p_ij = 1,即每一行元素都在[0,1]之间,且每一行元素之和等于1。
2. 状态转移矩阵P的幂P^k表示系统经过k步转移后的状态转移概率,即P^k=[p_ij(k)],其中p_ij(k)表示系统经过k步从状态i转移到状态j的概率。
三、矩阵转置与状态转移矩阵的关系矩阵转置与状态转移矩阵之间存在一定的关系。
设P是一个状态转移矩阵,其转置P^T=[p_ji]表示系统从状态j转移到状态i的概率。
可以发现,状态转移矩阵P和其转置P^T的性质是互补的。
具体来说,状态转移矩阵P的每一行元素之和等于1,而其转置P^T的每一列元素之和也等于1。
这是因为状态转移概率满足归一化条件,即系统必然会转移到某一状态。
矩阵转置与状态转移矩阵的关系可以通过一个例子来说明。
假设有一个马尔可夫链模型,其中有3个状态A、B和C,状态转移矩阵P为:P = [0.4 0.3 0.30.2 0.6 0.20.1 0.2 0.7]该矩阵表示系统从状态A转移到状态A的概率为0.4,从状态A转移到状态B的概率为0.3,以此类推。
第八讲 矩阵转置、方阵的行列式
称为矩阵A 的伴随矩阵.
13
如: A 2
1
3 , 4
2 A 1
3 =8 3 5 4
A1 1 4, A1 2 1, A 2 1 3, A 2 2 2 .
如 A
2 6
3 8
则 A
2 6
3 8
2.
特别注意 方阵与行列式是两个不同的概念,方阵是一个数 表,而行列式则是一个数.
9
例3
设A
2 6
3 , 8
B
1 1
0 ,计 算 A B , 3
A B .
解:
2 A 6
3 2, 8
1 B 1
0 3, 3
T
设C A A
T
A
A
T
T
A A C,
T
所以C为对称矩阵.
设B A A ,
T
则B
T
A A
T
T
A
T
A B,
所以B为反对称矩阵.
A A A 2
T
A A 2
T
C 2
B 2
,
命题得证.
8
二、方阵的行列式
定义 由 n 阶方阵 A 的元素所构成的行列式, 叫做方阵 A 的行列式,记作|A| 或detA
999二方阵的行列式定义的元素所构成的行列式叫做方阵的行列式记作a或deta特别注意方阵与行列式是两个不同的概念方阵是一个数表而行列式则是一个数
矩阵和转置矩阵
矩阵和转置矩阵矩阵是线性代数中非常重要的概念之一,它是由一组按照特定顺序排列的数构成的矩形数组。
矩阵可以用于表示线性方程组、线性变换等多个数学问题。
而转置矩阵则是在原矩阵的基础上,将其行和列对换得到的新矩阵。
在本文中,我们将介绍矩阵和转置矩阵的基本概念、性质以及它们在实际应用中的重要性。
一、矩阵的定义和性质矩阵可以用一个大写字母来表示,比如A、B等。
一个矩阵A可以用以下形式表示:A = [a11, a12, a13; a21, a22, a23; a31, a32, a33]其中,a11、a12等表示矩阵A中的元素,分号用来分隔行,逗号用来分隔列。
矩阵中的元素可以是实数、复数或者变量。
矩阵有以下几个重要的性质:1. 矩阵的维度:一个m行n列的矩阵被称为一个m×n矩阵,其中m表示矩阵的行数,n表示矩阵的列数。
2. 矩阵的相等:两个矩阵A和B相等,当且仅当它们的维度相等且对应位置上的元素相等。
3. 矩阵的加法和减法:两个维度相同的矩阵可以进行加法和减法运算,运算结果是一个与原矩阵维度相同的新矩阵,其中的每个元素等于对应位置上两个矩阵的元素之和或差。
4. 矩阵的数乘:一个矩阵可以与一个实数或复数相乘,运算结果是一个与原矩阵维度相同的新矩阵,其中的每个元素等于对应位置上原矩阵的元素乘以该实数或复数。
二、转置矩阵的定义和性质转置矩阵是在原矩阵的基础上将其行和列对换得到的新矩阵。
对于一个m×n矩阵A,其转置矩阵记为A^T。
转置矩阵的定义可以表示为:A^T = [a11, a21, a31; a12, a22, a32; a13, a23, a33]转置矩阵有以下几个重要的性质:1. 转置矩阵的维度:一个m×n矩阵的转置矩阵是一个n×m矩阵,即行数和列数互换。
2. 转置矩阵的转置:一个矩阵的转置矩阵再次进行转置,结果等于原矩阵本身,即(A^T)^T = A。
3. 转置矩阵的加法和减法:两个矩阵的转置矩阵的加法和减法等于原矩阵的加法和减法的转置,即(A + B)^T = A^T + B^T,(A -B)^T = A^T - B^T。
矩阵的转置、对称矩阵和可逆矩阵
不同.
称为矩阵 的伴随矩阵.
性质
证明
则
故 同理可得
逆矩阵的概念和性质 定义 对于 阶矩阵 ,如果有一个 阶矩阵 , 使得 则说矩阵 是可逆的,并把矩阵 称为 的逆矩阵.
例设
说明 若 是可逆矩阵,则 的逆矩阵是唯一的. 若设 和 是 的可逆矩阵, 则有
可得 所以 的逆矩阵是唯一的,即
定理1 矩阵 可逆的充要条件是
,且
证明 若 可逆,
按逆矩阵的定义得 证毕
奇异矩阵与非奇异矩阵的定义
推论 证明
逆矩阵的运算性质 证明
证明
逆矩阵的求法
例4 求方阵
的逆矩阵.
解
同理可得 故
例5 解
例6 设 解
于是
例7
例8
解 给方程两端左乘矩阵
给方程两端右乘矩阵 得
给方程两端左乘矩阵
给方程两端右乘矩阵 得
主要内容
1. 转置矩阵 2. 对称矩阵与反对称矩阵 3. 可逆矩阵
1、转置矩阵
例
转置矩阵的运算性质
例1 已知 解法1
解法2
2. 对称矩阵与反对称矩阵
对称阵: 设 A 为 n 阶方阵,如果满足
,即
那末 A 称为对称矩阵.
对称矩阵的元素以主对角线为对称轴.
反对称阵: 设 A 为 n 阶方阵,若满足 则称 A 为反对称矩阵.
,即
显然,反对称矩阵的主对角元都是零.
例2 注:对称矩阵的乘积不一定是对称矩阵.
例3 设列矩阵 证明
满足
思考题
成立的充要条件是什么?
答
故
成立的充要条件为
3. 可逆矩阵
定义 由 阶方阵 的元素所构成的行列式, 叫做方阵 的行列式,记作 或
矩阵转置的运算法则(7篇)
矩阵转置的运算法则(7篇)以下是网友分享的关于矩阵转置的运算法则的资料7篇,希望对您有所帮助,就爱阅读感谢您的支持。
篇一第二节矩阵的转置• • • 一、定义二、运算规律三、特殊矩阵一、定义把矩阵A的行换成同序数的列得到的新矩阵,叫做A 的转置矩阵,记作AT 或A′ . B = ( 9 6), ⎛ 1 4⎞⎛ 1 2 2⎞ T ⎜⎛9⎞ A = 2 5⎟. 例A=⎜⎟, T ⎜⎟ B = ⎜⎟. 4 5 8⎠⎜ 2 8⎟⎝⎝ 6⎠⎝⎠λ 二、运算规律(假定运算合法, A,B是矩阵,∈R ) (1) A( )TT=AT( A + B )T = AT + BT (2)(3)( λ A ) = λ AT(4)( AB ) = B AT TT特别( A1 A2 L An−1 An ) = AnT An−1T L A2T A1TT下面证明( AB )T = BT AT . 证明:思路:先证两矩阵行数和列数相同,再证每个元素对应相等. 设A是s ×n矩阵, B是n × m 矩阵, 则AB 是s × m 矩阵,( AB )T 是m × s矩阵; B T 为m × n矩阵, AT 为n × s 矩阵, 故 B T AT 为m × s矩阵; ∴( AB )T 与B T AT 是同型矩阵 .( AB )T 的i行j列元素= ( AB )的j行i列元素=( A 的j 行) ( B 的i 列) = ∑ a jk bkik =1nB A 的i行j列元素= ( B 的i行)( A 的j列)T T T T⎡ a j1 ⎤⎢a ⎥ T T ⎢ j2 ⎥ = ( B的i列) ( A的j行) = ( b 1 i , b 2 i , L , b ni ) ⎢ M ⎥⎢a ⎥⎣ jn ⎦= ∑ bki a jk = ∑ a jk bki , ( i = 1, 2 , L , m , j = 1, 2 , L , s )k =1 k =1nn= ( AB )T 的i行j列元素∴( AB)T = BT AT .⎛ 1 0⎞⎜ 2 3⎟, B = ⎛ 2 例1 已知A = ⎜⎜4 ⎟⎝⎜ 4 5⎟⎝⎠⎛ 2 ⎛ 1 0⎞⎜ 2 3 ⎟⎛ 2 1 ⎞ = ⎜ 16 解AB = ⎜⎟⎜ 4 3⎟⎜⎠⎜⎜ 4 5⎟⎝⎝⎠⎝ 28 ⎛ 2 16 28 ⎞∴AB = ⎜()1 11 19 ⎟⎝⎠T1⎞ , 求( AB )T , BT AT . ⎟ 3⎠ 1⎞ 11 ⎟⎟ 19 ⎟⎠而⎛ 2 4 ⎞⎛ 1 2 4 ⎞⎛ 2 16 28 ⎞ B A =⎜⎟⎜ 0 3 5 ⎟ = ⎜ 1 11 19 ⎟⎝ 1 3 ⎠⎝⎠⎝⎠T TT T T 显然( AB ) = B A3.特殊矩阵1) 对称矩阵定义设A为n阶方阵,若AT = A ,即aij = a ji,那么称A 为对称矩阵. 如特点:它的元素以主对角线为对称轴对应相等.注意两个同阶的对称矩阵的和还是对称矩阵,对称矩阵的数乘也是对称矩阵.但两个对称矩阵的乘积不一定是对称矩阵.⎛ 1 0 1 −1⎞⎜⎟⎜ 0 − 1 3 1⎟⎜ 1 3 2 2⎟⎜⎜ − 1 1 2 0⎟⎟⎠⎝2) 反对称矩阵定义设A 为n 阶方阵,若AT = − A,即aij = − a ji , 那么称A 为反对称矩阵. 如⎛⎜反对称矩阵的特点是:主对⎜⎜角线上的元素为0,其余的元⎜素关于主对角线互为相反数. ⎝1⎞ 1 0 5 −2 ⎟⎟ −2 −5 0 1 ⎟⎟ −1 2 −1 0 ⎠ 0 2 −1注意两个同阶的反对称矩阵的和还是反对称矩阵, 反对称矩阵的数乘也是反对称矩阵.但两个反对称矩阵的乘积不一定是反对称矩阵.例2 设A = ( aij ) 3 为一个3阶实矩阵, 若A ≠ 0, 证明: AAT 为对称矩阵且AAT ≠ O .证明Q (AA ) = ( A ) ⎡ a11 a12 令B = AAT = ⎢ a21 a22 ⎢⎢ a31 a32 ⎣T TT TA = AA , 故AA 为对称矩阵.T T Ta13 ⎤⎡ a11 a23 ⎥⎢ a12 ⎥⎢ a33 ⎥⎢ a13 ⎦⎣a21 a22 a23a31 ⎤ a32 ⎥ , ⎥ a33 ⎥⎦则bij = ai 1a j 1 + ai 2 a j 2 + ai 3 a j 3 ( i , j = 1, 2, 3).上式取j = i , 得bii = ai21 + ai22 + ai23 ≥ 0( i = 1, 2, 3).由题设A ≠ 0知, A至少有一个元素akl ≠ 0, 则bkk > 0, 于是B = AAT ≠ O .例3 证明任一n阶矩阵A都可表示成对称阵与反对称阵之和.(p.16习题1.2 5) 证明令 C = A + AT,则C T = ( A + AT )T = AT + A = C ,所以C为对称矩阵.令B = A − AT , 则BT = ( A − AT )T = AT − A = − B,所以B为反对称矩阵.C B A+ A A− A ∴A= + = + , 命题得证. 2 2 2 2T T第三节矩阵的分块• 一、矩阵的分块• 二、分块矩阵的运算规则一、矩阵的分块具体做法:将矩阵用若干条纵线和横线分成许多个小矩阵,每一个小矩阵称为子块,以子块为元素的形式上的矩阵称为分块矩阵. ⎛ a 1 0 0⎞⎛ a 1 0 0⎞⎛ B ⎞例⎜⎟⎜⎟⎜ 1⎟⎞⎜ 0 a 0 0 ⎟ = B , A = ⎜ 0 a 0 0 ⎟ = ⎛ A O ⎟, A=⎜⎜ 1 0 b 1⎟⎜ E B ⎠⎟⎜ 2⎟ 1 0 b 1 ⎜⎟⎝ B3 ⎠⎜⎜⎜ 0 1 1 b⎟⎝⎟⎟⎜ 0 1 1 b⎟⎝⎠⎝⎠注:分块时首先满足E,再考虑对角或三角矩阵,然后考虑O以及其它的特殊矩阵. 按行分块或按列分块是两种特殊的分块形式.二、分块矩阵的运算规则分块矩阵的运算规律与普通矩阵规律运算相类似.1.矩阵的加法设A与B为同型矩阵,采用相同的分块法,有⎛ A11 ⎜ A=⎜ M ⎜A ⎝ s1 L L A1 r ⎞⎛ B11 ⎟⎜ M ⎟, B = ⎜ M ⎜B A sr ⎟⎠⎝ s1 L L B1 r ⎞⎟ M ⎟ B sr ⎟⎠其中Aij 与Bij 为同型矩阵,则⎛ A11 + B 11 ⎜ M A+ B =⎜⎜A +B s1 ⎝ s1 L L A1 r + B 1 r ⎞⎟ M ⎟. A sr + B sr ⎟⎠2.数乘⎛ A11 L A1r ⎞⎛ λA11 L λA1r ⎞⎟⎜⎟⎜ A=⎜ M M ⎟, λ ∈R, 则λA = ⎜ M M ⎟. ⎜A L A ⎟⎜ λA L λA ⎟⎝ s1 sr ⎠⎝ s1 sr ⎠3.乘法设矩阵Am×l , Bl×n 分块成⎛ A11 L A1t ⎞⎛ B11 L B1r ⎞⎜⎟⎜⎟ A=⎜M M ⎟ ,B=⎜ M M ⎟, ⎜A L A ⎟⎜B L B ⎟ st ⎠ tr ⎠⎝ s1 ⎝ t1其中分块矩阵Ai 1 , Ai 2 ,L , Ait 的列数分别等于B1 j , B2 j ,L , Btj 的行数.⎛ C11 L C1r ⎞⎟那么AB = ⎜ M M ⎟⎜⎜C L C sr ⎟⎝s1 ⎠其中 C ij = ∑ Aik Bkj ( i = 1,L , s; j = 1,L , r ) .k =1t4.转置⎛ A11 ⎜ A=⎜ M ⎜A ⎝ s1T ⎛ A11 L AsT1 ⎞ L A1r ⎞⎟⎟则AT = ⎜ M M ⎟. M ⎟, ⎜⎟⎜ AT L AT ⎟ L Asr ⎠ sr ⎠⎝ 1r分块矩阵的转置为先大转置,而后小转置.5.分块对角矩阵设A为n阶方阵,若A的分块矩阵只有在主对角线上有非零子块(这些非零子块必须为方阵),其余子块全为零, 那么方阵A就称为分块对角阵.⎛ A1 即如⎜ A=⎜⎜⎜⎝ A2 ⎞⎟⎟⎟ O ⎟ As ⎠Ai ( i = 1,2,L s )都是方阵.⎛1 ⎜0 ⎜⎜0 ⎜⎜0 ⎜0 ⎝0 1 1 0 00 2 3 0 00 0 0 2 10⎞ 0⎟⎟ 0⎟⎟ 1⎟ 5⎟⎠是分块对角阵.⎡ A1 A2 ⎤⎡ B1 例3 设A = ⎢⎥的列分块法与B ⎢ 0 ⎣0 A4 ⎦⎣的行分块法一致, 求AB .rn− rB2 ⎤ r B4 ⎥ n − r ⎦解根据分块矩阵的乘法规则,有⎡⎤⎡ A1 A2 ⎤⎡ B1 B2 ⎤⎢A1 B1 A1 B2 + A2 B4 ⎥ AB = ⎢ . ⎥⎢0 B ⎥= ⎢⎥ A4 B4 ⎣ 0 A4 ⎦⎣ 4⎦ 0 ⎦⎣例4 设A,B都是n阶上三角阵,证明:AB是上三角阵. 证一A , B 为上三角阵, 故当n ≥ i > j ≥ 1时, a ij = 0 , bij = 0 . ⎛ a11 a12 L a1n ⎞⎜ a22 L a2 n ⎟设C = ( c ij ) n× n = AB . ⎜⎟⎜ O M ⎟则当n ≥ i > j ≥ 1时, ⎜⎟ ann ⎠⎝ n i −1 nc ij = ∑ a ik b kj = ∑ a ik b kj + ∑ a ik b kjk =1 k =1 k=i= ∑ 0 × bkj + ∑ aij × 0 = 0.k =1 k =ii −1n故AB为上三角阵.证二:数学归纳法. n = 1时, A = a, B = b, AB = ab, 成立.设两个n − 1阶上三角阵的乘积是上三角阵 .下面考虑n阶的情况, 对A, B做如下分块:⎡ a11 A=⎢⎣0A2 ⎤⎡ b11 ⎥, B = ⎢ 0 A4 ⎦⎣B2 ⎤ B4 ⎥⎦A4 , B4 都是n − 1 阶上三角阵 .由归纳假设, A4 B4是n − 1阶上三角阵, 则⎡ a11b11 则AB = ⎢⎣ 0a11 B2 + A2 B4 ⎤⎥ A4 B4 ⎦于是, AB 是上三角阵 .由归纳法 .命题结论成立 .小结1.矩阵的转置与运算规律2.对称阵与反对称阵3.矩阵的分块4.分块矩阵的运算篇二南京信息工程大学实验(实习)报告实验(实习)名称矩阵的转置日期11.15得分指导老师崔萌萌系计软院专业软嵌年级大二班次1姓名张越学号[1**********]一、实验目的矩阵的转置c语言实现二、实验内容矩阵的转置三、实验步骤#include “malloc.h”#include “stdio.h”#define MAXSIZE 11#define ROW_ 11#define COL_ 11typedef struct{int row,col;int e;}Triple;typedef struct{Triple data[MAXSIZE+1]; int m,n,len;}TSMatrix;void FastTransposeTSMatrix(TSMatrix A,TSMatrix *B){ int num[MAXSIZE],pos[MAXSIZE];int i,col,p;B->n=A.m;B->m=A.n;B->len=A.len;if(B->len){for(col=1;colnum[col]=0;}for(i=1;inum[A.data[i].col]++;}pos[1]=1;for(i=2;ipos[i]=pos[i-1]+num[i-1];}for(i=1;icol=A.data[i].col;p=pos[col];B->data[p].col=A.data[i].row; B->data[p].row=A.data[i].col; B->data[p].e=A.data[i].e;pos[col]++;}}}void main(){int i,j;int num[ROW_][COL_]={0}; int a[8]={1,4,3,3,7,8,6,1};int b[8]={2,7,2,8,3,2,7,4};int c[8]={12,9,-3,14,24,18,15,-7}; TSMatrix A,*B;A.m=ROW_-1;A.n=COL_-1;A.len=8;for(i=1;iA.data[i].row=a[i-1];A.data[i].col=b[i-1];A.data[i].e=c[i-1];num[a[i-1]][b[i-1]]=c[i-1];}printf(“\n”);printf(“转换之前:\n\n”);for(i=1;ifor(j=1;jprintf(“%-3d”,num[i][j]);}printf(“\n”);}printf(“\n三元组表:\n\nrow col E\n”);for(i=1;i{printf(“ %d %d %d\n”,A.data[i].row,A.data[i].col,A.data[i].e); }B=(TSMatrix *)malloc(sizeof(TSMatrix)); FastTransposeTSMatrix(A,B);for(i=1;ifor(j=1;jnum[i][j]=0;}}for(i=1;ilen;i++){num[B->data[i].row][B->data[i].col]=B->data[i].e; }printf(“转换之后:\n\n”);for(i=1;ifor(j=1;jprintf(“%-3d”,num[i][j]);}printf(“\n”);}printf(“\n三元组表:\n\nrow col E\n”);for(i=1;ilen;i++){printf(“ %d %d %d\n\n”,B->data[i].row,B->data[i].col,B->data[i].e); }}四、实验结果五、实验小结输入数据可以用文件输入提高测试效率篇三矩阵的转置把一矩阵A的行列互换,所得到的矩阵称为A的转置,记为A .可确切地定义如下:定义5 设a11a12 a1nA aa2122 a2n,as1as2 asn 所谓的转置就是指矩阵a11a21 as1A a12a22 as2.a1na a2nsn显然,s n矩阵的转置是n s矩阵.矩阵的转置适合以下的规律:(A ) A, (A B) A B , (AB) B A , (kA) kA . (16)表示两次转置就还原,这是显然的.练习:A 112 ,B 2 10 113421求(AB) ,B A .(16) (17) (18) (19)1TTT对称矩阵反对称矩阵定义:设A为n级方阵,若A满足1)A A,则称A 为对称矩阵.2)A A,则称A为反对称矩阵.对称阵的元素以主对角线为对称轴对应相等.例3:证明任一n阶矩阵A都可以表示成对称矩阵与反对称矩阵之和。
矩阵转置系数倒数
矩阵转置系数倒数全文共四篇示例,供读者参考第一篇示例:矩阵转置和系数倒数是线性代数中非常重要的概念,它们在数学和工程领域中应用广泛,尤其在矩阵运算和线性方程组求解中有着重要的作用。
本文将详细介绍矩阵转置和系数倒数的定义、性质和应用。
一、矩阵转置矩阵转置是指将一个矩阵的行与列互换得到的新矩阵。
对于一个m×n的矩阵A,其转置记作A^T,是一个n×m的矩阵,其中的元素满足以下关系:A^T[i][j] = A[j][i]。
简单来说,就是将矩阵中的行变成列,列变成行。
矩阵转置有一些重要的性质:1. (A^T)^T = A 任意矩阵A的转置的转置等于原矩阵;2. (A + B)^T = A^T + B^T 两个矩阵的和的转置等于这两个矩阵分别转置后再相加;3. (kA)^T = kA^T 一个常数与矩阵相乘后的转置等于这个矩阵转置后再与这个常数相乘。
矩阵转置的一个重要应用是在矩阵运算中,例如矩阵乘法。
在矩阵乘法中,AB的转置等于B^T × A^T。
这个性质在矩阵运算中起着非常重要的作用,能够简化运算过程。
矩阵转置还有利于矩阵的行列式和逆矩阵的求解,是矩阵运算中的基础操作。
二、系数倒数系数倒数是指一个数的倒数,即这个数的倒数是它的倒数的倒数。
在数学中,0的倒数并不存在,而非零数的倒数就是这个数的倒数。
2的倒数是1/2,-3的倒数是-1/3。
系数倒数也有一些重要的性质:1. 一个数的倒数与这个数的乘积为1,即a × 1/a = 1;2. 一个数的倒数的倒数等于这个数本身,即(1/a)^-1 = a。
系数倒数在数学和工程中有着广泛的应用,特别是在求解线性方程组和矩阵运算中。
在求解线性方程组Ax=b时,如果将方程组写成x = A^-1 b的形式,其中A^-1代表A的逆矩阵,这样可以通过计算A 矩阵的逆矩阵来求解方程组。
而A矩阵的逆矩阵的计算中就用到了系数倒数。
在矩阵运算中,矩阵转置和系数倒数可以结合起来应用。
矩阵的转置 向量空间
矩阵的转置向量空间
矩阵的转置是指将矩阵的行和列互换得到的新矩阵。
如果我们
有一个m×n的矩阵A,那么它的转置记作AT,是一个n×m的矩阵,其中AT的第i行第j列的元素等于A的第j行第i列的元素。
换句
话说,AT的第i行就是A的第i列,AT的第j列就是A的第j行。
矩阵的转置可以用来求解线性方程组、矩阵的秩、矩阵的逆等问题,是线性代数中非常重要的操作。
在向量空间中,矩阵的转置也有重要的意义。
向量空间是指一
组向量的集合,其中的向量满足一定的线性组合和数乘运算规则。
在向量空间中,矩阵可以用来表示线性变换,而矩阵的转置则可以
表示不同的线性变换。
矩阵的转置在向量空间中可以用来描述向量
的正交性质和对称性质,对于矩阵的特征值和特征向量的求解也有
着重要的作用。
此外,矩阵的转置还在机器学习和数据分析中扮演着重要的角色。
在特征工程和数据预处理中,经常需要对数据集进行转置操作,以便进行特征选择、降维和模型训练等操作。
因此,矩阵的转置在
向量空间中具有广泛的应用。
总之,矩阵的转置在数学、线性代数、向量空间和数据分析中都有着重要的作用,它可以帮助我们更好地理解和处理向量和矩阵的性质,为我们解决实际问题提供了重要的数学工具。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面就是(算式1)式中矩阵M的(5行6列共有)8个非零元素的三元组表示:
{ (1,1, 8), (1,3, 9) , (2,2,2) , (3,4,3) , (3,6,7) , (4,1,6) , (4,3,4) , (5,4,5)}
若以某种方式(以行为主或以列为主的顺序)将8个三元组排列起来,再加上一个表示矩阵M的行数,列数及非零元素的个数的特殊的三元组(5,6,8),则所形成的表就能唯一地确定稀疏矩阵。
5.快速转置算法程序:
void fastran(Spmatrix a,Spmatrix *b)
{ int k,p,q,col;
int num[10],pot[10];
b->m=a.n; b->n=a.m; b->t=a.t;
if (a.t!=0)
普通算法分析:按b.data中三元组的次序进行转置。也就是说,按照矩阵M的列序进行转置。显然,为了找到M中的每一列的所有的非零元素,需要对a.data从第1行起整个扫描一遍。由于a.data是以M的行序来存放每一个非零元素的,因此,这样得到的顺序恰好是b.data应有的顺序。其具体算法描述如下:
矩阵的转置运算是变换元素的位置,把位于(i, j)的元素换到(j, i)位置上。也就是说,把元素的行和列对换。所以一个m×n的矩阵M,它的转置矩阵是一个n×m的矩阵,且N[i,j]=M[j,i],其中,1≤i≤n,1≤j≤m。例如, (算式1)中的矩阵N就是矩阵M的转置矩阵,矩阵N也是一个稀疏矩阵,其非零元素的排列情况如表-1(b)所示。求矩阵M的转置矩阵N,实际上就是由表-1(a)求表-1(b)。
这比直接用二维数组表示矩阵的转置算法的时间量级O(m*n)要差。不难看出,此算法之所以耗费时间,问题在于其每形成转置矩阵的一行,都必须对a.data从头到尾扫描一遍。能否对a.data只扫描一次,又不引起元素的移动就能得到要求的b->data呢?为此,我们可使用另一种快速方法。
四、快速转置算法
{
for (col=1; col<=a.n; col++)
{ num[col]=0; printf("col=%d num[col]=%d
",col,num[col]);}
for (k=0; k { num[a.data[k].j]++;
num[col] 表示矩阵M中第col列中非零元素的个数:
pot[col] 的初值表示M中第col列的第一个非零元素在b->data中的位置。
于是有
pot[1]=0
pot[co1]=pot[col-1] + num[col-1] (2≤ c01 ≤n)
.j;
b->data[q].j=a.data
.i; fastran(
b->data[q].v=a.data
.v;
pot[col]++;
}
}
}
五、结束语
这个算法仅比前一个算法多用了两个辅助数组。从时间上看,算法中有四个并列的循环语句,它们分别执行n,t,n- 1和t次,因此,算法的执行时间为O(n+t)。在t和m,n等量级时,该算法的执行时间上升到O(m*n),但在t 参考文献:[1] 《数据结构》 严蔚敏等 清华大学出版社 1992年 [2] 《数据结构与算法》 殷人昆等 机械工业版社 1996年 (作者单位:鹤壁职业技术学院)
对于式(5.8)中的矩阵M,其num和pot的值如表5.4所示。
算法:
pot[1]=0; M第1列第1个a(1,1,8) 放在b.data的第0个(1,1,8)(第2 个a(4,1,6) 放在b.data的第1个(1,4,6))
Pot[2]=pot[1]+num[1]=0+2=2; M第2列第1个a(2,2, 2) 放在b.data的第2个(2,2,2)
Pot[3]=pot[2]+num[2]=2+1=3; M第3列第1个a(1,3,9) 放在b.data的第3个(3,1,9)(第2 个a(4,3,4) 放在b.data的第4个(3,4,4)
Pot[4]=pot[3]+num[3]=3+2=5; M第4列第1个a(3,4,3) 放在b.data的第5个(4,3,3)(第2 个a(5,4,5) 放在b.data的第6个(4,5,5)
这两种算法的函数中,a是已知的三元组表,为了使函数得到转置后新的三元组表b, 这里使用的是传址调用的形参*b。
按照a.data 中三元组的次序进行转置。转置后的元素不连续存放,直接放到b->data 中应有的位置上,这样既可以避免元素移动,又只需对a.data扫描一次。为了确定矩阵M 中的每一列(即N中每一行)的第一个非零元素在b->data中应有的位置,需要先求得矩阵M 中的每一列中非零元素的个数。为此,需设置两个数组num[1..n]和pot[1..n],分别存放在矩阵M中每一列的非零元素个数和每一列第1个非零元素在b->data中的位置,即
Pot[5]=pot[4]+num[4]=5+2=7;M第5列第1个a(X,5,X) 放在b.data的第7个(5,X,X)(本行无非零元素,空第7个)
Pot[6]=pot[5]+num[5]=7+0=7; M第6列第1个a(3,6,7) 放在b.data的第7个(6,3,7)
一、前 言
三元组稀疏矩阵的快速转置算法在《数据结构》课程中是一个难点,处理这个知识点很费时间,在教学过程中,往往受课时限制,采取略过不讲的办法,有的教材就干脆把它省去不提。日常生产和科研过程中,数字计算中大量使用了矩阵,为了减少运算量,提高运算效率,这个算法很有用处。这里给出三元组稀疏矩阵的快速转置算法详细过程,并给出C语言描述的实例。
{ q=0;
for (col=1; col<=a.n; col++)
for (p=0; p if(a.data
.j==col)
{ b->data[q].j=a.data
.i;
b->data[q].i=a.data
.j;
分析这个算法,除少数附加空间,例如p,q,col和t外,它所需要的存储量仅为两个三元组表a,b所需要的空间。因此,当非零元素个数t < m*n/3时,其所需存储空间比直接用二维数组要省。至于执行时间,因算法的主要工作是在col和p的二重循环中完成的,故算法的执行时间为O(n*t)。当非零元素个数t的数量级为m,n时,其执行时间变为O(m*n*n)。
{int 非零元素个数 */
Mat data[MAXSIZE]; /* 所存储元素的最大个数 */
)Spmatrix;
Spmatrix a,b;
要假定结构中data域表示非零元素的三元组是以行为主顺序排列的。(算式1)表示了稀疏矩阵M和N中data域的排列情况。这种表示方法,在矩阵足够稀疏的情况下,对存储空间的需求量比通常的方法少得多。
#include <iostream>
#define MAXSIZE 12500//假设非零元个数的最大值为12500
#define OK 1
三元组表: 假设以顺序存储结构来表示三元组表(triple table),则得到稀疏矩阵的一种压缩存储方式,即三元组顺序表,简称三元组表。其结构描述如下:
typedef struct
{int I,j;
ElemType v;
}Mat;
typedef struct
#define MaxSize 100
#define ElemType int
typedef struct
{ int i,j; ElemType v;
}Mat;
typedef struct
{ int m,n,t; Mat data[MaxSize];
} Spmatrix;
Spmatrix pa,*pb;
void transmat(Spmatrix a,Spmatrix *b)
{ int p,q,col;
b->m=a.n; b->n=a.m; b->t=a.t;
if (a.t!=0)
例如, 我们所说的5×6的矩阵M,若用三元组表来表示,在每个元素占一个存储单元的情况下,则只需要27个存储单元(包括特殊三元组所占的3个单元,可以使用数组[0]单元);若直接用二维数组,按通常办法表示,则需30个单元。矩阵越大,越稀疏,其优越性越明显。
三、稀疏矩阵的转置算法。
矩阵转置定义为: m行n列矩阵M(m,n) 转换为n行m列N(n,m) 矩阵,即行列互换。例如:如M(3,4)转置为N(4,3)。如图-1矩阵转置。
二、数组的三元组表示与稀疏矩阵
在实际应用中,往往会遇到一种大多数元素的值为零的矩阵,只有少部分为非零元素,这些非零元素在矩阵中的分布又没有一定的规律,我们把它记作“零元素个数>>非零元素个数”,即零元素个数远远大于非零元素个数。这种矩阵称为稀疏矩阵(sparse matrix)。例如,下面所示的矩阵M和它的转置矩阵N,在30个元素中只有8个非零元素,显然是个稀疏矩阵。如图-2,稀疏矩阵M转置成N的示意图。
b->data[q].v=a.data
.v;
q++;
}
}
}
该算法使用了一个二重循环语句。外循环来控制扫描的次数,每执行完一次外循环体,矩阵N相当于排好了一行;内循环则用来控制扫描a.data的第0一t-1行,判断每个元素在该轮中是否需要转换。
从表-1可以看出,对每个非零元素而言,从M转置到N,分两步,第一步,把a.data的第一列数和第二列数对换,得到的b".data。因为b’.data是按非零元素在N中的列序排列的,又因为我们已约定,b.data中的非零元素应按照在矩阵N中的行序排列。第二步,将b’.data转换成按非零元素在矩阵N中的行序排列的b.data。转换方法如下: