我的代码(Linux Mint 21.2,Python 3.10):
import sympy
print(sympy.__version__) # '1.9'
from sympy import symbols, sin
from sympy.plotting import plot
t = symbols('t')
plotP = plot( 50*sin(t/30)+30*sin(1.3*t/30)+20*sin(2.7*t/30)+25*sin(3.7*t/30), (t, 24800 , 35800) )
四次不同的运行,四个不同的图:
导致这种令人困惑的结果的原因可能是什么?
============
添加以澄清从 shell 执行脚本时也会出现此问题:
============
添加以显示升级到最新版本的 sympy 和 matplotlib 并未解决问题:
顺便说一句:我无法以更小的间隔(例如 0 到 400)重现该问题 - 在这种情况下,图表都是相同的。区别:“稳定”图由一条漂亮的平滑曲线组成,没有重叠的峰值,因为峰值间隔非常大,峰值之间的距离比显示器中像素的距离更近。
在对您的问题的评论中已经提到的
adaptive=True
问题旁边,您成为了可能普遍存在的错误初学者期望的受害者,即您看到的图的形状始终与您正在绘制的函数的形状有关.
这种期望是您惊讶地看到周期性正弦函数图中出现一些奇怪的伪影(例如较长时间段内的直线)并与 sympy 中使用的自适应算法相结合以选择您经历随机变化的采样点的主要原因。绘制的曲线,这不是基础函数值的预期表示,而是某种随机结果,具体取决于时间轴上部分的选择。
换句话说,你有责任知道,如果你使用快速变化的周期函数
t
并使用太大的时间线周期,你在图中看到的是什么,即使它看起来像一条周期曲线,只不过是通过选择开始和结束时间获得的或多或少任意值,这些值相互连接以形成图中的曲线。因此,您在图中实际看到的内容与您正在绘制的函数曲线的实际形状几乎没有任何关系。
我鼓励您使用可以传递给绘图方法的
nb_of_points
参数。分配给它的值越低,例如:nb_of_points=7
,您看到的内容与您正在绘制的函数几乎没有任何关系。换句话说,根据您使用的 nb_of_points
值,您将得到非常不同的图。尝试一下,亲眼看看。
下面是使用具有不同
nb_of_points=
值的代码的示例来说明上述解释: