Python 获取SimpifyError

Python 获取SimpifyError,python,sympy,Python,Sympy,我需要在一个图形上为线x+y=0绘制8个贝壳。方程为l**2*y**2=(x**2+y**2)*(y+a)**2l等于{a/4,a/2,3*a/4…,2*a}。因此,我有一个代码: x, y, a, l = symbols('x, y, a, l') a = 1 equat = l**2 * y**2 - (x**2 + y**2)*(y+a)**2 equats = [None] * 8 for i in range(1, 9): equats[i-1] = equat.subs({l

我需要在一个图形上为线
x+y=0
绘制8个贝壳。方程为
l**2*y**2=(x**2+y**2)*(y+a)**2
l
等于
{a/4,a/2,3*a/4…,2*a}
。因此,我有一个代码:

x, y, a, l = symbols('x, y, a, l')
a = 1
equat = l**2 * y**2 - (x**2 + y**2)*(y+a)**2
equats = [None] * 8
for i in range(1, 9):
    equats[i-1] = equat.subs({l : a*i*1/4})
print(equats)
plot_implicit(equats, (x, -5,5), (y, -5, 5))
而此代码会引发一个
SympifyError

---------------------------------------------------------------------------
SympifyError                              Traceback (most recent call last)
<ipython-input-31-26c783d64bc7> in <module>()
      6     equats[i-1] = equat.subs({l : a*i*1/4})
      7 print(equats)
----> 8 plot_implicit(equats, (x, -5,5), (y, -5, 5))

~\Anaconda3\lib\site-packages\sympy\plotting\plot_implicit.py in plot_implicit(expr, x_var, y_var, **kwargs)
    316 
    317     elif not isinstance(expr, Relational):
--> 318         expr = Eq(expr, 0)
    319         has_equality = True
    320     elif isinstance(expr, (Equality, GreaterThan, LessThan)):

~\Anaconda3\lib\site-packages\sympy\core\relational.py in __new__(cls, lhs, rhs, **options)
    290         from sympy.simplify.simplify import clear_coefficients
    291 
--> 292         lhs = _sympify(lhs)
    293         rhs = _sympify(rhs)
    294 

~\Anaconda3\lib\site-packages\sympy\core\sympify.py in _sympify(a)
    385 
    386     """
--> 387     return sympify(a, strict=True)
    388 
    389 

~\Anaconda3\lib\site-packages\sympy\core\sympify.py in sympify(a, locals, convert_xor, strict, rational, evaluate)
    301 
    302     if strict:
--> 303         raise SympifyError(a)
    304 
    305     try:

SympifyError: SympifyError: [0.0625*y**2 - (x**2 + y**2)*(y + 1)**2, 0.25*y**2 - (x**2 + y**2)*(y + 1)**2, 0.5625*y**2 - (x**2 + y**2)*(y + 1)**2, 1.0*y**2 - (x**2 + y**2)*(y + 1)**2, 1.5625*y**2 - (x**2 + y**2)*(y + 1)**2, 2.25*y**2 - (x**2 + y**2)*(y + 1)**2, 3.0625*y**2 - (x**2 + y**2)*(y + 1)**2, 4.0*y**2 - (x**2 + y**2)*(y + 1)**2]
---------------------------------------------------------------------------
SympifyError回溯(最近一次呼叫上次)
在()
6等分[i-1]=等分子({l:a*i*1/4})
7份印刷品(等值)
---->8图u隐式(等式,(x,-5,5),(y,-5,5))
~\Anaconda3\lib\site packages\sympy\plotting\plot\u implicit.py in plot\u implicit(expr,x\u var,y\u var,**kwargs)
316
317 elif不存在(expr,Relational):
-->318 expr=Eq(expr,0)
319具有_相等=真
320 elif isinstance(expr.(相等,大于,小于)):
~\Anaconda3\lib\site packages\sympy\core\relational.py位于新的(cls、lhs、rhs、**选项)
290来自sympy.simplify.simplify导入清晰系数
291
-->292 lhs=_sympify(lhs)
293 rhs=_sympify(rhs)
294
~\Anaconda3\lib\site packages\sympy\core\sympify.py in\u sympify(a)
385
386     """
-->387返回sympify(a,strict=True)
388
389
sympify中的~\Anaconda3\lib\site packages\sympy\core\sympify.py(a,局部变量,convert\u xor,strict,rational,evaluate)
301
302如果严格:
-->303.错误(a)
304
305尝试:
(y+1)**2,0.25*y******2-(x**2+y**2+y**2-(x**2+y**2+y**2)*(y+1)**2,0.25*y**2-(x**2+y**2+y**2-(x**2+2+y**2-(x**2+2+y**2)**2,2,0.25*y*2,0.25*y****2-(x**2-(x**2-(x**2-(x**2+2+2+2+2+y**2+2+y**2+y**2+y**2+y**2+y**2+y**2+y**2)(x**2)(x**2)**2;2,(x**2)(x**2)(x**2)(x**2.25.25.25.25*2.25*2.25*2.25*2 2+y**2)*(y+1)**2]

如何解决这个问题?我在谷歌上搜索,但没有找到任何解决方案。

如果你一个接一个地绘制方程,而不是传递一个方程列表,问题可能会解决

p = plot_implicit(equats[0], (x, -5,5), (y, -5,5), show=False)
for eq in equats[1:]:
    p2 = plot_implicit(eq, (x, -5,5), (y, -5,5), show=False)
    p.append(p2[0])
p.show()

使用loop会创建8个绘图,因此它解决了错误,但并没有解决我需要在画布上绘制的任务,因此它看起来应该像是在画布上绘制的几个函数图。
equals
变量已经是一个
列表,所以它不起作用。它确实起作用,只是不像您希望的那样直观。我将更新我的answerYeah!它可以工作,但是第一次绘图你可能会误解。因此,我可以要求你通过在
plot\u implicit
参数中添加
show=False
来更新代码,以清楚地告诉那些会遇到与我相同问题的人。仅供将来参考:我认为显示所有导入也很好,这样可以轻松地复制&p重新编写代码。