Pavel Snopov
Pavel Snopov

Reputation: 205

Getting SimpifyError

I need to plot 8 conchoids for line x+y=0 on one graph. The equation is l**2 * y**2 = (x**2 + y**2)*(y+a)**2. l equals {a/4, a/2, 3*a/4..., 2*a}. Thus, I have a code:

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))

And this code raises a 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]

How can I fix this problem? I was googling but haven't found any solution.

Upvotes: 3

Views: 1101

Answers (1)

Uvar
Uvar

Reputation: 3462

The problem is probably solved if you plot the equations one by one instead of passing a list of equations.

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()

Upvotes: 2

Related Questions