如何在Python矩阵输出中添加分隔符区分方程系数与常数项?
线性方程组矩阵格式化输出解决方案
需求概述
需要求解以下线性方程组:
x - y - 2z = 4
2x - y - z = 2
2x + y + 4z = 16
要求自定义矩阵打印函数,输出时用|分隔方程的系数部分与常数项,初始矩阵和行最简形(rref)结果均需保持指定格式。
修改后的代码实现
def showMatrix(matrix): print("\n") for row in matrix: # 分割系数部分和常数项 coeffs = row[:-1] const = row[-1] # 处理数值,自动把整数型浮点数转为整数,避免冗余格式 formatted_coeffs = [int(num) if num.is_integer() else num for num in coeffs] formatted_const = int(const) if const.is_integer() else const # 按指定格式拼接输出 print(" ".join(map(str, formatted_coeffs)) + " | " + str(formatted_const)) print("\n") def getone(matrix, pp): pivot = matrix[pp][pp] if pivot != 1 and pivot != 0: # 主行除以主元,将主元转为1 for j in range(len(matrix[0])): matrix[pp][j] /= pivot def getzero(matrix, r, c): factor = matrix[r][c] if factor != 0: # 当前行减去主行的factor倍,消去目标位置元素 for j in range(len(matrix[0])): matrix[r][j] -= factor * matrix[c][j] # 替换为目标方程组的增广矩阵 sd = [ [1, -1, -2, 4], [2, -1, -1, 2], [2, 1, 4, 16] ] print("初始矩阵:") showMatrix(sd) # 执行行最简形变换 n_rows = len(sd) for i in range(n_rows): getone(sd, i) for j in range(n_rows): if i != j: getzero(sd, j, i) print(f"第{i+1}步变换后矩阵:") showMatrix(sd) print("最终行最简形结果:") showMatrix(sd)
关键修改点
- 打印函数重构:新增矩阵参数(避免依赖全局变量),将每行分割为系数区和常数项,用
|拼接输出,同时自动处理浮点数转整数,消除24.0这类冗余格式。 - 初始矩阵替换:直接替换为目标方程组对应的增广矩阵。
- 行变换逻辑优化:调整
getone()和getzero()的参数传递方式,逻辑更清晰,确保主元归一化和消元计算的正确性。
内容的提问来源于stack exchange,提问作者whatido
相关产品推荐
相关产品推荐

