我试图绘制一个包含[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
1条答案
按热度按时间nzk0hqpo1#
你得到错误的原因是,你除以零。这是微不足道的。正如你所知道的,你的函数在这些临界点上是定义良好且连续的(我假设你自己做了数学证明),你可以玩一个小把戏来得到图,这就是你所要求的:
仅绘制点,其中
sin(x)!=0
。例如,以下代码段将重新创建您的错误:而下面的则不会,因为x与pi和0略有不同:
我得到以下输出: