我希望可视化tan(xi) = tanh(xi), xi>0
和我的情节
plot(tan(pi*xi), tanh(pi*xi), (xi, 0, 4), ylim=(-1, 2))
像这样出现
在哪里可以看到实际的根,xi_i \approx pi*(n+1/4), n=1, ...
但也可以
假pi*(n+1/2)
的假根,是sympy
绘制算法的原因,它在正负无限之间绘制一条垂直线。
我试图避免自适应采样并使用低采样率无济于事。其他程序,例如gnuplot
,给我一个更合理的情节,至少考虑到我的担忧,那就是......
最后我的问题是,是否可以避免sympy
的{{1}}函数中的那些垂直线?
答案 0 :(得分:2)
Sympy使用matplotlib作为绘图的后端;根本原因是matplotlib连接点甚至在奇点周围。如果用numpy进行绘图,则绘制对y值的直接访问允许一个replace overly large numbers with nan or infinity。如果保持同情,那么对数字的严格控制似乎不可用。我能做的最好的事情是使用特定函数tan(pi * x)的知识将范围分成不包含奇点的较小范围列表:
import math
from sympy import *
xi = symbols('xi')
xmin = 0
xmax = 4
ranges = [(xi, n-0.499, n+0.499) for n in range(math.ceil(xmin+0.5), math.floor(xmax+0.5))]
ranges.insert(0, (xi, 0, 0.499))
ranges.append((xi, math.floor(xmax+0.5) - 0.499, xmax))
plot((tanh(pi*xi), (xi, xmin, xmax)), *[(tan(pi*xi), ran) for ran in ranges], ylim=(-1, 2))
输出: