其中[A] 为矩阵, {x} and {b} 为向量。
如果学过线性代数,可以知道最简单的求联立方程的方式就是高斯消元,比如看下面这个例子:
为了达成成消元的目的,我们可以把等式a乘2之后加到b上,这样b中的x1项就被消除了,同样,我们也可以用等式a乘0.5,可以消除c中的x1项。
这个进程可以用公式写为
对于得出的结果,进一步进程为
经过变化之后,这个矩阵将变成:
其中[u]叫做上三角矩阵,这个方程中未知数很好得到,x3=3.5/2.5,然后x2=(4-10x3)/5,最后x1=(1-(-5)x3-1x2)/10,这种迭代求解方式叫做‘向后代入求解’,对应向后代入求解,对于下三角矩阵,也有‘向前代入求解’。
下面说一下python的程序,python的基本语法,大家可以参照任意一本语法书来学习,或者有些语法问题大家一起讨论,首先python语言里只能用列表来表示矩阵,所以矩阵我都是采用numpy库来赋值的:
#线性联立方程组的高斯消元
import numpy as np
import math
n=3
a=np.array([[10,1,-5],[-20,3,20],[5,3,5]],dtype=np.float)
b=np.array([[1],[2],[6]],dtype=np.float)
print('系数矩阵')
for i in range(1,n+1):
print(a[i-1,:])
print('右手边向量',b)
#转化为上三角形式
for k in range(1,n):
if abs(a[k-1,k-1])>1e-6:
for i in range(k+1,n+1):
x=a[i-1,k-1]/a[k-1,k-1]-
a[i-1,k-1]=0
for j in range(k+1,n+1):
a[i-1,j-1]=a[i-1,j-1]-a[k-1,j-1]*x
b[i-1]=b[i-1]-b[k-1]*x
else:
print('在这行的主对角线坐标量为0')
break
print('修改后的矩阵')
for i in range(1,n+1):
print(a[i-1,:])
print('修改后的右手边向量',b)
#上三角向后迭代
for i in range(n,0,-1):
x=b[i-1]
if i<n:
for j in range(i+1,n+1):
x=x-a[i-1,j-1]*b[j-1]
b[i-1]=x/a[i-1,i-1]
print('解向量',b)
几点注意事项(这些在之后的内容中将不会重复提及):