列主高斯消元法

这篇具有很好参考价值的文章主要介绍了列主高斯消元法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

目录

一、前言

二、列主高斯消元法

1.数学计算过程

三、代码实现过程

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

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

四、总结

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

一、前言

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

二、列主高斯消元法

1.数学计算过程

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

1)增广矩阵

列主元高斯消去法,数值分析,算法,矩阵,python

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

 列主元高斯消去法,数值分析,算法,矩阵,python

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

列主元高斯消去法,数值分析,算法,矩阵,python

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

列主元高斯消去法,数值分析,算法,矩阵,python

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

列主元高斯消去法,数值分析,算法,矩阵,python

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

 列主元高斯消去法,数值分析,算法,矩阵,python

三、代码实现过程

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

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])<abs(m[i][col])):
          t[:] = m[col]
          m[col] = m[i]
          m[i] = t[:]
   return m



#先列后行,因此在外层遍历列:从0列 1列 到n-1列
# 当遍历到0列时,需要遍历1,2,……,再到最后一行,就是不用遍第一列,因为此时恰好col的下标为0,表示第一列,并且也可以表示第一行;   # 当遍历到1列时,需要遍历2,3,……,再到最后一行,就是遍历前两列,因为消去第二个主元下面的元素只需用到第二列来消去,恰好col的下标为1,并且也可以用来表示第二行。
def myGauss(m):
    # 消元过程,比高斯消元法多了个将每一列大的元素值挑选出来并作为主元
    for col in range(len(m[0])):#依次遍历0列   1列  2列  3列   4列
        m=exchange_large(m, col)
        for row in range(col+1,len(m)):#0行对应:1遍历到最后一列;   1行对应:2遍历到最后一列
            x=-((m[row][col])/(m[col][col]))#先找出要乘的系数,而且每一次的系数都不一样
            for i in range(len(m[0])):#给每一个元素乘以系数
                s[col][i]=(m[col][i]*x)
            m[row]+=s[col]




    #回带过程
    ans=[]#初始化一个矩阵
    #m = list(m)
    m.reverse()
    for sol in range(len(m)):
        if sol == 0:
            ans.append((m[sol])[-1]/m[sol][-2])#倒数第一个数除以倒数第二个数,这是第一行的情况
            #ans里面放方程的根
        else:
            inner = 0#这是第一行下面的情况
            #
            for x in range(sol):#
                inner += (ans[x]*m[sol][-2-x])#将求出的所有解依次乘以其下面的元素
            ans.append((m[sol][-1]-inner)/m[sol][-sol-2])#右边的值减去上一个的结果然后除以x的系数(这一行的倒数第三个元素)
    ans.reverse()
    return ans

print(myGauss(m))

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

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

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

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

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

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

6.你还遇到过哪些小问题,调试了半天就是找不见,可以在评论区留言。文章来源地址https://www.toymoban.com/news/detail-814940.html

四、总结

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

