def propagate_GA(self, u, Sigma_x): mu = self.propagate_mean(u, Sigma_x) bounds = [] for i in range(len(u)): bounds.append((u[i] - 6 * Sigma_x[i][i], u[i] + 6 * Sigma_x[i][i])) func1 = lambda x: (self.gp(x))[1] * mvnorm(x, u, Sigma_x) func2 = lambda x: (self.gp(x))[0] ** 2 * mvnorm(x, u, Sigma_x) variance = integrate(func1, bounds) + integrate(func2, bounds) - mu ** 2 return mu, variance
def propagate_mean(self, u, Sigma_x): bounds = [] for i in range(len(u)): bounds.append((u[i] - 6 * Sigma_x[i][i], u[i] + 6 * Sigma_x[i][i])) func = lambda x: (self.gp(x))[0] * mvnorm(x, u, Sigma_x) return integrate(func, bounds)
def propagate(self, y, u, Sigma_x): def py(x, y): mux, varx = self.gp(x) return 1 / (np.sqrt(2 * np.pi * varx)) * np.exp(-0.5 * (y - mux) ** 2 / varx) bounds = [] for i in range(len(u)): bounds.append((u[i] - 6 * Sigma_x[i][i], u[i] + 6 * Sigma_x[i][i])) func = lambda x: py(x, y) * mvnorm(x, u, Sigma_x) return integrate(func, bounds)