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)
方案说明
- 直接映射用户变量:不再做多余的
a/b替换,直接创建用户传入的var1和var2对应的符号,避免变量名冲突和替换错误。 - 鲁棒的表达式解析:通过
strip()处理等式两边的空格,兼容带空格的表达式格式。 - 正确处理解的格式:SymPy的
solve函数对单解返回字典、多解返回字典列表,修复后的函数会分别处理两种场景,返回直观的数值结果。
内容的提问来源于stack exchange,提问作者Sandeep Kumar Rudhravaram
相关产品推荐
相关产品推荐

