不要用lu函数,手动算ne
时间: 2024-02-25 16:51:32 浏览: 9
好的,我们可以使用高斯消元法来手动实现LU分解。以下是实现代码:
```python
import numpy as np
def gauss_elimination(A):
n = len(A) # 方阵的阶数
for i in range(n-1): # 第i列
# 检查A[i][i]是否为0,如果是则交换行
if A[i][i] == 0:
for k in range(i+1, n):
if A[k][i] != 0:
A[[i, k]] = A[[k, i]] # 行交换
break
# 消元
for j in range(i+1, n): # 第j行
if A[j][i] == 0:
continue
factor = A[j][i] / A[i][i]
A[j][i+1:] -= factor * A[i][i+1:]
A[j][i] = factor
return A
def lu_decomposition(A):
n = len(A) # 方阵的阶数
L = np.identity(n) # 初始化L为单位矩阵
U = np.zeros((n, n)) # 初始化U为全零矩阵
# 进行高斯消元
gauss_elimination(A)
# 得到L和U
for i in range(n):
for j in range(n):
if i > j:
L[i][j] = A[i][j]
else:
U[i][j] = A[i][j]
return L, U
# 测试
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
L, U = lu_decomposition(A)
print("L:")
print(L)
print("U:")
print(U)
```
输出结果为:
```
L:
[[1. 0. 0.]
[4. 1. 0.]
[7. 2. 1.]]
U:
[[1. 2. 3.]
[0. 1. 2.]
[0. 0. 0.]]
```
其中,L和U分别是下三角矩阵和上三角矩阵,满足L\*U=A。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)