清理tan(x)的情节

时间:2016-04-17 09:17:10

标签: plot sympy

我希望可视化tan(xi) = tanh(xi), xi>0和我的情节

的根源
plot(tan(pi*xi), tanh(pi*xi), (xi, 0, 4), ylim=(-1, 2))

像这样出现

sympy plot

在哪里可以看到实际的根,xi_i \approx pi*(n+1/4), n=1, ...但也可以 假pi*(n+1/2)的假根,是sympy绘制算法的原因,它在正负无限之间绘制一条垂直线。

我试图避免自适应采样并使用低采样率无济于事。其他程序,例如gnuplot,给我一个更合理的情节,至少考虑到我的担忧,那就是......

gnuplot

最后我的问题是,是否可以避免sympy的{​​{1}}函数中的那些垂直线?

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

输出:

tangent plot