用python写解高斯消元法的程序,输出必要的过程
时间: 2024-11-13 18:21:49 浏览: 9
好的,下面是一个用Python编写的简单版本的高斯消元法程序,它按照标准步骤逐步进行计算,并输出每一步的操作结果:
```python
import numpy as np
def gauss_elimination(matrix, constant_vector):
n = matrix.shape[0] # 系数矩阵的行数
identity_matrix = np.eye(n) # 初始化单位矩阵
augmented_matrix = np.concatenate((matrix, constant_vector.reshape(-1, 1)), axis=1) # 增广矩阵
print("\n原始增广矩阵:\n", augmented_matrix)
# 高斯消元阶段
for i in range(n):
pivot_row = augmented_matrix[i] # 当前行作为主元行
max_abs_val_index = np.argmax(np.abs(pivot_row[:-1])) + i # 找到最大绝对值索引
# 如果需要交换行
if i != max_abs_val_index:
augmented_matrix[[i, max_abs_val_index]] = augmented_matrix[[max_abs_val_index, i]]
print(f"交换第{i+1}行与第{max_abs_val_index+1}行:\n", augmented_matrix)
for j in range(i+1, n):
ratio = augmented_matrix[j, i] / augmented_matrix[i, i] # 消元因子
augmented_matrix[j] -= ratio * augmented_matrix[i]
print(f"消除第{j+1}行对第{i+1}行的影响:\n", augmented_matrix)
# 回代阶段
solutions = np.zeros(n) # 存储解向量
for k in range(n-1, -1, -1):
solutions[k] = augmented_matrix[k, -1] / augmented_matrix[k, k] # 计算每个未知数的值
for l in range(k+1, n):
augmented_matrix[l, k] /= augmented_matrix[k, k] # 更新剩余行
augmented_matrix[k, :k] = np.zeros(k) # 清除已知部分
augmented_matrix[k, k:] = solutions[:k+1] # 保存已求解部分
print(f"计算第{k+1}个未知数并更新剩余部分:\n", augmented_matrix)
return solutions
# 示例:
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([10, 11, 12])
solution = gauss_elimination(A, b)
print("\n最终解:\n", solution)
阅读全文