2017-09-17 88 views
0

我有一个函数2 * X * arcctg(X) - 1,我尝试绘制它在Python:Python的绘图三角FUNC

import os 
import matplotlib.pyplot as plt 
import numpy as np 

x = np.linspace(0, np.pi/2) 
y = 2 * x * np.cos(2 * x)/np.sin(2 * x) 
plt.plot(x, y) 
plt.axis('tight') 
plt.show() 

,但它的情节smthg这样的: Wrong pic in python 当我把它绘制在它的外观上:

Right plot in Wolfram 我在做什么错?

+2

那么对于初学者,'arcctg(X)'是不是'COS(2个)/罪(2X)'。 –

回答

3

的功能应该是:

2*x*arcctg(x) - 1 

arcctg(x)cos(2x)/sin(2x)(您在代码中描述的表达)。 A ctg合作,因此cos(x)/sin(x)。这意味着arcctg(x)arctan(1/x)

所以,你可以使用:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.linspace(0, np.pi/2) 
y = 2 * x * np.arctan(1/x) - 1 
plt.plot(x, y) 
plt.axis('tight') 
plt.show()

这将产生以下情节:

The plot of 2x arcctg(x) - 1

与问题中的情节相匹配。

如果你想使剧情看起来比在Wolfram Alpha的更多,你可以像@MSeifert说,设置的范围从-pi/2到pi/2,如:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.linspace(-np.pi/2, np.pi/2, 1000) 
y = 2 * x * np.arctan(1/x) - 1 
plt.plot(x, y) 
plt.axis('tight') 
plt.show()

这就产生:

plot with different bounds

+0

@MSeifert:因为OP导入'os'。所以我的猜测是,他/她保存图像。但在这种情况下,它确实不相关。 –

+0

啊,好的。只是另一个建议:'x = np.linspace(-np.pi/2,np.pi/2,10000)'会更准确地匹配wolfram输出,并避免'0'处的无效值(至少与linspace创建的点数不奇怪) – MSeifert

+0

@ MSeifert:谢谢。我已经用你的建议更新了答案:)。 –