高斯消元法的python实现
2018-01-13 10:26
330 查看
高斯消元法是解线性方程组的一种常见的方法,下面是高斯消元法的实现过程,下面的算法仅能解决各主元素不为0的情况。
下面是算法的实现思路:
1.算法总共分为两大步骤,第一个步骤是将增广矩阵消元形成上三角矩阵,第二个步骤是从下向上进行回带完成解方程的步骤。
2.在第一个步骤里总共有三重循环
1>第一重循环是要控制一共要有多少次消元。如下图要将左边的矩阵变成右边的矩阵要进行2次消元。
2>第二重循环是要将当前消元的主元素变成一,同时该主元素所在的行同时缩小相应的倍数。例如:将a11这一行的元素同时除以a11,这行元素变为1,a12/a11,a13/a11,b1/a11
3>第三重循环将主元素所在的列,完成消元归零的操作。将a11所在的列都变成0,a21-a21*1 ,a22-a21*a12/a11,a23-a21*a13/a11,b32-a21*b1/a11
3.回带
下面是算法的实现思路:
1.算法总共分为两大步骤,第一个步骤是将增广矩阵消元形成上三角矩阵,第二个步骤是从下向上进行回带完成解方程的步骤。
2.在第一个步骤里总共有三重循环
1>第一重循环是要控制一共要有多少次消元。如下图要将左边的矩阵变成右边的矩阵要进行2次消元。
2>第二重循环是要将当前消元的主元素变成一,同时该主元素所在的行同时缩小相应的倍数。例如:将a11这一行的元素同时除以a11,这行元素变为1,a12/a11,a13/a11,b1/a11
3>第三重循环将主元素所在的列,完成消元归零的操作。将a11所在的列都变成0,a21-a21*1 ,a22-a21*a12/a11,a23-a21*a13/a11,b32-a21*b1/a11
3.回带
import matplotlib.pyplot as plt from pylab import mpl import math """ 利用高斯消元法,求解方程组的解。 方程组如下: 6x1+15x2+55x3=152.6 15x1+55x2+225x3=585.6 55x1+225x2+979x3=2488.8 """ def calculate_parameter(data): # i用来控制列元素,line是一行元素,j用来控制循环次数,datas用来存储局部变量。保存修改后的值 i = 0; j = 0; line_size = len(data) # 将行列式变换为上三角行列式 while j < line_size - 1: line = data[j] temp = line[j] templete = [] for x in line: x = x / temp templete.append(x) data[j] = templete # flag标志应该进行消元的行数 flag = j + 1 while flag < line_size: templete1 = [] temp1 = data[flag][j] i = 0 for x1 in data[flag]: if x1 != 0: x1 = x1 - (temp1 * templete[i]) templete1.append(x1) else: templete1.append(0) i += 1 data[flag] = templete1 flag += 1 j += 1 # 求相应的参数值 parameters = [] i = line_size - 1 # j标识减去元素个数 # flag_rol标识除那一列 flag_j = 0 rol_size = len(data[0]) flag_rol = rol_size - 2 # 获得解的个数 while i >= 0: operate_line = data[i] if i == line_size - 1: parameter = operate_line[rol_size - 1] / operate_line[flag_rol] parameters.append(parameter) else: flag_j = (rol_size - flag_rol - 2) temp2 = operate_line[rol_size - 1] # result_flag为访问已求出解的标志 result_flag = 0 while flag_j > 0: temp2 -= operate_line[flag_rol + flag_j] * parameters[result_flag] result_flag += 1 flag_j -= 1 parameter = temp2 / operate_line[flag_rol] parameters.append(parameter) flag_rol -= 1 i -= 1 return parameters paremeters=[[6,15, 55,152.6], [15, 55, 225, 585.6], [55,225,979,2488.8]] results=calculate_parameter(paremeters) print(" x1="+str(results[2])+"\n x2="+str(results[1])+"\n x3="+str(results[0]))
相关文章推荐
- 高斯消元法的MATLAB和PYTHON实现
- 高斯消元法(三):用Python简单实现顺序消元法
- python 实现高斯消元法
- python实现泊松图像融合
- 神经网络与深度学习 使用Python实现基于梯度下降算法的神经网络和自制仿MNIST数据集的手写数字分类可视化程序 web版本
- Python采用socket模拟TCP通讯的实现方法
- Python求矩阵特征值及特征向量和实现对角化矩阵简化矩阵n次方运算
- python实现双色球选取
- Python3服务端与客户端实现
- Python实现KNN回归
- python+selenium实现登录账户后自动点击
- Python实现手绘功能
- Python实现文件递归遍历
- Python实现批量下载文件
- 求25的所有本原根Python实现
- python pil实现高斯模糊
- 八大排序的python实现
- 用Python编写一个基于终端的实现翻译的脚本
- 红黑树:个人理解与Python实现
- 利用Python实现基于协同过滤算法的影片推荐