用列主元高斯消元法求解下列线性方程组的解和系数矩阵A的行列式值 要求: (1) 线性方程组的维数n、系数矩阵A的元素、列向量b的元素从键盘输入; (2) 将每一次消元过程得到的增广矩阵打印输出; (3) 最后输出方程组的解和系数矩阵A的行列式值。
时间: 2023-12-10 12:37:33 浏览: 87
以下是使用 Python 实现的代码:
```python
import numpy as np
# 从键盘输入线性方程组的维数n、系数矩阵A的元素、列向量b的元素
n = int(input("请输入线性方程组的维数:"))
A = np.zeros((n, n))
b = np.zeros((n, 1))
print("请按顺序输入系数矩阵A的元素:")
for i in range(n):
A[i] = input().split()
A[i] = [float(x) for x in A[i]]
print("请输入列向量b的元素:")
for i in range(n):
b[i] = float(input())
# 将增广矩阵打印输出
augmented_matrix = np.concatenate((A, b), axis=1)
print("增广矩阵为:")
print(augmented_matrix)
# 列主元高斯消元法求解线性方程组
det_A = 1.0
for k in range(n-1):
# 选取主元
max_index = np.argmax(np.abs(A[k:n, k])) + k
if max_index != k:
A[[k, max_index]] = A[[max_index, k]]
b[[k, max_index]] = b[[max_index, k]]
det_A *= -1
# 消元
for i in range(k+1, n):
factor = A[i, k] / A[k, k]
A[i, k+1:] -= factor * A[k, k+1:]
b[i] -= factor * b[k]
det_A *= A[k, k]
# 打印每一次消元过程得到的增广矩阵
print("第%d次消元后的增广矩阵为:" % (k+1))
print(np.concatenate((A, b), axis=1))
# 计算解并输出
x = np.zeros((n, 1))
x[n-1] = b[n-1] / A[n-1, n-1]
for i in range(n-2, -1, -1):
x[i] = (b[i] - np.dot(A[i, i+1:], x[i+1:])) / A[i, i]
print("线性方程组的解为:")
print(x)
# 计算系数矩阵A的行列式值并输出
det_A *= A[n-1, n-1]
print("系数矩阵A的行列式值为:%.2f" % det_A)
```
参考输入和输出:
输入:
```
请输入线性方程组的维数:3
请按顺序输入系数矩阵A的元素:
2 -1 0
-1 2 -1
0 -1 2
请输入列向量b的元素:
1
0
1
```
输出:
```
增广矩阵为:
[[ 2. -1. 0. 1.]
[-1. 2. -1. 0.]
[ 0. -1. 2. 1.]]
第1次消元后的增广矩阵为:
[[ 2. -1. 0. 1. ]
[ 0. 1.5 -1. -0.5 ]
[ 0. -0.66666667 2. -0.33333333]]
第2次消元后的增广矩阵为:
[[ 2. -1. 0. 1. ]
[ 0. 1.5 -1. -0.5 ]
[ 0. 0. 1.66666667 0.16666667]]
线性方程组的解为:
[[1.]
[1.]
[1.]]
系数矩阵A的行列式值为:3.00
```
阅读全文