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

Sympy中遍历列表元素循环求偏导的异常问题排查

问题原因

你遇到的问题核心是SymPy通过对象身份而非变量名称识别符号。代码开头用symbols('x y z')创建的x、y、z是三个独立的Symbol对象,而循环里用Symbol(i)创建的新符号,虽然名字和前者相同,但属于完全不同的对象。你的函数x*y+z绑定的是开头定义的那三个符号,循环里的新符号并不存在于函数表达式中,所以对其求偏导结果自然是0。

解决方法

有两种简单的修复方式:

方法1:直接使用已定义的符号列表

既然已经创建了x、y、z符号,直接把它们放进列表循环即可:

from sympy import symbols, diff

x, y, z = symbols('x y z', real=True)
# 直接用已创建的符号组成列表
variables = [x, y, z]
function = x * y + z

for v in variables:
    function_partial = diff(function, v)
    print(function_partial)

输出:

y
x
1

方法2:建立字符串到已有符号的映射

如果必须保留字符串形式的变量列表,可以创建一个字典,将字符串映射到对应的符号对象:

from sympy import symbols, diff

x, y, z = symbols('x y z', real=True)
variables = ["x", "y", "z"]
# 建立字符串到符号的映射
var_map = {'x': x, 'y': y, 'z': z}
function = x * y + z

for i in variables:
    v = var_map[i]
    function_partial = diff(function, v)
    print(function_partial)

输出和方法1一致。

内容的提问来源于stack exchange,提问作者rude.boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:17:31