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中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
浅谈Python中的私有变量
Feb 28 Python
用Django实现一个可运行的区块链应用
Mar 08 Python
python实现批量按比例缩放图片效果
Mar 30 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
Python日志处理模块logging用法解析
May 19 Python
python opencv 实现读取、显示、写入图像的方法
Jun 08 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
python中round函数如何使用
Jun 19 Python
Python 忽略文件名编码的方法
Aug 01 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
再探JavaScript作用域
2014/09/24 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
Python heapq使用详解及实例代码
2017/01/25 Python
python 内置函数filter
2017/06/01 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
Python单链表原理与实现方法详解
2020/02/22 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
python中time.ctime()实例用法
2021/02/03 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
教师自我鉴定范文
2014/03/20 职场文书
师范生免费教育协议书范本
2014/10/09 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书