如何使用matplotlib绘制此step函数?

2024-03-28 13:42:15 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在matplotlib上绘制以下函数:

对于[n,n+1]中的所有间隔t,f(t)=1表示n偶数,f(t)=-1表示n奇数。这基本上是一个阶跃函数,f(t)=1从0到1,f(t)=-1从1到2,f(t)=1从2到3,f(t)=-1从3到4,依此类推。你知道吗

这是我目前的代码:

t = arange(0,12)

def f(t):
    if t%2 == 0:
        for t in range(t,t+1):
            f = 1
        if t%2 != 0:
            for t in range(t,t+1):
                f = -1

此代码的过程如下:

  1. 定义t在0到12之间。你知道吗
  2. 定义函数f(t)。你知道吗
  3. 使用该语句,如果t是偶数整数,那么它将考虑t=0,2,4,6,8,10,12。你知道吗
  4. 使用for循环可以为每个整数定义f=1。你知道吗
  5. 对t的奇数值重复上述步骤

你能看出这个代码有什么根本的错误吗?我把事情复杂化了吗?你知道吗

当我试着用

matplotlib.pyplot.plot(t,f,'b-')
matplotlib.pyplot.show()

我得到一个ValueError说“x和y必须有相同的第一维度”。你知道吗

这里出了什么问题?你知道吗


Tags: 函数代码infor间隔if定义matplotlib
1条回答
网友
1楼 · 发布于 2024-03-28 13:42:15

您可以使用^{}将数组中的元素t加倍,并使用1 - 2 * (t%2)构建(-1,1)模式:

t = np.arange(13)
f = np.repeat(1 - 2 * (t%2), 2)[:-1]
t = np.repeat(t, 2)[1:]

In [6]: t
Out[6]: 
array([ 0,  1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,
        9,  9, 10, 10, 11, 11, 12, 12])

In [7]: f
Out[7]: 
array([ 1,  1, -1, -1,  1,  1, -1, -1,  1,  1, -1, -1,  1,  1, -1, -1,  1,
        1, -1, -1,  1,  1, -1, -1, 1])

也许更简单的是:

In  [8]: n = 12
In  [9]: t = np.repeat(np.arange(n+1), 2)[1:-1]
In [10]: f = np.array([1,1,-1,-1]*(n//2))

相关问题 更多 >