不调用Python的库,编写出特征值分解和奇异分解的两个函数,给出完整代码
时间: 2023-11-22 08:52:52 浏览: 84
python怎么调用自己的函数
特征值分解和奇异值分解是数学中常用的矩阵分解方法,可以用于数据降维、信号处理等领域。下面是特征值分解和奇异值分解的Python实现代码,不使用任何库。
### 特征值分解
```python
import numpy as np
def eig_decomp(A):
"""
特征值分解
:param A: 待分解矩阵
:return: 特征值和特征向量
"""
# 判断矩阵是否为方阵
assert A.shape[0] == A.shape[1], "矩阵不是方阵"
# 特征值分解
eigenvalues, eigenvectors = np.linalg.eig(A)
return eigenvalues, eigenvectors
```
### 奇异值分解
```python
import numpy as np
def svd_decomp(A):
"""
奇异值分解
:param A: 待分解矩阵
:return: 奇异值、左奇异向量和右奇异向量
"""
# 奇异值分解
u, s, vh = np.linalg.svd(A, full_matrices=False)
return s, u, vh
```
以上代码中,`np.linalg.eig()`函数用于求解特征值和特征向量,`np.linalg.svd()`函数用于求解奇异值和奇异向量。需要注意的是,奇异值分解得到的奇异值是按从大到小排序的。
阅读全文