2011-03-22 56 views
0

我試圖使用生成和numpy的一個matplotlib分段週期性情節,像這樣的檢查時:條件使用numpy.piecewise生成分段週期性情節

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數組而不是單個點。如果我只使用numpy.piecewise condlist中的小於/大於語句,這不是問題,但使用Q_true確定它是真是假更容易。

情節應該是這個樣子:

Example Plot

任何想法?

謝謝!

回答

2

以下版本的Q_true作品:

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

請注意,您在命名您的匿名函數(Q1 = lambda ...)。在這種情況下,您應該使用def來定義函數。

+0

太棒了,完美的作品!我想到了modulo,但不知道如何在這種情況下實現它。非常感謝! – srunni 2011-03-22 16:43:30