Python基于高斯消元法计算线性方程组示例


Posted in Python onJanuary 17, 2018

本文实例讲述了Python基于高斯消元法计算线性方程组。分享给大家供大家参考,具体如下:

#!/usr/bin/env python
# coding=utf-8
# 以上的信息随自己的需要改动吧
def print_matrix( info, m ): # 输出矩阵
  i = 0; j = 0; l = len(m)
  print info
  for i in range( 0, len( m ) ):
    for j in range( 0, len( m[i] ) ):
      if( j == l ):
        print ' |',
      print '%6.4f' % m[i][j],
    print
  print
def swap( a, b ):
  t = a; a = b; b = t
def solve( ma, b, n ):
  global m; m = ma # 这里主要是方便最后矩阵的显示
  global s;
  i = 0; j = 0; row_pos = 0; col_pos = 0; ik = 0; jk = 0
  mik = 0.0; temp = 0.0
  n = len( m )
  # row_pos 变量标记行循环, col_pos 变量标记列循环
  print_matrix( "一开始 de 矩阵", m )
  while( ( row_pos < n ) and( col_pos < n ) ):
    print "位置:row_pos = %d, col_pos = %d" % (row_pos, col_pos)
    # 选主元
    mik = - 1
    for i in range( row_pos, n ):
      if( abs( m[i][col_pos] ) > mik ):
        mik = abs( m[i][col_pos] )
        ik = i
    if( mik == 0.0 ):
      col_pos = col_pos + 1
      continue
    print_matrix( "选主元", m )
    # 交换两行
    if( ik != row_pos ):
      for j in range( col_pos, n ):
        swap( m[row_pos][j], m[ik][j] )
        swap( m[row_pos][n], m[ik][n] );   # 区域之外?
    print_matrix( "交换两行", m )
    try:
      # 消元
      m[row_pos][n] /= m[row_pos][col_pos]
    except ZeroDivisionError:
      # 除零异常 一般在无解或无穷多解的情况下出现……
      return 0;
    j = n - 1
    while( j >= col_pos ):
      m[row_pos][j] /= m[row_pos][col_pos]
      j = j - 1
    for i in range( 0, n ):
      if( i == row_pos ):
        continue
      m[i][n] -= m[row_pos][n] * m[i][col_pos]
      j = n - 1
      while( j >= col_pos ):
        m[i][j] -= m[row_pos][j] * m[i][col_pos]
        j = j - 1
    print_matrix( "消元", m )
    row_pos = row_pos + 1; col_pos = col_pos + 1
  for i in range( row_pos, n ):
    if( abs( m[i][n] ) == 0.0 ):
      return 0
  return 1
if __name__ == '__main__':
  matrix = [[2.0,  0.0, - 2.0,  0.0],
       [0.0,  2.0, - 1.0,  0.0],
       [0.0,  1.0,  0.0, 10.0]]
  i = 0; j = 0; n = 0
  # 输出方程组
  print_matrix( "一开始的矩阵", matrix )
  # 求解方程组, 并输出方程组的可解信息
  ret = solve( matrix, 0, 0 )
  if( ret!= 0 ):
    print "方程组有解\n"
  else:
    print "方 程组无唯一解或无解\n"
  # 输出方程组及其解
  print_matrix( "方程组及其解", matrix )
  for i in range( 0, len( m ) ):
    print "x[%d] = %6.4f" % (i, m[i][len( m )])

运行结果:

一开始的矩阵
2.0000 0.0000 -2.0000 | 0.0000
0.0000 2.0000 -1.0000 | 0.0000
0.0000 1.0000 0.0000 | 10.0000

一开始 de 矩阵
2.0000 0.0000 -2.0000 | 0.0000
0.0000 2.0000 -1.0000 | 0.0000
0.0000 1.0000 0.0000 | 10.0000

位置:row_pos = 0, col_pos = 0
选主元
2.0000 0.0000 -2.0000 | 0.0000
0.0000 2.0000 -1.0000 | 0.0000
0.0000 1.0000 0.0000 | 10.0000

交换两行
2.0000 0.0000 -2.0000 | 0.0000
0.0000 2.0000 -1.0000 | 0.0000
0.0000 1.0000 0.0000 | 10.0000

消元
1.0000 0.0000 -1.0000 | 0.0000
0.0000 2.0000 -1.0000 | 0.0000
0.0000 1.0000 0.0000 | 10.0000

位置:row_pos = 1, col_pos = 1
选主元
1.0000 0.0000 -1.0000 | 0.0000
0.0000 2.0000 -1.0000 | 0.0000
0.0000 1.0000 0.0000 | 10.0000

交换两行
1.0000 0.0000 -1.0000 | 0.0000
0.0000 2.0000 -1.0000 | 0.0000
0.0000 1.0000 0.0000 | 10.0000

消元
1.0000 0.0000 -1.0000 | 0.0000
0.0000 1.0000 -0.5000 | 0.0000
0.0000 0.0000 0.5000 | 10.0000

位置:row_pos = 2, col_pos = 2
选主元
1.0000 0.0000 -1.0000 | 0.0000
0.0000 1.0000 -0.5000 | 0.0000
0.0000 0.0000 0.5000 | 10.0000

交换两行
1.0000 0.0000 -1.0000 | 0.0000
0.0000 1.0000 -0.5000 | 0.0000
0.0000 0.0000 0.5000 | 10.0000

消元
1.0000 0.0000 0.0000 | 20.0000
0.0000 1.0000 0.0000 | 10.0000
0.0000 0.0000 1.0000 | 20.0000

方程组有解

方程组及其解
1.0000 0.0000 0.0000 | 20.0000
0.0000 1.0000 0.0000 | 10.0000
0.0000 0.0000 1.0000 | 20.0000

x[0] = 20.0000
x[1] = 10.0000
x[2] = 20.0000
Python 相关文章推荐
浅谈MySQL中的触发器
May 05 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
对Python中的@classmethod用法详解
Apr 21 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
python覆盖写入,追加写入的实例
Jun 26 Python
基于django传递数据到后端的例子
Aug 16 Python
Python 虚拟环境工作原理解析
Dec 24 Python
python文件目录操作之os模块
May 08 Python
Python实现将照片变成卡通图片的方法【基于opencv】
Jan 17 #Python
Python实现文件信息进行合并实例代码
Jan 17 #Python
python实现用户答题功能
Jan 17 #Python
python编程培训 python培训靠谱吗
Jan 17 #Python
Python温度转换实例分析
Jan 17 #Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
Jan 17 #Python
python+matplotlib绘制3D条形图实例代码
Jan 17 #Python
You might like
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
关于crontab的使用详解
2013/06/24 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP分享图片的生成方法
2018/04/25 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
JavaScript模块详解
2017/12/18 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
python openpyxl使用方法详解
2019/07/18 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
Java程序员面试90题
2013/10/19 面试题
创建服务型党组织实施方案
2014/02/25 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
西安兵马俑导游词
2015/02/02 职场文书
中小企业员工手册范本
2015/05/14 职场文书
预备党员半年考察意见
2015/06/01 职场文书
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers
MySQL 数据 data 基本操作
2022/05/04 MySQL
spring boot实现文件上传
2022/08/14 Java/Android