Python基于高斯消元法计算线性方程组示例
本文实例讲述了Python基于高斯消元法计算线性方程组。分享给大家供大家参考,具体如下:
#!/usr/bin/envpython
#coding=utf-8
#以上的信息随自己的需要改动吧
defprint_matrix(info,m):#输出矩阵
i=0;j=0;l=len(m)
printinfo
foriinrange(0,len(m)):
forjinrange(0,len(m[i])):
if(j==l):
print'|',
print'%6.4f'%m[i][j],
print
print
defswap(a,b):
t=a;a=b;b=t
defsolve(ma,b,n):
globalm;m=ma#这里主要是方便最后矩阵的显示
globals;
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_posmik):
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):
forjinrange(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]
exceptZeroDivisionError:
#除零异常一般在无解或无穷多解的情况下出现……
return0;
j=n-1
while(j>=col_pos):
m[row_pos][j]/=m[row_pos][col_pos]
j=j-1
foriinrange(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
foriinrange(row_pos,n):
if(abs(m[i][n])==0.0):
return0
return1
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)
foriinrange(0,len(m)):
print"x[%d]=%6.4f"%(i,m[i][len(m)])
运行结果:
一开始的矩阵 2.00000.0000-2.0000|0.0000 0.00002.0000-1.0000|0.0000 0.00001.00000.0000|10.0000 一开始de矩阵 2.00000.0000-2.0000|0.0000 0.00002.0000-1.0000|0.0000 0.00001.00000.0000|10.0000 位置:row_pos=0,col_pos=0 选主元 2.00000.0000-2.0000|0.0000 0.00002.0000-1.0000|0.0000 0.00001.00000.0000|10.0000 交换两行 2.00000.0000-2.0000|0.0000 0.00002.0000-1.0000|0.0000 0.00001.00000.0000|10.0000 消元 1.00000.0000-1.0000|0.0000 0.00002.0000-1.0000|0.0000 0.00001.00000.0000|10.0000 位置:row_pos=1,col_pos=1 选主元 1.00000.0000-1.0000|0.0000 0.00002.0000-1.0000|0.0000 0.00001.00000.0000|10.0000 交换两行 1.00000.0000-1.0000|0.0000 0.00002.0000-1.0000|0.0000 0.00001.00000.0000|10.0000 消元 1.00000.0000-1.0000|0.0000 0.00001.0000-0.5000|0.0000 0.00000.00000.5000|10.0000 位置:row_pos=2,col_pos=2 选主元 1.00000.0000-1.0000|0.0000 0.00001.0000-0.5000|0.0000 0.00000.00000.5000|10.0000 交换两行 1.00000.0000-1.0000|0.0000 0.00001.0000-0.5000|0.0000 0.00000.00000.5000|10.0000 消元 1.00000.00000.0000|20.0000 0.00001.00000.0000|10.0000 0.00000.00001.0000|20.0000 方程组有解 方程组及其解 1.00000.00000.0000|20.0000 0.00001.00000.0000|10.0000 0.00000.00001.0000|20.0000 x[0]=20.0000 x[1]=10.0000 x[2]=20.0000
PS:这里再为大家推荐几款计算工具供大家参考使用:
在线一元函数(方程)求解计算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi
科学计算器在线使用_高级计算器在线计算:
http://tools.jb51.net/jisuanqi/jsqkexue
在线计算器_标准计算器:
http://tools.jb51.net/jisuanqi/jsq
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。