<p>考虑到数值函数,使用Numpy更好(就性能而言)。有一种方法:</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
np.random.seed(10)
S = 20 # number of piecewise functions
# generate S function parameters.
# For example, the k-th function is defined as equal to
# p_values[k,0] when t<t_values[k] and equal to
# p_values[k,1] when t>= t_values[k]
t_values = np.random.random(S)
p_values = np.random.random((S,2))
# define a piecewise function given the function's parameters
def p_func(t, t0, p0):
return np.piecewise(t, [t < t0, t >= t0], p0)
# define a function that sums a set of piecewise functions corresponding to
# parameter arrays t_values and p_values
def p_sum(t, t_values, p_values):
return np.sum([p_func(t, t0, p0) for t0, p0 in zip(t_values,p_values)])
</code></pre>
<p>以下是函数和的图:</p>
^{pr2}$
<p><a href="https://i.stack.imgur.com/XMTrf.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/XMTrf.png" alt="enter image description here"/></a></p>
<p>显然,为了找到最大值,只考虑<code>S</code>中包含的<code>S</code>时间瞬间就足够了。对于这个例子</p>
<pre><code>np.max([p_sum(tt,t_values,p_values) for tt in t_values])
</code></pre>
<blockquote>
<p><code>11.945901591934897</code></p>
</blockquote>