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 相关文章推荐
Python 文件和输入输出小结
Oct 09 Python
Python类属性与实例属性用法分析
May 09 Python
python处理html转义字符的方法详解
Jul 01 Python
使用numba对Python运算加速的方法
Oct 15 Python
python正则表达式匹配[]中间为任意字符的实例
Dec 25 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
python的debug实用工具 pdb详解
Jul 12 Python
python基于socket函数实现端口扫描
May 28 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 Python
django models里数据表插入数据id自增操作
Jul 15 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 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
php下载远程文件类(支持断点续传)
2008/11/14 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
使用JavaScript switch case 另类写法
2010/03/14 Javascript
js 多浏览器分别判断代码
2010/04/01 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
基于Python List的赋值方法
2018/06/23 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
全球精选男装和家居用品:Article
2020/04/13 全球购物
公益活动策划方案
2014/01/09 职场文书
女儿十岁生日答谢词
2014/01/27 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
慰问信格式规范
2015/03/23 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
Python if else条件语句形式详解
2022/03/24 Python