700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 高斯消元法的python实现

高斯消元法的python实现

时间:2023-09-14 09:26:22

相关推荐

高斯消元法的python实现

高斯消元法是解线性方程组的一种常见的方法,下面是高斯消元法的实现过程,下面的算法仅能解决各主元素不为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.回带

import matplotlib.pyplot as pltfrom pylab import mplimport math"""利用高斯消元法,求解方程组的解。方程组如下:6x1+15x2+55x3=152.615x1+55x2+225x3=585.655x1+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 / temptemplete.append(x)data[j] = templete# flag标志应该进行消元的行数flag = j + 1while flag < line_size:templete1 = []temp1 = data[flag][j]i = 0for x1 in data[flag]:if x1 != 0:x1 = x1 - (temp1 * templete[i])templete1.append(x1)else:templete1.append(0)i += 1data[flag] = templete1flag += 1j += 1# 求相应的参数值parameters = []i = line_size - 1# j标识减去元素个数# flag_rol标识除那一列flag_j = 0rol_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 = 0while flag_j > 0:temp2 -= operate_line[flag_rol + flag_j] * parameters[result_flag]result_flag += 1flag_j -= 1parameter = temp2 / operate_line[flag_rol]parameters.append(parameter)flag_rol -= 1i -= 1return parametersparemeters=[[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]))

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。