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 HTMLParser模块解析html获取url实例
Apr 08 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
Python3爬楼梯算法示例
Mar 04 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
pytorch使用tensorboardX进行loss可视化实例
Feb 24 Python
python实现逆滤波与维纳滤波示例
Feb 26 Python
python实现密度聚类(模板代码+sklearn代码)
Apr 27 Python
利用scikitlearn画ROC曲线实例
Jul 02 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
Python 中的 copy()和deepcopy()
Nov 07 Python
LeetCode189轮转数组python示例
Aug 05 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
第1次亲密接触PHP5(2)
2006/10/09 PHP
深入解析php模板技术原理【一】
2008/01/10 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
Javascript常考语句107条收集
2010/03/09 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
两种方法解决javascript url post 特殊字符转义 + &amp; #
2016/04/13 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
Node.js 实现简单的接口服务器的实例代码
2017/05/23 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
Python中property函数用法实例分析
2018/06/04 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
python3人脸识别的两种方法
2019/04/25 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
上级检查欢迎词
2014/01/18 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
工程部主管岗位职责
2015/02/12 职场文书
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS