那它返回的P@QQ是什么
时间: 2023-10-09 11:06:12 浏览: 44
程序最终返回的是 $PQQP^{-1}$,它是原本的方阵 $M$ 经过相似变换后得到的上三角矩阵。其中,$P$ 是一个正交矩阵,$QQ$ 是一个上三角矩阵,$P^{-1}$ 是 $P$ 的逆矩阵。这里的 $P@QQ$ 表示矩阵乘法,即将 $P$ 和 $QQ$ 相乘,得到一个新的上三角矩阵。而 $P@QQP^{-1}$ 表示先将 $P$ 乘上 $QQ$,再将结果乘上 $P$ 的逆矩阵 $P^{-1}$,得到最终的上三角矩阵。
相关问题
def trigonalise(M): n, p = M.shape assert n==p if n==1: return sp.eye(1) # Recherche d'un vecteur propre step1 = M.eigenvects() E1 = step1[0][2][0] # Vérification qu'on obtient une matrice inversible for i in range(n): P = sp.zeros(n, n) P[:, 0] = E1 l = list(range(n)) l.remove(i) P[:, 1:] = sp.eye(n)[:, l] if P.det() != 0: break # Récurrence Q = trigonalise((P.inv()@M@P)[1:, 1:]) QQ = sp.Matrix(sp.BlockDiagMatrix(sp.eye(1), Q)) return P@QQ这段代码在干什么
这段代码的功能是将给定的方阵 $M$ 转化为三角形式。它使用了类似于 QR 分解的方法,通过不断左乘和右乘正交矩阵将 $M$ 转化为上三角矩阵。具体来说,它的实现过程如下:
1. 如果 $M$ 是一个 $1\times 1$ 的矩阵,直接返回单位矩阵;
2. 找到 $M$ 的一个特征向量 $E_1$,并构造一个正交矩阵 $P$,使得 $P^{-1}MP$ 的第一行和第一列全是 $0$(具体构造方法见代码);
3. 递归地对 $P^{-1}MP$ 的右下角子矩阵进行三角化,得到一个上三角矩阵 $Q$;
4. 将 $P$ 和 $Q$ 拼接成一个新的上三角矩阵 $QQ$;
5. 返回 $M$ 的三角形式 $PQQP^{-1}$。
其中,$sp$ 是 Python 的 sympy 库,它提供了矩阵计算、特征值特征向量计算等功能。
def trigonalise(M): n, p = M.shape assert n==p if n==1: return sp.eye(1) # Recherche d'un vecteur propre step1 = M.eigenvects() E1 = step1[0][2][0] # Vérification qu'on obtient une matrice inversible for i in range(n): P = sp.zeros(n, n) P[:, 0] = E1 l = list(range(n)) l.remove(i) P[:, 1:] = sp.eye(n)[:, l] if P.det() != 0: break # Récurrence Q = trigonalise((P.inv()@M@P)[1:, 1:]) QQ = sp.Matrix(sp.BlockDiagMatrix(sp.eye(1), Q)) return P@QQ这段代码在干嘛
这段代码实现了将一个方阵三角化的功能,使用了 Sympy 库中的一些函数和数据类型。
具体来说,函数 `trigonalise(M)` 的输入是一个 Sympy 矩阵 `M`,输出是一个上三角矩阵。其中,`n, p = M.shape` 表示矩阵 `M` 的行数和列数,`assert n==p` 判断矩阵 `M` 是否为方阵,如果不是则抛出异常。如果矩阵 `M` 的大小为 1x1,则返回一个 1x1 的单位矩阵。
接下来,代码使用 `eigenvects()` 函数计算矩阵 `M` 的所有特征向量和特征值,并取其中一个特征向量 `E1`。然后,代码通过构造一个矩阵 `P`,使得 `P` 的第一列为特征向量 `E1`,其余列为单位向量,从而保证 `P` 的行列式不为零。接着,代码计算矩阵 `P.inv() @ M @ P` 的后 n-1 行和后 n-1 列,将其递归地传递给 `trigonalise()` 函数,得到下一个上三角矩阵 `Q`。最后,代码将 `Q` 与一个单位矩阵合并为一个块对角矩阵 `QQ`,并将 `P` 与 `QQ` 相乘,得到当前矩阵的上三角矩阵。
需要注意的是,这段代码中使用了 Sympy 库中的一些特殊数据类型和函数,例如 `Matrix`、`BlockDiagMatrix`、`eigenvects()`、`inv()` 等,这些函数和数据类型的使用方法和 NumPy 库中的函数和数据类型有所不同,需要先了解其基本用法。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)