不调用Python原有的库,编写出特征值分解和奇异分解的两个函数,给出完整代码
时间: 2023-11-22 09:52:51 浏览: 66
特征值分解(Eigenvalue decomposition)和奇异值分解(Singular value decomposition)都是线性代数中的重要概念,可以用于解决很多实际问题。下面分别给出这两个函数的 Python 实现。
特征值分解:
```python
import numpy as np
def eigen_decomp(A):
"""
计算一个实对称矩阵 A 的特征值和特征向量。
参数:
A: numpy.ndarray, 一个 n x n 的实对称矩阵。
返回:
eigenvalues: numpy.ndarray, 一个长度为 n 的一维数组,表示 A 的特征值。
eigenvectors: numpy.ndarray, 一个 n x n 的矩阵,每列为 A 的一个特征向量。
"""
n = A.shape[0]
eigvals, eigvecs = np.linalg.eig(A)
idx = eigvals.argsort()[::-1]
eigvals = eigvals[idx]
eigvecs = eigvecs[:,idx]
return eigvals, eigvecs
```
奇异值分解:
```python
import numpy as np
def svd_decomp(A):
"""
计算一个 m x n 的矩阵 A 的奇异值分解。
参数:
A: numpy.ndarray, 一个 m x n 的矩阵。
返回:
U: numpy.ndarray, 一个 m x m 的矩阵,每列为 A A^T 的一个特征向量。
s: numpy.ndarray, 一个长度为 min(m, n) 的一维数组,表示 A 的奇异值。
V: numpy.ndarray, 一个 n x n 的矩阵,每列为 A^T A 的一个特征向量。
"""
U, s, V = np.linalg.svd(A)
return U, s, V
```
以上两个函数都使用了 NumPy 库的函数来实现特征值分解和奇异值分解。在实际使用中,我们可以直接调用这两个函数来计算矩阵的特征值、特征向量或奇异值分解。
阅读全文