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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:24:03