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

使用SymPy绘制带约束方程遇TypeError问题求助

问题描述

需要绘制带约束条件的方程图像,例如:

  • sin(x)(当x > 1时)
  • 3z * cos(x)(当x >= 0且x + z = 1时)

已完成输入字符串到SymPy表达式的转换,代码如下:

import sympy
from sympy.parsing.sympy_parser import parse_expr

# 其他无关输入处理步骤
# 最终得到方程字符串和约束条件字符串列表

equation = "sin(x)"
constraints = ["x > 1"]

x = sympy.symbols("x") 
eq = parse_expr(equation, evaluate= False)
constraints = [ parse_expr(cons, evaluate= False) for cons in constraints]

尝试执行sympy.plot_implicit(sympy.And(eq, *constraints))绘图时,触发错误:TypeError: expecting bool or Boolean, not sin(x),需解决该问题。

解决方法

报错核心原因是plot_implicit要求传入布尔型表达式(等式或不等式),但当前传入的eq是普通函数表达式,不满足参数要求。需根据函数维度分情况处理:

1. 单变量函数(如sin(x))

单变量场景下无需使用plot_implicit,直接用sympy.plot结合约束设置绘图区间即可:

import sympy
from sympy.parsing.sympy_parser import parse_expr

equation = "sin(x)"
constraints = ["x > 1"]

x = sympy.symbols("x") 
eq = parse_expr(equation, evaluate=False)
constraints = [parse_expr(cons, evaluate=False) for cons in constraints]

# 根据约束设置绘图区间,这里取x∈(1,10)
p = sympy.plot(eq, (x, 1, 10), show=False)
p.show()

若约束更复杂(如多区间限制),可通过Piecewise定义分段函数后绘图:

from sympy import Piecewise

# 定义分段逻辑:满足约束时取原函数,否则无定义
piecewise_eq = Piecewise((eq, sympy.And(*constraints)), (None, True))
sympy.plot(piecewise_eq, (x, -5, 10))

2. 多变量函数(如3z*cos(x))

多变量场景需先将表达式转为布尔等式(如y = 3z*cos(x)),再结合约束条件:

import sympy
from sympy.parsing.sympy_parser import parse_expr

equation = "3*z*cos(x)"
constraints = ["x >= 0", "x + z = 1"]

x, z, y = sympy.symbols("x z y") 
eq = parse_expr(equation, evaluate=False)
constraints = [parse_expr(cons, evaluate=False) for cons in constraints]

# 将函数转为y=eq的等式,再与约束组合
plot_expr = sympy.And(y - eq, *constraints)
sympy.plot_implicit(plot_expr, (x, 0, 5), (z, -4, 1))

如果是绘制隐函数(如3z*cos(x)=0),直接将表达式转为等式后结合约束即可:

plot_expr = sympy.And(eq, *constraints)
sympy.plot_implicit(plot_expr, (x, 0, 5), (z, -4, 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:55:14