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

Sympy中条件表达式报错,如何仅绘制函数正值区域?

在Sympy中创建条件表达式并绘制函数正值区域

问题背景

尝试编写依赖于另一表达式的条件符号表达式,代码如下:

from sympy import *
x = symbols('x')
y1 = x/cos(x)
y2 = y2 if y1>0 else nan

运行后触发异常:

File /usr/lib/python3.10/site-packages/sympy/core/relational.py:511, in Relational.__bool__(self)
    510 def __bool__(self):
--> 511     raise TypeError("cannot determine truth value of Relational")

TypeError: cannot determine truth value of Relational

最终需求是实现上述条件逻辑,并仅绘制x/cos(x)函数为正的区域。

问题分析

报错根源在于:Python原生的if-else语句要求条件必须能确定布尔真值,但Sympy的y1>0是符号关系表达式(Relational类型),在未代入具体数值前,无法判定其真假,因此抛出该类型错误。

解决方案

1. 用Sympy的Piecewise定义条件表达式

Sympy提供了Piecewise函数专门处理符号分段逻辑,替代Python原生的条件判断:

from sympy import *
x = symbols('x')
y1 = x/cos(x)
# 定义分段规则:当y1>0时取y1,其余情况取nan
y2 = Piecewise((y1, y1 > 0), (nan, True))

Piecewise的参数为多个(表达式, 条件)元组,最后一个元组用True作为条件,表示默认分支。

2. 绘制函数正值区域的两种方案

方案一:直接绘制分段函数

使用Sympy的plot函数绘制y2,非正值区域会因nan自动显示为空白:

plot(y2, (x, -2*pi, 2*pi))

方案二:用plot_implicit标记正值区域

如果需要直观展示满足y1>0的区域范围,可使用plot_implicit绘制不等式对应的区域:

plot_implicit(y1 > 0, (x, -2*pi, 2*pi), (y, -10, 10))

更新说明

已采纳@Oscar Benjamin的建议解决原条件表达式问题,但在绘制Piecewise函数及使用plot_implicit时遇到其他绘图异常,相关问题将另行提问说明。


内容的提问来源于stack exchange,提问作者gboffi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:31:32