数学中常见矩阵的特点、性质

写在前面

本文对于自己遇到的、机器人领域涉及到的矩阵做了总结。

以下所有的矩阵都是针对于矩阵A来说的

一、正定矩阵

1.1 定义

首先从定义开始对PD和PSD有一个初步的概念:

正定矩阵(PD):

给定一个大小为 n ∗ n n*n nn 的实对称矩阵 A ,若对于任意长度为 n 的非零向量 X X X,有 X T A X > 0 X^TAX > 0 XTAX>0 恒成立,则矩阵 A 是一个正定矩阵。

半正定矩阵(PSD)

给定一个大小为 n ∗ n n*n nn 的实对称矩阵 A ,若对于任意长度为 n 的非零向量 X X X,有 X T A X ≥ 0 X^TAX ≥ 0 XTAX0 恒成立,则矩阵 A 是一个半正定矩阵。

1.2 特点

A的所有特征值均为正数。

1.3 判断方法

判断一个矩阵是否为正定矩阵有两种方法:

1、求出A的所有特征值。若A的特征值均为正数,则A是正定的;若A的特征值均为负数,则A为负定的。

2、计算A的各阶主子式。若A的各阶主子式均大于零,则A是正定的;若A的各阶主子式中,奇数阶主子式为负,偶数阶为正,则A为负定的。

正定矩阵(positive definite, PD) 和半正定矩阵(positive semi-definite, PSD)。

参考链接:
[1] tusamar. 怎么判断一个矩阵是否为正定矩阵? [EB/OL]. https://zhidao.baidu.com/question/1883273909693964428.html, 2019-10-22/2021-08-08.
[2] marsggbo. 如何理解正定矩阵和半正定矩阵 [EB/OL]. https://zhuanlan.zhihu.com/p/81169491, 2019-09-14/2021-08-08.

二、奇异矩阵

1.1 特点

奇异矩阵就是对应的行列式等于0的矩阵。奇异矩阵不可求逆。

对一个 n 行 n 列的非零矩阵 A,如果存在一个矩阵 B 使 AB = BA =I( I是单位矩阵),则称 A 是可逆的,也称 A 为非奇异矩阵

可逆矩阵就是非奇异矩阵,非奇异矩阵也是可逆矩阵。

1.2 判断方法

方阵的行列式|A|是否等于0,若等于0,称矩阵A为奇异矩阵;若不等于0,称矩阵A为非奇异矩阵。

参考链接:
[1] wongHome. 奇异矩阵与非奇异矩阵 [EB/OL]. https://blog.csdn.net/qq_39779233/article/details/119334598, 2021-08-02/2021-08-06.

三、正交矩阵

正交矩阵: Orthogonal Matrix (必为方阵)

3.1 特点

A A T = A T A = I AA^T = A^TA = I AAT=ATA=I
A T = A − 1 A^T = A^{-1} AT=A1

∣ A ∣ = 1 或 − 1 |A|=1或 -1 A=11

