国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python基于高斯消元法計算線性方程組示例

2020-02-22 22:53:32
字體:
來源:轉載
供稿:網友

本文實例講述了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  printdef swap( a, b ):  t = a; a = b; b = tdef 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 1if __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.00000.0000 2.0000 -1.0000 | 0.00000.0000 1.0000 0.0000 | 10.0000一開始 de 矩陣2.0000 0.0000 -2.0000 | 0.00000.0000 2.0000 -1.0000 | 0.00000.0000 1.0000 0.0000 | 10.0000位置:row_pos = 0, col_pos = 0選主元2.0000 0.0000 -2.0000 | 0.00000.0000 2.0000 -1.0000 | 0.00000.0000 1.0000 0.0000 | 10.0000交換兩行2.0000 0.0000 -2.0000 | 0.00000.0000 2.0000 -1.0000 | 0.00000.0000 1.0000 0.0000 | 10.0000消元1.0000 0.0000 -1.0000 | 0.00000.0000 2.0000 -1.0000 | 0.00000.0000 1.0000 0.0000 | 10.0000位置:row_pos = 1, col_pos = 1選主元1.0000 0.0000 -1.0000 | 0.00000.0000 2.0000 -1.0000 | 0.00000.0000 1.0000 0.0000 | 10.0000交換兩行1.0000 0.0000 -1.0000 | 0.00000.0000 2.0000 -1.0000 | 0.00000.0000 1.0000 0.0000 | 10.0000消元1.0000 0.0000 -1.0000 | 0.00000.0000 1.0000 -0.5000 | 0.00000.0000 0.0000 0.5000 | 10.0000位置:row_pos = 2, col_pos = 2選主元1.0000 0.0000 -1.0000 | 0.00000.0000 1.0000 -0.5000 | 0.00000.0000 0.0000 0.5000 | 10.0000交換兩行1.0000 0.0000 -1.0000 | 0.00000.0000 1.0000 -0.5000 | 0.00000.0000 0.0000 0.5000 | 10.0000消元1.0000 0.0000 0.0000 | 20.00000.0000 1.0000 0.0000 | 10.00000.0000 0.0000 1.0000 | 20.0000方程組有解方程組及其解1.0000 0.0000 0.0000 | 20.00000.0000 1.0000 0.0000 | 10.00000.0000 0.0000 1.0000 | 20.0000x[0] = 20.0000x[1] = 10.0000x[2] = 20.0000            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 津南区| 东丰县| 同心县| 斗六市| 蒲城县| 千阳县| 格尔木市| 台北市| 镇巴县| 临清市| 富裕县| 图木舒克市| 平乡县| 高陵县| 康平县| 铜梁县| 长乐市| 延庆县| 定安县| 综艺| 沂水县| 长武县| 青海省| 大宁县| 洛阳市| 合山市| 岱山县| 兰溪市| 石首市| 綦江县| 汤阴县| 大丰市| 尚志市| 万荣县| 外汇| 玉溪市| 海林市| 永福县| 偏关县| 当阳市| 马龙县|