0

我正在尝试使用 Numpy 和 matplotlib 生成分段周期性图,如下所示:

import numpy as np
import matplotlib.pyplot as plt

Q1 = lambda t, f, Q_max: Q_max * np.sin(2 * np.pi *f * t)
Q2 = lambda t, f, Q_max: 0

def Q_true(t, f, stat):
    while(t >= 1/f):
        t -= 1/f 
    while(t < 0): 
        t += 1/f 
    return ((t <= 1/(2*f)) == stat)

Q = lambda t, f, Q_max: np.piecewise(t, [Q_true(t, f, True) , Q_true(t,f, False)], [Q1, Q2], f, Q_max)

Q_max = 225 # mL/sec
f = 1.25 # Hz
t = np.linspace(0,4,101) # secs
plt.plot(t, Q(t, f, Q_max))

问题是Q_true接收整个t数组而不是单个点。如果我只是在 condlist 中使用小于/大于语句,这不是问题numpy.piecewise,但使用 . 来确定它是真还是假要容易得多Q_true

情节应该是这样的:

示例图

有任何想法吗?

谢谢!

4

1 回答 1

2

以下版本的Q_true作品:

def Q_true(t, f, stat):
    period = 1/f
    return (t % period < period/2) == stat

请注意,您正在命名您的匿名函数 ( Q1 = lambda ...)。在这种情况下,您应该只使用定义函数def

于 2011-03-22T16:30:37.747 回答