参考链接:
[1] 我在呀. 正交矩阵(Orthogonal Matrix) [EB/OL]. https://blog.csdn.net/qq_44884706/article/details/89489189, 2019-04-24/2021-08-08.

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 邻接矩阵是用来表示图的常用数据结构,它是一个二维的矩阵,其每个元素表示两个顶点之间是否有边相连。如果顶点 $i$ 和顶点 $j$ 之间有边相连,则邻接矩阵第 $i$ 行第 $j$ 列的元素为 $1$,否则为 $0$。 下面是求无向图邻接矩阵的 C 语言代码: ```c #include <stdio.h> #define MAXV 100 // 最大顶点数 int matrix[MAXV][MAXV]; // 邻接矩阵 int V, E; // 顶点数和边数 int main() { int u, v; scanf("%d %d", &V, &E); // 输入顶点数和边数 for (int i = 0; i < E; i++) { scanf("%d %d", &u, &v); // 输入边 matrix[u][v] = matrix[v][u] = 1; // 在邻接矩阵标记边 } // 输出邻接矩阵 for (int i = 1; i <= V; i++) { for (int j = 1; j <= V; j++) { printf("%d ", matrix[i][j]); } printf("\n"); } return 0; } ``` 这段代码首先定义了一个 $100 \times 100$ 的二维数组 `matrix`,表示邻接矩阵。然后从标准输入读入顶点数 `V` 和边数 `E`,并利用循环读入每一条边,将邻接矩阵对应的元素标记为 $1$。最后再利用循环输出邻接矩阵即可。 ### 回答2: 离散数学数学的一个分支领域,主要研究离散结构和离散对象的性质和关系。邻接矩阵是描述无向图或有向图的常用方式之一,可以通过矩阵的形式表示图各个顶点之间的连接情况。 在C语言,可以使用二维数组来表示邻接矩阵。假设有一个图的顶点数为n,那么可以定义一个n * n大小的二维数组来表示邻接矩阵。 首先,需要定义一个函数来创建邻接矩阵,函数的参数为图的顶点数n和一个存放边信息的数组edges[]。edges数组用来表示每条边连接的两个顶点。 ```c void createAdjMatrix(int n, int edges[][2]) { int adjMatrix[n][n]; // 定义n * n大小的二维数组用来存储邻接矩阵 // 初始化邻接矩阵 for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { adjMatrix[i][j] = 0; // 初始化所有元素为0 } } // 根据edges数组的信息来更新邻接矩阵 for(int i = 0; i < n; i++) { int src = edges[i][0]; // 起始顶点 int dest = edges[i][1]; // 终止顶点 adjMatrix[src][dest] = 1; // 表示src和dest之间有边 // 如果是无向图,还需要添加下面这行代码 // adjMatrix[dest][src] = 1; } // 输出邻接矩阵 for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { printf("%d ", adjMatrix[i][j]); } printf("\n"); } } ``` 以上的代码将会根据传入的顶点数和边信息创建一个邻接矩阵,并输出该矩阵。 需要注意的是,上述代码只给出了无向图的情况,如果是有向图,则不需要添加注释掉的那句代码。 使用该函数时,可以在主函数定义一个边信息数组,并传入该函数进行调用: ```c int main() { int n = 5; // 顶点数 int edges[][2] = {{0, 1}, {1, 2}, {2, 3}, {3, 4}, {4, 0}}; // 边信息数组 createAdjMatrix(n, edges); // 创建并输出邻接矩阵 return 0; } ``` 以上就是用C语言求解邻接矩阵的一个简单示例。 ### 回答3: 离散数学是研究离散对象和离散关系的数学分支,而邻接矩阵是用于表示图的一种常见方式。C语言是一种广泛应用于计算机编程的编程语言,因此可以利用C语言来实现邻接矩阵。 邻接矩阵是一个二维数组,用于表示图各个顶点之间的连接关系。具体实现邻接矩阵的方式可以通过使用C语言的二维数组来表示,其矩阵的行和列分别对应图的各个顶点。 以下是一个用C语言实现邻接矩阵的简单示例: ```C #include <stdio.h> #define MAX_VERTICES 100 int adjMatrix[MAX_VERTICES][MAX_VERTICES]; // 定义邻接矩阵 void addEdge(int u, int v) { adjMatrix[u][v] = 1; // 将顶点u与顶点v的连接关系设为1 adjMatrix[v][u] = 1; // 因为是无向图,所以顶点v与顶点u的连接关系也设为1 } int main() { int n, m; // n表示顶点数,m表示边数 scanf("%d %d", &n, &m); // 输入顶点数和边数 for (int i = 0; i < m; i++) { int u, v; scanf("%d %d", &u, &v); // 输入边的两个顶点u和v,表示u与v之间存在一条边 addEdge(u, v); // 在邻接矩阵添加边的连接关系 } // 打印邻接矩阵 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%d ", adjMatrix[i][j]); } printf("\n"); } return 0; } ``` 以上的代码实现了一个简单的邻接矩阵,通过输入顶点数和边数,以及各条边的起始顶点和结束顶点,即可得到对应的邻接矩阵。利用C语言的二维数组特性,可以方便地表示和操作邻接矩阵,并且适用于较小规模的图结构。当图规模较大时,可能需要考虑其他数据结构和算法的优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值