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中的闭包函数
Feb 09 Python
python字符串与url编码的转换实例
May 10 Python
使用numpy和PIL进行简单的图像处理方法
Jul 02 Python
python 常见字符串与函数的用法详解
Nov 23 Python
Python实现的微信支付方式总结【三种方式】
Apr 13 Python
Python中asyncio模块的深入讲解
Jun 10 Python
python3.x提取中文的正则表达式示例代码
Jul 23 Python
Python实现把类当做字典来访问
Dec 16 Python
python无序链表删除重复项的方法
Jan 17 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
Feb 28 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 Python
Django框架中表单的用法
Jun 10 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文件上传的简单实例
2013/10/19 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
web 页面分页打印的实现
2009/06/22 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
法国时尚童装网站:Melijoe
2016/08/10 全球购物
怎么写有吸引力的自荐信
2013/11/17 职场文书
大学生自荐书范文
2013/12/10 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
政府法律服务方案
2014/06/14 职场文书
篮球社团活动总结
2014/06/27 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
清明节寄语2015
2015/03/23 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android
Nginx报404错误的详细解决方法
2022/07/23 Servers