高斯消元解方程程序(python,数值积分)

第一课 高斯消元

首先介绍最普遍的线性代数方程的形式
在这里插入图片描述
通常被写成
在这里插入图片描述

其中[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)  

几点注意事项(这些在之后的内容中将不会重复提及):

  1. python的循环中,在范围里面取值为从第一个数到最后一个数的前一个数。
  2. python第一个数默认的索引为0,所以python的索引是从0开始的。
  3. 把矩阵定义为float(浮点数),是为了之后的计算得到小数。
  4. 值得注意的是,在基础高斯消元的过程中,如果遇到第一行第一列的系数为0,那这个程序将不能使用,程序会报错跳出,至于怎么计算这种方程组,将会在之后的内容中介绍。
    下面是终端得出的结果:
    高斯消元解方程程序(python,数值积分)_第1张图片
    程序与计算的结果完全相同。

你可能感兴趣的:(有限元,数值分析,python,线性代数,数据分析)