def ltisde_as_linearsde(G_const, v_const, L_const): G = lambda t: G_const v = lambda t: v_const L = lambda t: L_const dim = 2 return pnss.LinearSDE(dim, G, v, L, mde_atol=1e-12, mde_rtol=1e-12)
def _setup(self, test_ndim, spdmat1, spdmat2): self.G = lambda t: spdmat1 self.v = lambda t: np.arange(test_ndim) self.L = lambda t: spdmat2 self.transition = pnss.LinearSDE(test_ndim, self.G, self.v, self.L) self.g = lambda t, x: self.G(t) @ x + self.v(t) self.dg = lambda t, x: self.G(t)
def ltisde_as_linearsde_sqrt_forward_implementation(G_const, v_const, L_const): G = lambda t: G_const v = lambda t: v_const L = lambda t: L_const dim = 2 return pnss.LinearSDE(dim, G, v, L, mde_atol=1e-12, mde_rtol=1e-12, forward_implementation="sqrt")
def linearize(self, at_this_rv: randvars.Normal): """Linearize the drift function with a first order Taylor expansion.""" g = self.non_linear_model.driftfun dg = self.non_linear_model.jacobfun x0 = at_this_rv.mean def forcevecfun(t): return g(t, x0) - dg(t, x0) @ x0 def driftmatfun(t): return dg(t, x0) return statespace.LinearSDE( dimension=self.non_linear_model.dimension, driftmatfun=driftmatfun, forcevecfun=forcevecfun, dispmatfun=self.non_linear_model.dispmatfun, mde_atol=self.mde_atol, mde_rtol=self.mde_rtol, mde_solver=self.mde_solver, )