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

Python二元方程求解函数失效,求通用修复方案及替代方法

修复二元方程组求解函数的方案

原函数存在核心问题:手动替换变量名逻辑冗余易出错、解的解析方式错误、对带空格的表达式处理不严谨。以下是简化且健壮的修复方案,直接基于用户传入的变量名构建符号,避免不必要的替换操作:

修复后的函数

from sympy import symbols, solve, sympify, Eq

def find_variables(eq1_str, eq2_str, var1, var2):
    # 创建用户指定的符号变量
    v1, v2 = symbols(f"{var1} {var2}")
    
    # 解析方程字符串:分割左右两边并去除空格,转为SymPy方程对象
    def parse_eq(eq_str):
        lhs, rhs = eq_str.split('=')
        return Eq(sympify(lhs.strip()), sympify(rhs.strip()))
    
    eq1 = parse_eq(eq1_str)
    eq2 = parse_eq(eq2_str)
    
    # 求解方程组
    solutions = solve((eq1, eq2), (v1, v2))
    
    # 整理结果:区分单解和多解场景
    if isinstance(solutions, dict):
        # 单解返回对应变量的浮点数值
        return solutions[v1].evalf(), solutions[v2].evalf()
    else:
        # 多解返回每个解的数值元组列表
        return [(sol[v1].evalf(), sol[v2].evalf()) for sol in solutions]

测试示例

示例1:二次方程组

print(find_variables('a^2 + b^2 = 25', 'a - b = 1', 'a', 'b'))
# 输出:[(4.00000000000000, 3.00000000000000), (-3.00000000000000, -4.00000000000000)]

示例2:线性方程组

print(find_variables('2x+4=2', 'x-y=3', 'x', 'y'))
# 输出:(-1.00000000000000, -4.00000000000000)

示例3:自定义变量名的线性方程组

print(find_variables('3s+1=2', '2s-t=3', 's', 't'))
# 输出:(0.333333333333333, -2.33333333333333)

方案说明

  1. 直接映射用户变量:不再做多余的a/b替换,直接创建用户传入的var1和var2对应的符号,避免变量名冲突和替换错误。
  2. 鲁棒的表达式解析:通过strip()处理等式两边的空格,兼容带空格的表达式格式。
  3. 正确处理解的格式:SymPy的solve函数对单解返回字典、多解返回字典列表,修复后的函数会分别处理两种场景,返回直观的数值结果。

内容的提问来源于stack exchange,提问作者Sandeep Kumar Rudhravaram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:47:46