Sympy 产生 `TypeError: unsupported operand type(s) for *: 'interval' and 'complex'` 对于复杂有理式表达式

问题描述 投票:0回答:1

我有这个 sympy 脚本:

from sympy import *
from sympy.plotting import plot_implicit

x, y = symbols('x y', real=True)

alpha = sqrt(2) / 2
expr = 1 + ((1-alpha) * x + y*I) / (1 - alpha * (x + y*I))**2

expr = Eq(abs(expr), 1)
p1 = plot_implicit(expr)

它试图求解 R(z) = 1 其中:

据我所知,我给出的表达是正确的。为什么我会得到不兼容的类型?请注意,如果我去掉分母,我确实会得到一个图。

完整错误:

Traceback (most recent call last):
  File "/home/makogan/Documents/University/Math521/A3/A5.py", line 49, in <module>
    p1 = plot_implicit(expr)
  File "/home/makogan/.local/lib/python3.10/site-packages/sympy/plotting/plot_implicit.py", line 430, in plot_implicit
    p.show()
  File "/home/makogan/.local/lib/python3.10/site-packages/sympy/plotting/plot.py", line 240, in show
    self._backend.show()
  File "/home/makogan/.local/lib/python3.10/site-packages/sympy/plotting/plot.py", line 1533, in show
    self.process_series()
  File "/home/makogan/.local/lib/python3.10/site-packages/sympy/plotting/plot.py", line 1530, in process_series
    self._process_series(series, ax, parent)
  File "/home/makogan/.local/lib/python3.10/site-packages/sympy/plotting/plot.py", line 1398, in _process_series
    points = s.get_raster()
  File "/home/makogan/.local/lib/python3.10/site-packages/sympy/plotting/plot_implicit.py", line 87, in get_raster
    func(xinterval, yinterval)
  File "/home/makogan/.local/lib/python3.10/site-packages/sympy/plotting/experimental_lambdify.py", line 272, in __call__
    return self.lambda_func(*args, **kwargs)
  File "<string>", line 1, in <lambda>
TypeError: unsupported operand type(s) for *: 'interval' and 'complex'
python math sympy numerical-methods
1个回答
1
投票

这是因为 sympy 的绘图模块使用的是旧的且过时的评估模块。如果您尝试这个新的绘图模块,您将得到答案:

from sympy import *
from spb import *
var("x:z")

x, y = symbols('x y', real=True)

alpha = sqrt(2) / 2
expr = 1 + ((1 - alpha) * z) / (1 - alpha * z)**2
expr = expr.subs(z, x + I*y)

expr = Eq(abs(expr), 1)
p1 = plot_implicit(expr, x)

© www.soinside.com 2019 - 2024. All rights reserved.