如何在Sympy的diophantine方程求解结果中代入参数值
Sympy丢番图方程自动生成参数代入方法
错误原因
你遇到的NameError是因为diophantine返回解中的t_0、n1这类参数是Sympy自动生成的符号对象,没有预先在你的代码作用域中定义为变量,直接使用变量名t_0调用自然会报错。
正确代入方案
方法1:用符号名称字符串代入(最便捷)
Sympy的subs方法支持直接传入符号的名称字符串作为替换键,不需要提前定义对应变量:
from sympy.solvers.diophantine import diophantine from sympy import symbols x, y, z = symbols("x, y, z", integer=True) diof = diophantine(x*(2*x + 3*y - z)) sol_list = list(diof) # 给第一组解的t_0赋值0、t_1赋值5 sol1 = sol_list[0] subbed_sol1 = [expr.subs({'t_0': 0, 't_1': 5}) for expr in sol1] # 输出结果为 [0, 5, 15],对应x=0、y=5、z=15
方法2:提取自由符号绑定变量(适配参数名未知场景)
如果不知道自动生成的参数名,可以先提取解的自由符号再绑定到变量使用:
sol1 = list(diof)[0] # 按名称排序提取所有自由参数,保证顺序稳定 free_params = sorted(sol1.free_symbols, key=lambda s: s.name) t0, t1 = free_params # 直接使用绑定后的变量代入 subbed_sol1 = [expr.subs({t0: 2, t1: 3}) for expr in sol1] # 输出结果为 [2, 3, 13]
第二组解代入示例
第二组解(0, n1, n2)的代入逻辑完全一致:
sol2 = list(diof)[1] subbed_sol2 = [expr.subs({'n1': 2, 'n2': 7}) for expr in sol2] # 输出结果为 [0, 2, 7]
内容的提问来源于stack exchange,提问作者Simd
相关产品推荐
相关产品推荐

