matplotlib 如何绘制[sin(nx)/sin(x)]^2?

7y4bm7vi  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(126)

我试图绘制一个包含[sin(n x)/sin(x)]^2项的函数,但我得到的只是一个nan数组和以下警告:

invalid value encountered in divide
  return (np.sin(n * alpha * x * np.pi) / np.sin(alpha * x * np.pi))**2

这是我的功能:

def fun(x):
    return (np.sinc(beta * x)**2) * (np.sin(n * alpha * x * np.pi) / np.sin(alpha * x * np.pi))**2

如果我将函数简化为(np.sin(n * x) / np.sin(x))**2,也会遇到同样的问题。
x是30000个元素的1D np.阵列,范围从.001到30,步长为.001,α为~0.452
我试着用linspace做一个简单的例子,但现在它工作得很好。
我不知道为什么我不能用不同的数据点重新创建这个,但这个解决方案工作得很好:

return (np.sin(n * x[np.sin(x) != 0]) / np.sin(x[np.sin(x) != 0]))**2
nzk0hqpo

nzk0hqpo1#

你得到错误的原因是,你除以零。这是微不足道的。正如你所知道的,你的函数在这些临界点上是定义良好且连续的(我假设你自己做了数学证明),你可以玩一个小把戏来得到图,这就是你所要求的:
仅绘制点,其中sin(x)!=0。例如,以下代码段将重新创建您的错误:

x = linspace(-pi, pi, 1000)

for n in range(10):
    y = (sin(n * x) / sin(x))**2
    plot(x,y,label=n)    
legend()

而下面的则不会,因为x与pi和0略有不同:

x = linspace(-3.1415, 3.1415, 1000)
for n in range(10):
    y = (sin(n * x) / sin(x))**2
    plot(x,y,label=n)

legend()

我得到以下输出:

相关问题