将着两段代码整合(改成这种形式:分别定义两个函数:一个是高斯消去法解线性方程组、一个是LU分解解线性方程组):#Gauss消去法 import numpy as np # 构造增广矩阵 A = np.array([[1, -1, 1, 0], [4, 1, 0, 8], [0, 1, 4, 16]],dtype=float) # 高斯消元过程 n = len(A) for i in range(n): # 主元归一化 if A[i][i] == 0: print("主元为0,无法进行消元") break A[i] = A[i] / A[i][i] for j in range(i + 1, n): A[j] = A[j] - A[i] * A[j][i] # 回代过程 x = np.zeros(n, dtype=float) for i in range(n - 1, -1, -1): x[i] = A[i][-1] - np.dot(A[i][i + 1:-1], x[i + 1:]) print("线性方程组的解为:", x) #LU分解 import numpy as np # 构造增广矩阵 A = np.array([[1, -1, 1, 0], [4, 1, 0, 8], [0, 1, 4, 16]], dtype=float) # LU分解 n = len(A) L = np.zeros((n, n)) U = np.zeros((n, n)) for i in range(n): # 计算L的第i列和U的第i行 for j in range(i, n): U[i][j] = A[i][j] - sum(L[i][k] * U[k][j] for k in range(i)) for j in range(i+1, n): L[j][i] = (A[j][i] - sum(L[j][k] * U[k][i] for k in range(i))) / U[i][i] L[i][i] = 1 # 解方程 b = A[:, -1] y = np.zeros(n) for i in range(n): y[i] = b[i] - sum(L[i][j] * y[j] for j in range(i)) x = np.zeros(n) for i in range(n-1, -1, -1): x[i] = (y[i] - sum(U[i][j] * x[j] for j in range(i+1, n))) / U[i][i] print(x)
时间: 2023-11-13 13:04:37 浏览: 38
可以将两段代码整合为以下两个函数:
```
import numpy as np
def gauss_elimination(A):
n = len(A)
for i in range(n):
if A[i][i] == 0:
print("主元为0,无法进行消元")
break
A[i] = A[i] / A[i][i]
for j in range(i + 1, n):
A[j] = A[j] - A[i] * A[j][i]
x = np.zeros(n, dtype=float)
for i in range(n - 1, -1, -1):
x[i] = A[i][-1] - np.dot(A[i][i + 1:-1], x[i + 1:])
return x
def LU_decomposition(A):
n = len(A)
L = np.zeros((n, n))
U = np.zeros((n, n))
for i in range(n):
for j in range(i, n):
U[i][j] = A[i][j] - sum(L[i][k] * U[k][j] for k in range(i))
for j in range(i+1, n):
L[j][i] = (A[j][i] - sum(L[j][k] * U[k][i] for k in range(i))) / U[i][i]
L[i][i] = 1
b = A[:, -1]
y = np.zeros(n)
for i in range(n):
y[i] = b[i] - sum(L[i][j] * y[j] for j in range(i))
x = np.zeros(n)
for i in range(n-1, -1, -1):
x[i] = (y[i] - sum(U[i][j] * x[j] for j in range(i+1, n))) / U[i][i]
return x
```
其中 `gauss_elimination` 函数接收一个增广矩阵作为参数,返回线性方程组的解向量。`LU_decomposition` 函数同样接收一个增广矩阵作为参数,返回线性方程组的解向量。