到了这里,关于列主高斯消元法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【重拾C语言】六、批量数据组织(一)数组(数组类型、声明与操作、多维数组;典例:杨辉三角、矩阵乘积、消去法)

    目录 前言 六、批量数据组织——数组 6.1 成绩统计——数组类型 6.1.1 数组类型 6.1.2 数组声明与操作 6.1.3 成绩统计 6.2 统计多科成绩——多维数组 6.3 程序设计实例 6.3.1 杨辉三角形 6.3.2 矩阵乘积 6.3.3 消去法 6.4 线性表——分类与检索 ChatGPT         C语言是一种通用的、过

    2024年02月07日
    浏览(57)
  • 高斯消元法(matlab)

    目录 高斯部分主元消元法 高斯列主元消元法  高斯部分主元消去法: 原理:将线性方程组的系数即为矩阵A(n,n),对应的值即为 B(n,1),记增广矩阵C为(A,B); 第一步:找出系数中绝对值最大的元素,将其交换到C(1,1),通过线性运算,使得第一列C(1,1)下面的元素都消为0; 第二步

    2024年02月06日
    浏览(43)
  • 图论+线性基高斯消元与主元:1019T2 / P4151

    http://cplusoj.com/d/senior/p/SS231019B 相当于图上选一条链和一堆环 考虑dfs生成树。 则链是两条从根出发的链 环是每条返祖边组成的环 所以环和链的异或和可以求出来 链的放到线性基里 然后线性基通过高斯消元求主元(贪心思想,主元可以令那一位一定为1。那么就钦定主元为必

    2024年02月08日
    浏览(40)
  • C语言用高斯消元法求行列式

    目录 数学原理 选择主元 程序设计 整体流程与代码 测试函数 测试结果 高斯消元法求行列式:利用初等行变换,化为上三角行列式,求其主对角线的乘积 行列式的初等行变换: 1)换行变换:交换两行(行列式需变号) 2)倍法变换:将行列式的某一行(列)的所有元素同乘

    2024年02月08日
    浏览(43)
  • [数论第三节]高斯消元法/求组合数/卡特兰数

    求解含有n个未知数,n个方程的多元线性方程组 O(n^3) 初等行变换: 某行乘以一个非零数 交换两行 某行加上另一行的若干倍 利用初等行变换将方程组化为上三角矩阵 解的情况: 完美阶梯型:唯一解 非完美阶梯型: 0 == 非0:无解 0 == 0:无穷解 步骤: 枚举每一列 找到这一列

    2024年02月13日
    浏览(36)
  • MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

    工程和科学计算的许多基本方程都是建立在守恒定律的基础之上的,比如质量守恒等,在数学上,可以建立起形如 [A]{x}={b} 的平衡方程。其中{x}表示各个分量在平衡时的取值,它们表示系统的 状态 或 响应; 右端向量{b}由无关系统性态的常数组成通常表示为 外部激励。 矩阵

    2023年04月15日
    浏览(63)
  • Matlab中求解线性方程组——高斯消元法、LU分解法、QR分解法、SVD分解法、迭代法等

    MATLAB迭代的三种方式以及相关案例举例 MATLAB矩阵的分解函数与案例举例 MATLAB当中线性方程组、不定方程组、奇异方程组、超定方程组的介绍 MATLAB语句实现方阵性质的验证 MATLAB绘图函数的相关介绍——海底测量、二维与三维图形绘制 MATLAB求函数极限的简单介绍 文章目录 前言

    2024年02月08日
    浏览(65)
  • 矩阵消元法

    消元法(elimination)也是计算机程序解方程的方法,消元法如果奏效了,方程就解出来了。 讨论消元法 奏效 和 失效 的情况。后半部分还介绍了  消元矩阵 ,即我们的消元运算在矩阵乘法中所表现的形式。并从消元矩阵引入,介绍了一些  逆矩阵  的基础知识。 2.1、消元法介

    2023年04月13日
    浏览(41)
  • 2.2 消元法的概念

    消元法 (elimination)是一个求解线性方程组的系统性方法。下面是使用消元法求解一个 2 × 2 2times2 2 × 2 线性方程组的例子。消元之前,两个方程都有 x x x 和 y y y ,消元后,第一个未知数 x x x 将从第二个方程消失: 新的方程 8 y = 8 8y=8 8 y = 8 能够直接得到 y = 1 y=1 y = 1 ,再将

    2024年02月08日
    浏览(37)
  • 【数值计算方法】Gauss消元法及其Python/C实现

       Gauss消元法 ,也称为高斯消元法或高斯-约当消元法,是一种用于 求解线性方程组的数值方法 。它是由德国数学家卡尔·弗里德里希·高斯在18世纪末发展起来的。   Gauss消元法的基本思想是通过一系列的行变换将线性方程组转化为一个上三角形的方程组,然后通过回代

    2024年02月06日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包