-
2020-06-26 11:43:05
题目描述
给定有限集合上二元关系的关系矩阵,利用传递闭包的定义式(不是warshall算法)求其传递闭包的关系矩阵。
源代码#include<stdio.h> #define N 100 int mult(int a[N][N],int b[N][N],int n,int c[N][N]) { int i,j,k; for(i=0;i<n;i++) { for(j=0;j<n;j++) { c[i][j]=0; } }//每次接收矩阵乘积前先初始化为0 for(i=0;i<n;i++) { for(j=0;j<n;j++) { for(k=0;k<n;k++) { c[i][j]+=a[i][k]*b[k][j]; } } } }//定义实现矩阵乘法的函数 int main() { int n,a[100][100]={0},i,j,k,b[100][100]={0},c[100][100]={0},d[100][100]={0}; scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&a[i][j]); b[i][j]=a[i][j]; d[i][j]=a[i][j]; } }//输入邻接矩阵,并用另一个矩阵暂时存储 for(i=0;i<n-1;i++) { mult(a,b,n,c); for(j=0;j<n;j++) { for(k=0;k<n;k++) { b[j][k]=c[j][k];//用c来接收前两个矩阵相乘的结果,并将其储存在b中以实现求解高次矩阵 d[j][k]+=c[j][k]; } } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==j) d[i][j]=1; else if(i!=j&&d[i][j]>0) { d[i][j]=1; } } }//将矩阵d转化为布尔矩阵 for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%d ",d[i][j]); } printf("\n"); } }
更多相关内容 -
方向关系矩阵的复合
2021-02-24 02:30:36摘 要:采用方向关系矩阵模型表示空间区域最小边界矩形(MBR)间的关系,形式化描述了Skiadopoulos等提出的方向关系复合思想,并对其进行细化,提出方向关系矩阵复合方法,使方向关系复合易于实现;简化了Most运算,使... -
【集合论】关系表示 ( 关系矩阵 | 关系矩阵示例 | 关系矩阵性质 | 关系矩阵运算 | 关系图 | 关系图示例 | ...
2020-10-03 23:20:11一、关系矩阵 、 二、关系矩阵示例 、 三、关系矩阵性质 、 四、关系矩阵运算 、 五、关系图 、 六、关系图示例 、 七、关系表示相关性质 、
一、关系矩阵
A = { a 1 , a 2 , ⋯ , a n } , R ⊆ A × A A = \{ a_1, a_2 , \cdots , a_n \} , R \subseteq A \times A A={a1,a2,⋯,an},R⊆A×A
R R R 使用 关系矩阵 表示 : M ( R ) = ( r i j ) n × n M(R) = (r_{ij})_{n\times n} M(R)=(rij)n×n
关系矩阵取值 : M ( R ) ( i , j ) = r i j = { 1 , a i R a j 0 , 无 关 系 M(R)(i, j) = r_{ij} =\begin{cases} 1, & a_i R a_j \\ 0, & 无关系 \end{cases} M(R)(i,j)=rij={1,0,aiRaj无关系
关系矩阵定义说明 :
A A A 是个 n n n 元集 ( 集合中有 n n n 个元素 ) , R R R 是 A A A 上的二元关系 , R R R 的关系矩阵是 n × n n \times n n×n 的方阵 , 第 i i i 行第 j j j 列位置的元素 r i j r_{ij} rij 取值只能是 0 0 0 或 1 1 1 ;
关系矩阵取值说明 :
如果 r i j = 1 r_{ij} = 1 rij=1 , 则说明 A A A 集合中 第 i i i 个元素与第 j j j 个元素具有关系 R R R , 记作 : a i R a j a_i R a_j aiRaj ;
如果 r i j = 0 r_{ij} = 0 rij=0 , 则说明 A A A 集合中 第 i i i 个元素与第 j j j 个元素没有关系 R R R ;
关系矩阵本质 : 关系矩阵中 , 每一行对应着 A A A 集合中的元素 , 每一列也对应着 A A A 集合中的元素 , 行列交叉的位置的值 ( 0 0 0 或 1 1 1 ) 表示 A A A 集合中第 i i i 个元素与第 j j j 个元素构成的有序对是否有关系 R R R ;
二、关系矩阵示例
A = { a , b , c } A = \{ a, b, c \} A={a,b,c}
R 1 = { < a , a > , < a , b > , < b , a > , < b , c > } R_1 = \{ <a, a>, <a,b> , <b,a> , <b,c> \} R1={<a,a>,<a,b>,<b,a>,<b,c>}
R 2 = { < a , b > , < a , c > , < b , c > } R_2 = \{ <a,b> , <a,c> , <b,c> \} R2={<a,b>,<a,c>,<b,c>}
使用关系矩阵表示上述 R 1 , R 2 R_1 , R_2 R1,R2 两个关系 :
R 1 = { < a , a > , < a , b > , < b , a > , < b , c > } R_1 = \{ <a, a>, <a,b> , <b,a> , <b,c> \} R1={<a,a>,<a,b>,<b,a>,<b,c>} 其中 :
- < a , a > <a, a> <a,a> : a a a 是第 1 1 1 个元素 , a a a 是第 1 1 1 个元素 , 第 1 1 1 行第 1 1 1 列元素是 1 1 1
- < a , b > <a, b> <a,b> : a a a 是第 1 1 1 个元素 , b b b 是第 2 2 2 个元素 , 第 1 1 1 行第 2 2 2 列元素是 1 1 1
- < b , a > <b, a> <b,a> : b b b 是第 2 2 2 个元素 , a a a 是第 1 1 1 个元素 , 第 2 2 2 行第 1 1 1 列元素是 1 1 1
- < b , c > <b, c> <b,c> : b b b 是第 2 2 2 个元素 , c c c 是第 3 3 3 个元素 , 第 2 2 2 行第 3 3 3 列元素是 1 1 1
- 其余全是 0 0 0
M ( R 1 ) = [ 1 1 0 1 0 1 0 0 0 ] M(R_1) = \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} M(R1)=⎣⎢⎢⎢⎢⎡110100010⎦⎥⎥⎥⎥⎤
R 2 = { < a , b > , < a , c > , < b , c > } R_2 = \{ <a,b> , <a,c> , <b,c> \} R2={<a,b>,<a,c>,<b,c>} 其中 :
- < a , b > <a, b> <a,b> : a a a 是第 1 1 1 个元素 , b b b 是第 2 2 2 个元素 , 第 1 1 1 行第 2 2 2 列元素是 1 1 1
- < a , c > <a, c> <a,c> : a a a 是第 1 1 1 个元素 , c c c 是第 3 3 3 个元素 , 第 1 1 1 行第 3 3 3 列元素是 1 1 1
- < b , c > <b, c> <b,c> : b b b 是第 2 2 2 个元素 , c c c 是第 3 3 3 个元素 , 第 2 2 2 行第 3 3 3 列元素是 1 1 1
- 其余全是 0 0 0
M ( R 2 ) = [ 0 1 1 0 0 1 0 0 0 ] M(R_2) = \begin{bmatrix} 0 & 1 & 1 \\\\ 0 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} M(R2)=⎣⎢⎢⎢⎢⎡000100110⎦⎥⎥⎥⎥⎤
三、关系矩阵性质
有序对集合表达式 与 关系矩阵 可以唯一相互确定
性质一 : 逆运算相关性质
M ( R − 1 ) = ( M ( R ) ) T M(R^{-1}) = (M(R))^T M(R−1)=(M(R))T
M ( R − 1 ) M(R^{-1}) M(R−1) 关系的逆 的 关系矩阵
与
( M ( R ) ) T (M(R))^T (M(R))T 关系矩阵 的 逆
这两个矩阵是相等的 ;
性质二 : 合成运算相关性质
M ( R 1 ∘ R 2 ) = M ( R 2 ) ∙ M ( R 1 ) M(R_1 \circ R_2) = M(R_2) \bullet M(R_1) M(R1∘R2)=M(R2)∙M(R1)
∙ \bullet ∙ 是矩阵的 逻辑乘法 , 计算 矩阵 r i j r_{ij} rij 的值 第 i i i 行 乘以 第 j j j 列 , 逐位 逻辑相乘 , 再将逻辑相乘结果再 逻辑相加 ;
上述 逻辑乘法使用 ∧ \land ∧ 运算 , 逻辑加法使用 ∨ \lor ∨ 运算 ;
四、关系矩阵运算
A = { a , b , c } A = \{ a, b, c \} A={a,b,c}
R 1 = { < a , a > , < a , b > , < b , a > , < b , c > } R_1 = \{ <a, a>, <a,b> , <b,a> , <b,c> \} R1={<a,a>,<a,b>,<b,a>,<b,c>}
R 2 = { < a , b > , < a , c > , < b , c > } R_2 = \{ <a,b> , <a,c> , <b,c> \} R2={<a,b>,<a,c>,<b,c>}
在上面的示例中 , 已经求出两个关系矩阵 ;
M ( R 1 ) = [ 1 1 0 1 0 1 0 0 0 ] M(R_1) = \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} M(R1)=⎣⎢⎢⎢⎢⎡110100010⎦⎥⎥⎥⎥⎤ , M ( R 2 ) = [ 0 1 1 0 0 1 0 0 0 ] M(R_2) = \begin{bmatrix} 0 & 1 & 1 \\\\ 0 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} M(R2)=⎣⎢⎢⎢⎢⎡000100110⎦⎥⎥⎥⎥⎤
1. 求 M ( R − 1 ) , M ( R 2 − 1 ) M(R^{-1}) , M(R_2^{-1}) M(R−1),M(R2−1)
直接将矩阵转置 , 即可获取 关系的逆的关系矩阵 ;
M ( R 1 − 1 ) = ( M ( R 1 ) ) T = [ 1 1 0 1 0 0 0 1 0 ] M(R_1^{-1}) = (M(R_1))^T = \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 0 \\\\ 0 & 1 & 0 \end{bmatrix} M(R1−1)=(M(R1))T=⎣⎢⎢⎢⎢⎡110101000⎦⎥⎥⎥⎥⎤
M ( R 2 − 1 ) = ( M ( R 2 ) ) T = [ 0 0 0 1 0 0 1 1 0 ] M(R_2^{-1}) = (M(R_2))^T = \begin{bmatrix} 0 & 0 & 0 \\\\ 1 & 0 & 0 \\\\ 1 & 1 & 0 \end{bmatrix} M(R2−1)=(M(R2))T=⎣⎢⎢⎢⎢⎡011001000⎦⎥⎥⎥⎥⎤
R 1 − 1 = { < a , a > , < a , b > , < b , a > , < c , b > } R_1^{-1} = \{ <a, a> , <a, b> , <b,a> , <c,b> \} R1−1={<a,a>,<a,b>,<b,a>,<c,b>}
R 2 − 1 = { < b , a > , < c , a > , < c , b > } R_2^{-1} = \{ <b, a> , <c,a> , <c,b> \} R2−1={<b,a>,<c,a>,<c,b>}
2. 求 M ( R 1 ∘ R 1 ) M( R_1 \circ R_1 ) M(R1∘R1)
M ( R 1 ∘ R 1 ) = M ( R 1 ) ∙ M ( R 1 ) M( R_1 \circ R_1 ) = M(R_1) \bullet M(R_1) M(R1∘R1)=M(R1)∙M(R1)
其中的 ∙ \bullet ∙ 是两个矩阵的逻辑乘法 , 加法使用 ∨ \lor ∨ , 乘法使用 ∧ \land ∧
M ( R 1 ) ∙ M ( R 1 ) = [ 1 1 0 1 0 1 0 0 0 ] ∙ [ 1 1 0 1 0 1 0 0 0 ] = [ 1 1 1 1 1 0 0 0 0 ] M(R_1) \bullet M(R_1) = \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} \bullet \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 1 & 1 \\\\ 1 & 1 & 0 \\\\ 0 & 0 & 0 \end{bmatrix} M(R1)∙M(R1)=⎣⎢⎢⎢⎢⎡110100010⎦⎥⎥⎥⎥⎤∙⎣⎢⎢⎢⎢⎡110100010⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡110110100⎦⎥⎥⎥⎥⎤
矩阵的逻辑乘法 : 结果矩阵的第 i i i 行 , 第 j j j 列元素的值为 , 第 i i i 行的三个元素 分别与上第 j j j 列的三个元素 , 然后三个结果进行或运算 , 最终结果就是 矩阵的第 i i i 行 , 第 j j j 列元素的值 ;
R 1 ∘ R 1 = { < a , a > , < a , b > , < a , c > , < b , a > , < b , b > } R_1 \circ R_1 = \{ <a,a> , <a,b> , <a,c> , <b,a>, <b,b> \} R1∘R1={<a,a>,<a,b>,<a,c>,<b,a>,<b,b>}
3. 求 M ( R 1 ∘ R 2 ) M( R_1 \circ R_2 ) M(R1∘R2)
M ( R 1 ∘ R 2 ) = M ( R 2 ) ∙ M ( R 1 ) M( R_1 \circ R_2 ) = M(R_2) \bullet M(R_1) M(R1∘R2)=M(R2)∙M(R1)
其中的 ∙ \bullet ∙ 是两个矩阵的逻辑乘法 , 加法使用 ∨ \lor ∨ , 乘法使用 ∧ \land ∧
特别注意 , 合成的顺序是逆序合成 , 后者关系矩阵在前 , 前者关系矩阵在后
M ( R 1 ) ∙ M ( R 2 ) = [ 0 1 1 0 0 1 0 0 0 ] ∙ [ 1 1 0 1 0 1 0 0 0 ] = [ 1 0 1 0 0 0 0 0 0 ] M(R_1) \bullet M(R_2) =\begin{bmatrix} 0 & 1 & 1 \\\\ 0 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} \bullet \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 1 \\\\ 0 & 0 & 0 \\\\ 0 & 0 & 0 \end{bmatrix} M(R1)∙M(R2)=⎣⎢⎢⎢⎢⎡000100110⎦⎥⎥⎥⎥⎤∙⎣⎢⎢⎢⎢⎡110100010⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡100000100⎦⎥⎥⎥⎥⎤
矩阵的逻辑乘法 : 结果矩阵的第 i i i 行 , 第 j j j 列元素的值为 , 第 i i i 行的三个元素 分别与上第 j j j 列的三个元素 , 然后三个结果进行或运算 , 最终结果就是 矩阵的第 i i i 行 , 第 j j j 列元素的值 ;
R 1 ∘ R 2 = { < a , a > , < a , c > } R_1 \circ R_2 = \{ <a,a>, <a,c> \} R1∘R2={<a,a>,<a,c>}
五、关系图
A = { a 1 , a 2 , ⋯ , a n } , R ⊆ A × A A = \{ a_1, a_2 , \cdots , a_n \} , R \subseteq A \times A A={a1,a2,⋯,an},R⊆A×A
R R R 的关系图 :
- 顶点 : ∘ \circ ∘ 表示 A A A 集合中的元素 ;
- 有向边 : → \rightarrow → 表示 R R R 中的元素 ;
- a i R a j a_i R a_j aiRaj 就是从顶点 a i a_i ai 到 顶点 a j a_j aj 的有向边 < a i , a j > <a_i , a_j> <ai,aj> ;
六、关系图示例
A = { a , b , c } A = \{ a, b, c \} A={a,b,c}
R 1 = { < a , a > , < a , b > , < b , a > , < b , c > } R_1 = \{ <a, a> , <a,b> , <b,a> , <b,c> \} R1={<a,a>,<a,b>,<b,a>,<b,c>} 关系图表示方式 :
R 2 = { < a , b > , < a , c > , < b , c > } R_2 = \{ <a,b>, <a,c>, <b,c> \} R2={<a,b>,<a,c>,<b,c>} 使用关系图表示 :
R 1 − 1 = { < a , a > , < a , b > , < b , a > , < c , b > } R_1^{-1} = \{ <a,a>, <a,b>, <b,a> , <c,b> \} R1−1={<a,a>,<a,b>,<b,a>,<c,b>}
R 2 − 1 = { < b , a > , < c , a > , < c , b > } R_2^{-1} = \{ <b,a> , <c,a> , <c,b> \} R2−1={<b,a>,<c,a>,<c,b>}
七、关系表示相关性质
A A A 集合中的元素 , 标定次序后 , 即生成了 A A A 上的关系 , R ⊆ A × A R \subseteq A \times A R⊆A×A , 有如下性质 :
- 关系图 G ( R ) G(R) G(R) 与 关系的 R R R 的集合表达式 ( 有序对集合 ) , 可以 唯一确定 ;
- 关系 R R R 的集合表达式 , 关系矩阵 M ( R ) M(R) M(R) , 关系图 G ( R ) G(R) G(R) , 都是一一对应的 ;
R ⊆ A × B R \subseteq A \times B R⊆A×B
- 集合 A A A 中有 n n n 个元素 , ∣ A ∣ = n |A| = n ∣A∣=n
- 集合 B B B 中有 m m m 个元素 , ∣ B ∣ = m |B| = m ∣B∣=m
- 关系矩阵 M ( R ) M(R) M(R) 是 n × m n \times m n×m 阶矩阵 ;
- 关系图 G ( R ) G(R) G(R) 有向边都是从 A A A 集合中的元素 指向 B B B 集合中的元素
-
基础 | Python下的矩阵定义 (下)
2021-01-13 08:12:27关键词:线性代数 / 矩阵 / 基本定义矩阵对于算法就如同人对于食物般的关系,已经到了密不可分的状态了,在神经网络里,矩阵代表了每层神经元之间的链接,在集成算法里,矩阵记录了每次分类器更新的残差,在马可夫链...关键词:线性代数 / 矩阵 / 基本定义
矩阵对于算法就如同人对于食物般的关系,已经到了密不可分的状态了,在神经网络里,矩阵代表了每层神经元之间的链接,在集成算法里,矩阵记录了每次分类器更新的残差,在马可夫链里,矩阵表示了不同状态下的条件转移概率,矩阵的重要性已经是不言自明了。除了上集说到的方阵,子矩阵,对角矩阵,与单位矩阵之外,接着要进一步介绍一些常用且方便的矩阵,包含了以下几种矩阵类型:纯量矩阵
三角矩阵
共轭矩阵
对称矩阵
正交矩阵
当然矩阵的类型远不止如此,而这几种矩阵在了解的时候不需要太多先验知识,因此才能在一开始率先登场!
矩阵基本定义
这篇文章里的范例也都将沿用上篇文章中的定义,下面就来回顾一下标记符号的各种含义。
中的
称为矩阵的元素,可以是数字,函数,实数,复数。在 python 代码中的numpy模块几乎可以说是数值计算的唯一选择。
import numpy as np
A = np.random.randint(0, 10, 72)
A = A.reshape(9, 8)
print(A)
输出:
[[5 4 5 8 5 7 0 7]
[5 6 4 0 9 8 6 5]
[1 2 9 6 7 7 3 5]
[3 4 7 8 4 6 9 2]
[4 8 1 3 5 4 8 4]
[5 1 5 7 3 9 9 8]
[0 8 4 1 6 9 3 2]
[4 3 0 3 6 4 5 9]
[2 8 6 3 5 5 3 4]]
如果还没安装过numpy,可以使用下面指令在终端快速安装。
pip install numpy
11. 纯量矩阵 - Scalar matrix
在对角矩阵中,主对角线上的元素皆为某一常数 C 时,则称之为纯量矩阵。
c = 5
print(np.diag([c, c, c]))
输出:
[[5, 0, 0],
[0, 5, 0],
[0, 0, 5]]
12. 上三角矩阵 - Upper triangular matrix
在方阵的前提下,主对角线以下元素皆为 0 时,则称之为上三角矩阵。
print(np.triu(A))
输出:
[[5, 4, 5, 8, 5, 7, 0, 7],
[0, 6, 4, 0, 9, 8, 6, 5],
[0, 0, 9, 6, 7, 7, 3, 5],
[0, 0, 0, 8, 4, 6, 9, 2],
[0, 0, 0, 0, 5, 4, 8, 4],
[0, 0, 0, 0, 0, 9, 9, 8],
[0, 0, 0, 0, 0, 0, 3, 2],
[0, 0, 0, 0, 0, 0, 0, 9],
[0, 0, 0, 0, 0, 0, 0, 0]]
p.s. 即便一个矩阵不是方阵,同样可以取上下三角矩阵。
13. 下三角矩阵 - Lower triangular matrix
在方阵的前提下,主对角线以上元素皆为 0 时,则称之为下三角矩阵。
print(np.tril(A))
输出:
[[5, 0, 0, 0, 0, 0, 0, 0],
[5, 6, 0, 0, 0, 0, 0, 0],
[1, 2, 9, 0, 0, 0, 0, 0],
[3, 4, 7, 8, 0, 0, 0, 0],
[4, 8, 1, 3, 5, 0, 0, 0],
[5, 1, 5, 7, 3, 9, 0, 0],
[0, 8, 4, 1, 6, 9, 3, 0],
[4, 3, 0, 3, 6, 4, 5, 9],
[2, 8, 6, 3, 5, 5, 3, 4]]
14. 共轭矩阵 - Conjugate matrix
把 A 矩阵的元素皆取共轭复数后,该新的矩阵为 A 矩阵的共轭矩阵,以
表示。
B = np.array([[1+1.j, 2-1.j],
[3-2.j, 4+5.j]])
print(np.conj(B))
输出:
[[1.-1.j, 2.+1.j],
[3.+2.j, 4.-5.j]]
15. 转置矩阵 - Transpose matrix
把 A 矩阵中的行列编号互换,元素不变,只变位置后的结果称为 A 矩阵的转置矩阵,以
表示。
print(A.T)
输出:
[[5, 5, 1, 3, 4, 5, 0, 4, 2],
[4, 6, 2, 4, 8, 1, 8, 3, 8],
[5, 4, 9, 7, 1, 5, 4, 0, 6],
[8, 0, 6, 8, 3, 7, 1, 3, 3],
[5, 9, 7, 4, 5, 3, 6, 6, 5],
[7, 8, 7, 6, 4, 9, 9, 4, 5],
[0, 6, 3, 9, 8, 9, 3, 5, 3],
[7, 5, 5, 2, 4, 8, 2, 9, 4]]
16. 共轭转置矩阵 - Conjugate transpose matrix
把 A 矩阵的元素皆取共轭复数后,再取转置;或将 A 矩阵的元素先取转置后,再取共轭复数,所得到的新矩阵即为共轭转置矩阵,以
表示。
print(np.matrix(B).H)
输出:
matrix([[1.-1.j, 3.+2.j],
[2.+1.j, 4.-5.j]])
print(np.conj(B).T)
输出:
[[1.-1.j, 3.+2.j],
[2.+1.j, 4.-5.j]]
17. 对称矩阵 - Symmetrix matrix
在方阵的前提下,如果矩阵 A 的转置等于 A 本身,称之为对称矩阵。
def symmetrixIO(mat):
return np.sum(mat != mat.T) == 0
print(symmetrixIO(C))
输出:
False
18. 反对称矩阵 - Skew symmetrix matrix
在方阵的前提下,如果矩阵 A 的转置矩阵恰为 A 的相反矩阵 -A,则称之为反对称矩阵。
def skew_symmetrixIO(mat):
return np.sum(-mat != mat.T) == 0
print(skew_symmetrixIO(
np.array([[ 0, 2, 5],
[-2, 0, -7],
[-5, 7, 0]])
))
输出:
True
19. 厄米特矩阵 - Hermitian matrix
在方阵的前提下,矩阵 A 的共轭转置矩阵恰好等于原矩阵 A,则称之为厄米特矩阵。
def hermitianIO(mat):
return np.sum(mat != np.conj(mat).T) == 0
print(hermitianIO(
np.array([[ 1, 1+1.j, 5],
[1-1.j, 2, 1.j],
[ 5, -1.j, 7]])
))
输出:
True
20. 正交矩阵 - Orthogonal matrix
正交的意思就是指两个向量彼此互相垂直,而正交矩阵则进一步把垂直的概念拓展到矩阵中,矩阵里的每一个行和列向量必须彼此互相垂直,而且向量长度是1的情况下,才称之为正交矩阵。总结矩阵的规则后,我们得到在方阵的前提下,满足以下条件则称之为正交矩阵:
因此很明显的,一个正交矩阵必定是个方阵,而这一系列的条件判断同样可以被写成一个函数用来检测矩阵是否正交。
from Code.linalg import *
def orthogonalIO(mat, decimal=4):
# A^T = A^(-1)
cond1 = np.sum(np.round(mat.T, decimal) !=
np.round(inverse(mat), decimal)) == 0
# A^T . A = A . A^T
cond2 = np.sum(np.round(np.dot(mat.T, mat), decimal) !=
np.round(np.dot(mat, mat.T), decimal)) == 0
# |A| = +-1
cond3 = np.round(np.abs(determinant(mat)), decimal) == 1
return np.sum([cond1, cond2, cond3]) == 3
B = np.array([[-0.23939017, 0.58743526, -0.77305379],
[ 0.81921268, -0.30515101, -0.48556508],
[-0.52113619, -0.74953498, -0.40818426]])
print(orthogonalIO(B, decimal=4))
输出:
True
为了更深入了解矩阵的底层运算,行列式值和逆矩阵都用的是我们自定义的函数,如果想看具体实现方法,欢迎持续关注发布的文章!在这个函数中我们首先就遇到了一个很简单的理论与实际代码之间的差异,那就是小数点近似问题。由于任意行列向量必须是单位向量,常常在实际情况是一个近似的结果,因此在检测正交与否的时候也必须采用近似的方式操作。Github源代码github.com
转发、分享!微信公众号每周更新,同时每周腾讯会议在线免费分享! 关注公众号,点击按钮“AI大会”即可加入微信群(公布腾讯会议房间号),和清华师兄一起面对面讨论Ai。
微信公众号
-
matlab怎么定义矩阵变量_matlab文档(一)matlab入门
2020-11-21 20:10:56也就是说运算时间和运算量之间的关系不是线性增长的。 3. 斜杠(/,mrdivide)与反斜杠(\,mldivide)。 4. matlab可以不使用括号和引号来接受字符参数,比如,matlab将help mean解释为help(‘mean’),这些能够减少程序...距离上一篇文章的发布有一个多月了。现在接上,来分享一些MATLAB软件的内容,同时自己也来更加深入地学习这个软件。
01
前言
网上的学习视频很多了,我就从matlab官网的文档(2019a版)入手,对某些点进行选择性的介绍。具体的计算,我一般不会说,百度比我好用多了,我会说点初学者不常用的、那些我不说你可能不会在意的东西。
今天第一篇,介绍第一篇内容:
首先是getstart_zh_CN.pdf,它给初学者介绍了matlab的基础功能以及常用的运算。
话不多说,现真身:
MATLAB(“matrix laboratory“的缩写)功能强大,它的目标不在于软件的创造编程,它是一个解决工程和科学问题的工具;它基于矩阵运算,而矩阵在科学研究中是重要的存在;它含有其他软件及语言的接口。这是我个人对于它的一句话描述。
02
界面
界面中包含当前文件夹(Current Folder),工作区间(Workspace),编辑器(Editor),命令行窗口(Command Window)。
1. 在命令行窗口中使用向上和向下箭头键可以调用以前的命令。
2. 输入format compact,命令行窗口中不会显示多个空行,可以在窗口中显示更多信息。恢复使用format loose。
03
存储和显示
1. 所有数字变量都是多维数组,如果你输入:
a=1;
那么matlab会认为它是一个1x1的矩阵(别问我有啥区别,官方文档说的)。
2. 另外,你以为你定义这个a是一个整数,那么存储空间中也是整数,哈哈,错了,matlab将数字存储为浮点值,只是它以整数显示罢了。默认的显示格式是short,对于某些变量,matlab会设定最优的显示方式,但是我们可以通过format命令修改显示格式。
可以输入pi(派)来看看效果。
有时候,显示的效果还是比较重要的,这可能会影响你的判断,比如,如果你得到一个结果,显示是0.0000,你知道后面一定有数,那么你打算给它乘个一万还是一千万?这时候,你可以通过修改格式:format long来看具体是多少。
04
脚本和实时脚本:
脚本,英文是script,可译为手稿、剧本,这能有助于理解脚本的意思。
他就是个写多行代码的地方。
实时脚本,用的很少,它是可以写代码和汉字的地方,可以边写文字边写代码,能方便查看代码的结果。其实吧,美观是真美观,挺好看的,但是我感觉不太方便,了解过,但没真正用过。
帮助文档:
需要记住doc、help这两个命令,重要性No.1、No.1、No.1,重要事情说三遍。
05
矩阵求解
1. matlab有求矩阵的逆的函数:inv。但是求解线性方程组Ax=b时,从执行时间和数值精度而言,最佳方法是使用反斜杠,即x=A,而不要用x=inv(A)*b。
2. 对于大型双精度数组(约10000个元素),许多的矩阵运算(矩阵乘、矩阵幂、det、rcond等)会自动进行多线程执行,可以大幅增加速度。也就是说运算时间和运算量之间的关系不是线性增长的。
3. 斜杠(/,mrdivide)与反斜杠(\,mldivide)。
4. matlab可以不使用括号和引号来接受字符参数,比如,matlab将help mean解释为help(‘mean’),这些能够减少程序的书写工作量、增加可读性(最主要的是看着很高端)。
——手动分割————
第一篇pdf文档内容很多(事实上每一篇都是几百页),这里只挑了点我认为值得分享的内容做介绍。想看pdf文档原文可以从官网下,或者点击原文加Q群获取。
最后的最后:才疏学浅,欢迎交流;佛系更新,谨慎关注。
-
离散实验五 判断关系R 是否为等价关系(给定 R 的关系矩阵,据此判断所给关系 R 是否为等价关系)
2021-07-15 21:56:40从给定的关系矩阵来断判关系 R是否为自反是很容易的。 若M(R的关系矩阵)的主对角线元素均为 1,则 R是自反关系;若 M(R的关系矩阵)的主对角 线元素均为 0,则R是反自反关系;若M(R的关系矩阵)的主对角线元素既... -
【集合论】关系闭包 ( 关系闭包求法 | 关系图求闭包 | 关系矩阵求闭包 | 闭包运算与关系性质 | 闭包复合...
2020-10-08 19:24:26一、闭包求法 、 二、求闭包示例 ( 关系图角度 ) 、 三、求闭包示例 ( 关系矩阵角度 ) 、 四、闭包运算与关系性质 、 五、闭包复合运算 、 -
基于关系矩阵格的快速判定 (2011年)
2021-05-07 03:57:22由于格定义在偏序集上,利用偏序关系与关系矩阵的对应,分析关系矩阵的性质,定义了一个K阶子矩阵,通过K阶子矩阵判断该偏序集是否构成格,并在Matlab7做了实例验证,该方法思路规范、便于计算机程序化. -
「管理数学基础」4.3 模糊数学:模糊关系与模糊矩阵、模糊关系的运算与合成、模糊等价关系
2020-12-12 21:05:11模糊关系与模糊矩阵及其运算。 -
正定矩阵与半正定矩阵定义与判别
2020-10-13 09:13:391.正定矩阵和半正定矩阵 若所有特征值均大于零,则称为正定。 定义:A是n阶方阵,如果对任何非零...根据正定矩阵的定义及性质,判别对称矩阵A的正定性有两种方法: 求出A的所有特征值。若A的特征值均为正数,则A... -
邻接矩阵的定义和例子
2018-04-07 21:41:52根据图的定义可知,图的...在图的邻接矩阵表示法中:① 用邻接矩阵表示顶点间的相邻关系② 用一个顺序表来存储顶点信息图的矩阵设G=(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下性质的n阶方阵:【例】下图中... -
逆矩阵的定义与性质.doc
2020-12-20 22:04:32逆矩阵的定义与性质PAGEPAGEPAGE 4第三讲 §2.3 逆矩阵2.3.1 逆矩阵的定义与性质我们已经定义了矩阵的加、减、数乘等运算,但是如果已知、,如何由矩阵方程求出这个矩阵呢?逆矩阵的概念将会很好地解决这个问题.定义... -
怎么在matlab定义一个函数,而这个函数输入值是矩阵,并且输出的值也是相应的矩阵?
2021-04-18 03:35:48endplot(x,y) 答:已经有专门的函数了 B=chol(A) 上三角矩阵B和正定矩阵A满足关系A=B'B 所以你要的L就是B' —————————————————————— 我自己编了一个,你拿去用好了 function L=Cholesky(A) n=... -
python 空矩阵
2020-11-29 13:25:28稀疏矩阵不必以标准矩阵形式表示。 有很多方法可以缓解这种标准形式给我们的计算系统带来的压力,而且恰恰是这种情况使得流行的python机器学习主力scikit...稀疏矩阵带来的一个问题是,它们可能会占用很大的内存。 ... -
矩阵转置与矩阵对称性的关系
2022-02-18 10:25:47矩阵转置与矩阵对称性的关系 -
matlab矩阵的定义和运算
2016-04-03 16:55:01一、矩阵的表示 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格或逗号隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; d、矩阵的元素可以是数值、变量、... -
协方差与协方差矩阵的定义及计算
2020-11-11 20:01:10协方差与协方差矩阵的定义及计算公式 -
余子式和余子式 伴随矩阵定义 性质 二阶矩阵求伴随矩阵 伴随矩阵理解(列排)
2018-10-29 00:43:12在线性代数中,一个方形矩阵的伴随矩阵是一个类似于逆矩阵的概念。如果矩阵可逆,那么它的逆矩阵和它的伴随矩阵之间只差一个系数。然而,伴随矩阵对不可逆的矩阵也有定义,并且不需要用到除法。... -
我所理解的协方差以及协方差矩阵
2021-01-20 12:05:25文章目录一、 协方差1、为什么需要协方差2、协方差的定义二、协方差矩阵1、协方差矩阵的定义2、协方差矩阵公式推导参考博客 一、 协方差 1、为什么需要协方差 定义:假如有N个样本的集合{X1,X2,…XNX_1,X_2,…X_NX1... -
模糊数学笔记:四、模糊矩阵与模糊关系
2020-07-17 00:07:01定义 : 如果对于任意 i=1,2,⋯ ,m;j=1,2,⋯ ,n,i=1,2, \cdots, m ; j=1,2, \cdots, n,i=1,2,⋯,m;j=1,2,⋯,n, 都有 rij∈[0,1],r_{i j} \in[0,1],rij∈[0,1], 则称R=(ri,j)m×nR=(r_{i,j})_{m\times n}R=(ri,j... -
矩阵相似与矩阵等价的关系
2020-11-30 10:44:20矩阵相似的定义和矩阵等价的定义可以参考线性代数和矩阵论相关的章节。 对于矩阵相似问题来说,P^(-1)AP = B,将左侧的P逆乘到B的右侧,AP = P*B,矩阵A表示将线性空间V映射到线性空间V。该式的含义就是选取一组新的... -
矩阵论引论第2版 [陈祖明,周家胜 编著] 2012年版
2019-05-11 21:18:46矩阵论引论 第二版 出版时间:2012年版 内容简介 《高等学校研究生教材:矩阵论引论(第2版...6.1.2 Kronecker积的性质 6.2 Kronecker积的应用 6.2.1 矩阵的拉直及其与直积的关系 6.2.2 直积的应用 习 题 6.1参考文献 -
离散数学4___关系矩阵
2016-03-13 21:17:37关系矩阵的 定义 注意这里 mxn阶的矩阵, 是指m 行, n列的 矩阵 -
矩阵等价、相似、合同的定义及性质
2019-04-27 18:35:01定义 如果矩阵A经过有限次初等行变换变成矩阵B,就成矩阵A与B行等价。 如果矩阵A经过有限次初等列变换变成矩阵B,就成矩阵A与B列等价。 如果矩阵A经过有限次初等变换变成矩阵B,就称矩阵A与B等价。 性质 反身... -
二元关系的矩阵和图表示
2017-09-04 00:18:21两个事物之间的关系称之为二元关系。在数学上,二元关系指的是这样的一个集合S,它的所有元素都为二元有序对。它反映的是有序对中第一个元素组成的集合与第二个元素组成的集合之间的关系。举个例子,集合S={,} 就... -
传递闭包(用关系矩阵求传递闭包怎么求)
2021-04-23 11:54:44相信很多人对于传递闭包(用关系矩阵求传递闭包怎么求)并不是非常的了解,因此小编在这里为您详解的讲解一下相关信息!方法:warshall法,即运行n次,每次使得MR[n][i],MR[i][n]都为1时使得MR[i][j]为1,否则还是为MR... -
协方差矩阵的定义性质与python实现
2018-12-17 22:01:34最近写统计学习的作业,要用到降维方法,一股脑把 机器学习实战 上的代码敲上去就好了,要求中还要尝试其他降维方法,查了好多发现LDA可以,但是LDA要用到计算协方差矩阵,这玩意我之前就糊里糊涂的,协方差是变量... -
相关矩阵
2020-04-28 20:43:40相关矩阵也叫相关系数矩阵,其是由矩阵各列间的相关系数构成的。也就是说,相关矩阵第i行第j列的元素是原矩阵第i列和第j列的相关系数。 -
【矩阵论笔记】内积空间定义、长度、Cauchy-Schwartz、三角不等式
2020-05-24 20:46:40定义 同一个线性空间可定义不同的内积。 选择 复线性空间上的内积 实内积空间性质 向量长度 向量长度性质 Cauchy-Schwartz不等式 Cauchy-Schwartz不等式推论 度量矩阵 只要告诉一组基下任意两个...