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多线程编程(四):使用Lock互斥锁
Apr 05 Python
Python引用模块和查找模块路径
Mar 17 Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
Python实现的微信红包提醒功能示例
Aug 22 Python
简单的Python调度器Schedule详解
Aug 30 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
Python搭建代理IP池实现检测IP的方法
Oct 27 Python
通过实例解析python subprocess模块原理及用法
Oct 10 Python
浅析PyCharm 的初始设置(知道)
Oct 12 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
Python-openpyxl表格读取写入的案例详解
Nov 02 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代码(星期六,星期日总和)
2009/11/12 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
php向js函数传参的几种方法
2014/08/10 PHP
php购物车实现方法
2015/01/03 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
关于前后端json数据的发送与接收详解
2017/07/30 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
利用python画出AUC曲线的实例
2020/02/28 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
2014年学校禁毒工作总结
2014/12/23 职场文书
实习班主任自我评价
2015/03/11 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
导游词之清晏园
2019/11/22 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android