You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:55:22