def test_1d_gauss_hermite_quadrature(recurrence_algorithm): distribution = Normal(2, 2) abscissas, weights = quad_gaussian( 10, distribution, recurrence_algorithm=recurrence_algorithm) assert abscissas.shape == (1, 11) assert weights.shape == (11, ) assert numpy.allclose(numpy.sum(abscissas * weights, -1), distribution.mom(1)) assert numpy.allclose(numpy.sum(abscissas**2 * weights, -1), distribution.mom(2))
def test_3d_gauss_hermite_quadrature(recurrence_algorithm): distribution = Iid(Normal(0, 1), 3) abscissas, weights = quad_gaussian( 3, distribution, recurrence_algorithm=recurrence_algorithm) assert abscissas.shape == (3, 4**3) assert weights.shape == (4**3, ) kloc = numpy.eye(3, dtype=int) assert numpy.allclose(numpy.sum(abscissas * weights, -1), distribution.mom(kloc)) assert numpy.allclose(numpy.sum(abscissas**2 * weights, -1), distribution.mom(2 * kloc))
""" Created: Fri Jul 26 09:57:16 2019 @author: Christopher Albert <*****@*****.**> """ import time from chaospy import Normal, J, generate_quadrature params = [Normal(mu=0.999, sigma=0.0052), Normal(mu=27.1, sigma=17.0), Normal(mu=0.318, sigma=0.1), Normal(mu=0.015, sigma=0.0087), Normal(mu=0.0817, sigma=0.0077), Normal(mu=1.309, sigma=0.086), Normal(mu=2.19, sigma=0.22)] dist = J(*params) #%% t = time.time() nodes, weights = generate_quadrature(4, dist, rule='G', sparse=True) print('time elapsed: {} s'.format(time.time() - t))
#%% save to disk def save(approx): with open('pce.pickle', 'wb') as filehandler: pickle.dump(approx, filehandler) #%% indata = np.load('indata.npy') outdata = np.load('outdata.npy') with open('pce.pickle', 'rb') as filehandler: approx = pickle.load(filehandler) params = OrderedDict() data = np.genfromtxt('params_1998.txt', dtype=None, encoding=None) for param in data: if(param[1] == 'Normal'): params[param[0]] = Normal(param[2], param[3]) #%% distribution = J(*params.values()) #%% F0 = E(approx, distribution) dF = Std(approx, distribution) #%% F0[0] = F0[1] dF[0] = dF[1] plt.plot(np.arange(len(F0))-38, F0, 'k') plt.fill_between(np.arange(len(F0))-38,F0-dF, F0+dF, color='k', alpha=0.3) plt.ylim(-100,200) plt.xlabel('t')
#%% data = np.genfromtxt('2019-07_run_1998/params.txt', skip_header=1, dtype=('|U64', '|U64', float, float)) labels = data['f0'] # parameter labels mean = data['f2'] # E0 std = data['f3'] # sqrt(Var0) s = sqrt(log(std**2 / mean**2 + 1)) mu = log(mean) - 0.5 * s**2 params = [] for k in range(len(mu)): params.append(Normal(mu=mu[k], sigma=s[k])) dist = J(*params) #%% nodes, weights = generate_quadrature(4, dist, rule='G', sparse=True) expansion = orth_ttr(3, dist) #%% approx = fit_quadrature(expansion, nodes, weights, outdata) #%% F0 = E(approx, dist) dF = Std(approx, dist)
import numpoly import chaospy as cpy import numpy as np from time import time from chaospy import Normal, generate_expansion if __name__ == '__main__': prior_mean = 0. prior_sigma = 5. dim = 2 prior = cpy.Iid(Normal(prior_mean, prior_sigma), dim) poly_order = 2 abscissas, weights = cpy.generate_quadrature(poly_order, prior, rule='gaussian') expansion = generate_expansion(poly_order, prior, retall=False) def forward_model(params): return np.prod(np.exp(-params**2)) evals = np.array([forward_model(sample) for sample in abscissas.T]) surrogate = cpy.fit_quadrature(expansion, abscissas, weights, evals) coefficients = np.array(surrogate.coefficients) indeterminants = surrogate.indeterminants exponents = surrogate.exponents