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

使用SymPy创建二元分段函数失败,请求技术协助

修正SymPy二元分段函数的实现问题

你的代码核心问题是用了Python原生的元组比较语法,SymPy无法识别(x,y) != (0,0)这种条件,需要改用SymPy提供的逻辑表达式来定义分段条件。

正确实现代码

import sympy as sp

# 定义符号变量
x, y, a = sp.symbols('x y a')

# 用SymPy支持的逻辑表达式定义分段条件
# 方式1:用x²+y²≠0表示(x,y)≠(0,0)(数学上等价,写法简洁)
f_exp = sp.Piecewise(
    ((x*y*(x**2 - y**2))/(x**2 + y**2), sp.Ne(x**2 + y**2, 0)),
    (a, sp.And(sp.Eq(x, 0), sp.Eq(y, 0)))
)

# 方式2:直接用逻辑非表示(x,y)≠(0,0),逻辑更直观
# f_exp = sp.Piecewise(
#     ((x*y*(x**2 - y**2))/(x**2 + y**2), sp.Not(sp.And(sp.Eq(x, 0), sp.Eq(y, 0)))),
#     (a, sp.And(sp.Eq(x, 0), sp.Eq(y, 0)))
# )

# 转为Lambda函数
f = sp.Lambda((x, y), f_exp)

# 验证效果
display(f(0, 0))   # 输出a
display(f(1, 1))   # 输出0
display(f(2, 1))   # 输出6/5

关键说明

  • SymPy的Piecewise要求每个分段条件必须是SymPy布尔表达式,需使用sp.Eq(等于)、sp.Ne(不等于)、sp.And(逻辑与)、sp.Not(逻辑非)等SymPy内置函数构建,不能直接用Python原生的==、!=或元组比较。
  • 用x²+y²≠0替代(x,y)≠(0,0)是数学上的等价写法,能覆盖所有非原点的情况,写法更简洁。

内容的提问来源于stack exchange,提问作者Adrián

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:40:09