Matlab的
x = 0:pi/100:2*pi;
y = sin(x);
plot(y)
我认为range()
在这里不起作用,因为它只接受结束参数作为整数但我需要浮点数(0.0; 2*pi
)。
Python 2.7.11 +中的伪代码
import math
x = pseudoRange(0.0, 2*math.pi, math.pi/100);
对整数而言,ceil()
不可行。
如何在Python中使用三角函数范围的浮点数?
答案 0 :(得分:5)
使用生成器表达式:
(math.pi/100*k for k in range(200))
如果您希望结果作为列表使用:
[math.pi/100*k for k in range(200)]
您还可以使用list-comprehension方法获取相应的y值:
x = [math.pi/100*k for k in range(200)]
y = [math.sin(p) for p in x]
然后可以使用matplotlib
绘制一对列表x,y
请注意,在上文中,这些点的范围是0.0
到1.99*math.pi
。如果您希望最终得分为2*pi
,则需要将range(200)
替换为range(201)
。
答案 1 :(得分:3)
您可以使用numpy.arange
:
>>> np.arange(0, 2*math.pi, math.pi/100)
array([ 0. , 0.03141593, 0.06283185, 0.09424778, 0.12566371,
# ... 190 more ...
6.12610567, 6.1575216 , 6.18893753, 6.22035345, 6.25176938])
您可能也对numpy.linspace
感兴趣:
>>> np.linspace(0, 2*math.pi, 200)
array([ 0. , 0.0315738 , 0.06314759, 0.09472139, 0.12629518,
# ... 190 more ...
6.15689013, 6.18846392, 6.22003772, 6.25161151, 6.28318531])
使用np.arange
,第三个参数是step
,而np.linspace
则是区间内均匀间隔值的总数。另请注意,linspace
将包含2*pi
,而arange
则不会,但会停留在step
的最后一个倍数。
然后你可以用matplotlib.pyplot
绘制那些。对于sin
,您可以使用np.sin
将正弦函数应用于输入数组的每个元素。对于其他功能,请使用列表推导。
>>> from matplotlib import pyplot
>>> x = np.arange(0, 2*math.pi, math.pi/100)
>>> y = np.sin(x) # using np.sin
>>> y = [math.sin(r) for r in x] # using list comprehension
>>> pyplot.plot(x, y)
[<matplotlib.lines.Line2D at 0xb3c3210c>]
>>>pyplot.show()
答案 2 :(得分:0)
假设您已经安装了matplotlib
或者您可以在系统上安装它,matlab
命名空间下可以使用某种pylab
克隆,
import pylab as pl
x = pl.linspace(0, 2*pl.pi,201) # x is an array
y = pl.sin(x) # y is computed with an array expression
pl.plot(x, y, "ro-", label="Sine(t)")
pl.legend(loc='best')
pl.xlabel('$\\omega_o t$')
pl.show()
您还可以直接导入所有pylab
的命名空间
from pylab import *
x = linspace(0, 2*pi, 201)
y = sin(x)
...
但不推荐这样做,因为您的命名空间中现在有近1000个新的非限定名称......
严格来到你的问题,x = 0:pi/100:2*pi;
映射到不同的语法,x = pl.linspace(0, 2*pl.pi,201)
,你没有指定增量而是指定点数(正如你所指出的,由于栅栏效应你必须指定201
才能获得所需的结果。