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编程中运用闭包时所需要注意的一些地方
May 02 Python
windows下Virtualenvwrapper安装教程
Dec 13 Python
对Python3中的input函数详解
Apr 22 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
python 自定义异常和异常捕捉的方法
Oct 18 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
Python如何使用turtle库绘制图形
Feb 26 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 Python
常用的Python代码调试工具总结
Jun 23 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
Terran兵种介绍
2020/03/14 星际争霸
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
简单谈谈javascript代码复用模式
2015/01/28 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
用实例解释Python中的继承和多态的概念
2015/04/27 Python
Python内置函数reversed()用法分析
2018/03/20 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
python学习笔记之多进程
2020/08/06 Python
python中的插入排序的简单用法
2021/01/19 Python
大学校园生活自我鉴定
2014/01/13 职场文书
房地产项目策划书
2014/02/05 职场文书
大学军训感言300字
2014/03/09 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
2020优秀员工演讲稿(三篇)
2019/10/17 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript