def __init__(self,
f,
past,
helpers = (),
control_pars = (),
n_basic = None,
tangent_indices = (),
):
self.past = past
self.t, self.y, self.diff = self.past[-1]
self.n = len(self.y)
self.n_basic = n_basic or self.n
self.tangent_indices = tangent_indices
self.last_garbage = -1
self.old_new_y = None
self.parameters = []
from jitcdde._jitcdde import t, y, past_y, anchors
from sympy import DeferredVector, sympify, lambdify
Y = DeferredVector("Y")
substitutions = list(reversed(helpers)) + [(y(i),Y[i]) for i in range(self.n)]
past_calls = 0
f_wc = []
for entry in f():
new_entry = sympify(entry).subs(substitutions).simplify(ratio=1.0)
past_calls += new_entry.count(anchors)
f_wc.append(new_entry)
F = lambdify(
[t, Y] + list(control_pars),
f_wc,
[
{
anchors.name: self.get_past_anchors,
past_y .name: interpolate
},
"math"
]
)
self.f = lambda *args: np.array(F(*args)).flatten()
self.anchor_mem = (len(past)-1)*np.ones(past_calls, dtype=int)
评论列表
文章目录