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中type的构造函数参数含义说明
Jun 21 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
python计算两个地址之间的距离方法
Jun 09 Python
Python查找第n个子串的技巧分享
Jun 27 Python
Python 中的lambda函数介绍
Oct 10 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
python3.6编写的单元测试示例
Aug 17 Python
python如果快速判断数字奇数偶数
Nov 13 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
Python多线程实现支付模拟请求过程解析
Apr 21 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
Python如何定义有可选参数的元类
Jul 31 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
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
jQuery Tools tooltip使用说明
2012/07/14 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
初识Node.js
2015/03/20 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
详解python中的 is 操作符
2017/12/26 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
wxPython实现列表增删改查功能
2019/11/19 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
玩具反斗城西班牙网上商城:ToysRUs西班牙
2017/01/19 全球购物
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
办公室副主任职责范本
2014/03/08 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
个人买房协议书范本
2014/10/06 职场文书
西安导游词
2015/02/12 职场文书
导游词书写之黄山
2019/08/06 职场文书
JavaScript实现登录窗体
2021/06/22 Javascript
用Python可视化新冠疫情数据
2022/01/18 Python
Go语言特点及基本数据类型使用详解
2022/03/21 Golang