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程序设计有所帮助。