列主高斯消元法

看过我前几个博文的小伙伴们,细心的小伙伴会发现我前面讲过一个高斯消元法,那么和接下来讲的列主高斯消去法有什么区别呢??

目录

一、前言

二、列主高斯消元法

1.数学计算过程

三、代码实现过程

1、源代码展示(这次没有采用高斯消元法中校园的时候,进阶的列表表达式,相对于上次,这次比较好理解)

在写代码中需要注意的问题:

四、总结

这一期的分享就到次结束了(写了两个中午,开始学数值分析是真的难),下面我将继续更新数值分析这本书上的所有算法,谢谢大家!!!

一、前言

在高斯消元法过程中,回代的过程是将主对角线上的主元作为除数(这个也是将主元作为除数的),但是一旦遇到主元上的数非常的小,即小主元。由误差分析的知识得,如果将小的数字作为除数,那就会带来误差,因此为了避免误差应当避免小主元做除数。所以我们引入了列主高斯消去法。

二、列主高斯消元法

1.数学计算过程

下面是我求解的线性方程组,然后我将其已经转化为增广矩阵(A,b),接下来将要对增广矩阵进行消元达到上三角矩阵的格式,在列主消元的过程中(顾名思义我们是按照列进行消元的,也就是说我们在进行消元的过程中是一列一列进行消元的,认识到这一点非常重要,因为这时我们就要将最外层的循环按列进行遍历,后面我还会将行主消元法和全主消元法)。

1)增广矩阵

列主高斯消元法_第1张图片

2)将第1列上面的所有元素绝对值分别与第1行主对角线上的元素的绝对值作比较,将绝对值大的元素相对应的行与第1行交换位置;得到下面结果:

 列主高斯消元法_第2张图片

3)用第一行元素值消去第一行主对角线上下面的两个元素值;得到下面结果:

列主高斯消元法_第3张图片

 4)将第2列上面的所有元素绝对值(此时已经不考虑第一行的元素值了)分别与第2行主对角线上的元素的绝对值作比较,将绝对值大的元素相对应的行与第2行交换位置;得到下面结果:

列主高斯消元法_第4张图片

5)用第二行元素值消去第一行主对角线上下面的两个元素值;得到下面结果:

列主高斯消元法_第5张图片

 6)将第3列上面的所有元素绝对值(此时已经不考虑第一、二行的元素值了)分别与第3行主对角线上的元素的绝对值作比较,将绝对值大的元素相对应的行与第3行交换位置;得到下面结果:

 列主高斯消元法_第6张图片

三、代码实现过程

我们只需要在高斯消元法的基础上做一些修改即可,主要是在消元的过程中,回代过程不需要修改。

1、源代码展示(这次没有采用高斯消元法中校园的时候,进阶的列表表达式,相对于上次,这次比较好理解)

"""
作者:author
日期:2022年09月19日
"""

import numpy as np
t=[]
s = np.zeros((3,4))
m = ([[2.0,3.0,-3.0,5.0],
   [4.0,2.0,-1.0,7.0],
   [1.0,4.0,0.0,9.0]])
def exchange_large(m,col):#
   for i in range (col+1,len(m)):
      if (abs(m[col][col])

在写代码中需要注意的问题:

1.创建临时保存一行数据的临时变量的时候,我们要用到的是t[:],这样就会保存到一行的数据,而不能用t,不然就会报错。

2.s = np.zeros((3,4)),输入这一行代码时,需要注意到,这里有两个“()”括号,输入一个同样也会报错。

3.在写具体的某一行代码时,尽可能多的将自己的注释写上去,这样方便别人的同时,也方便自己下次修改。

4.定一个函数时,这个函数必须要有完整的结构,比如return,如果没有的话,对于本题来说就会报错。

5.最好学会用debug功能,这样很方便就可以查出自己所犯得小问题。

6.你还遇到过哪些小问题,调试了半天就是找不见,可以在评论区留言。

四、总结

这一期的分享就到次结束了(写了两个中午,开始学数值分析是真的难),下面我将继续更新数值分析这本书上的所有算法,谢谢大家!!!

你可能感兴趣的:(数值分析,算法,矩阵,python)