输入:a是m×n的系数矩阵,b是m×1的(列)向量。
输出:方程组的通解。
用高斯消元法(行化简法)解线性方程组步骤
- 1.构造方程组的增广矩阵
- 2.从最左边列往右,使用行化简算法把增广矩阵化为阶梯形,确定矩阵是否有解:
若最后一列为主元列(最后一行非零行形如 [0 0 0 5]),无解,返回无解。 - 3.继续行化简,把主元上面的所有的元素都化为0,把主元位置变成1.
- 4.把每个主元列对应的变量表示成非主元变量的线性组合.
import numpy as np
def arguemented_mat(a, b):
return np.c_[a,b]
# 行交换
def swap_row(a,i,j):
m,n = a.shape
if i >= m or j >= m:
print 'error: out of index ...'
else:
a[i] = a[i] ^ a[j]
a[j] = a[i] ^ a[j]
a[i] = a[i] ^ a[j]
return a
# 变成阶梯矩阵
def trape_mat(sigma):
m,n = sigma.shape
#保存主元所在的列数,一般来说,每行都有一个主元,除非某行全零
main_factor = []
main_col = 0
while main_col < n and len(main_factor) < m:
# 当行数多于列数的时候,出现所有的列已经处理完,结束
if main_col == n:
break
# 逐列找主元,若该列全零(从第i行往下),则没有主元