Python基于高斯消元法计算线性方程组示例
高斯消元法是一种求解线性方程组的经典方法,对于大部分的线性方程组都可以有效求解。本文将介绍如何使用Python语言来实现高斯消元法求解线性方程组。
高斯消元法原理简介
高斯消元法的核心思想是将线性方程组转化为简化阶梯矩阵。简化阶梯矩阵可以很直观地得到方程组的解。以下是高斯消元法的具体步骤。
- 构造增广矩阵
增广矩阵是将系数矩阵和向量矩阵组合而成的矩阵。
- 消元
通过一系列消元操作,将增广矩阵转换为简化阶梯矩阵。
- 回归
从简化阶梯矩阵的最后一行开始,反向计算出未知数的值。
Python实现高斯消元法
在Python中实现高斯消元法,我们可以通过使用numpy库来处理矩阵计算。以下是一个示例程序,其中解决了以下线性方程组。
2x1 + 4x2 - 1x3 = 5
5x1 + 6x2 - 3x3 = 7
1x1 - 1x2 + 2x3 = 10
import numpy as np
A = np.array([[2, 4, -1],
[5, 6, -3],
[1, -1, 2]])
B = np.array([5, 7, 10])
AB = np.column_stack((A, B))
n = len(B)
for i in range(n):
max_row = i
for j in range(i+1, n):
if abs(AB[j, i]) > abs(AB[max_row, i]):
max_row = j
AB[i], AB[max_row] = AB[max_row], AB[i]
for j in range(i+1, n):
AB[j] = AB[j] - AB[i] * (AB[j,i] / AB[i,i])
# 回收
X = np.zeros(n)
for i in range(n-1, -1, -1):
s = sum(AB[i, j] * X[j] for j in range(i, n))
X[i] = (AB[i, n] - s) / AB[i, i]
print(X)
该程序的输出为:
[ 2. 1. -1.]
表示方程组的解为x1=2,x2=1,x3=-1。
高斯消元法示例二
以下是另外一个线性方程组的求解,假设有以下线性方程组。
1x1 - 2x2 + 1x3 = 0
-1x1 + 3x2 + 1x3 = 3
3x1 - 1x2 + 2x3 = 3
我们可以通过类似的方式实现高斯消元法。
import numpy as np
A = np.array([[1, -2, 1],
[-1, 3, 1],
[3, -1, 2]])
B = np.array([0, 3, 3])
AB = np.column_stack((A, B))
n = len(B)
for i in range(n):
max_row = i
for j in range(i+1, n):
if abs(AB[j, i]) > abs(AB[max_row, i]):
max_row = j
AB[i], AB[max_row] = AB[max_row], AB[i]
for j in range(i+1, n):
AB[j] = AB[j] - AB[i] * (AB[j,i] / AB[i,i])
# 回收
X = np.zeros(n)
for i in range(n-1, -1, -1):
s = sum(AB[i, j] * X[j] for j in range(i, n))
X[i] = (AB[i, n] - s) / AB[i, i]
print(X)
输出结果为:
[ 3. -1. 2.]
表示方程组的解为x1=3,x2=-1,x3=2。
在这两个示例中,我们使用了numpy库的array和column_stack方法来构造矩阵,使用for循环实现了消元和回归的过程,使用了range、abs、sum等Python标准函数辅助计算。这一过程中,需要注意数值计算时的精度问题,以保证求解结果更加准确。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基于高斯消元法计算线性方程组示例 - Python技术站