# [ 0. 0. 0. 0. 24.]] #end dist = pc.Gamma(2) print pc.orth_bert(2, dist) # [1.0, q0-2.0, q0^2-6.0q0+6.0] #end dist = pc.Uniform(-1, 1) print dist.ttr([0, 1, 2, 3]) # [[ 0. 0. 0. 0. ] # [-0. 0.33333333 0.26666667 0.25714286]] #end dist = pc.Lognormal(0.01) orths = pc.orth_ttr(2, dist) print orths # [1.0, q0-1.00501252086, q0^2-2.04042818514q0+0.842739860094] #end dist = pc.Iid(pc.Gamma(1), 2) orths = pc.orth_ttr(2, dist) print orths # [1.0, q1-1.0, q0-1.0, q1^2-4.0q1+2.0, q0q1-q1-q0+1.0, q0^2-4.0q0+2.0] #end q = pc.variable() dist = pc.Normal() print pc.E(q, dist) # 0.0 #end
dist = pc.Iid(pc.Normal(), 2) # end nodes, weights = pc.quadgen(2, dist, rule="G") print nodes # [[-1.73205081 -1.73205081 -1.73205081 0. 0. # 0. 1.73205081 1.73205081 1.73205081] # [-1.73205081 0. 1.73205081 -1.73205081 0. # 1.73205081 -1.73205081 0. 1.73205081]] print weights # [ 0.02777778 0.11111111 0.02777778 0.11111111 0.44444444 # 0.11111111 0.02777778 0.11111111 0.02777778] # end orth = pc.orth_ttr(2, dist) print orth # [1.0, q1, q0, q1^2-1.0, q0q1, q0^2-1.0] # end def model_solver(q): return [q[0] * q[1], q[0] * e ** -q[1] + 1] solves = [model_solver(q) for q in nodes.T] # end approx = pc.fitter_quad(orth, nodes, weights, solves) print pc.around(approx, 14) # [q0q1, -1.58058656357q0q1+1.63819248006q0+1.0]
axis([0, 1, 0, 1]) legend(loc="upper left") savefig("intro3.pdf") clf() mu = [0.001, 0.01, 0.1] Sigma = [[1, .5, .5], [.5, 1, .5], [.5, .5, 1]] #end N = pc.Iid(pc.Normal(0, 1), 3) L = linalg.cholesky(Sigma) Q = e**(N0 * L + mu) #end orth_poly = pc.orth_ttr(2, N) #end approx = pc.pcm(model_wrapper, 2, Q, proxy_dist=N) fail print len(w) # 9 print approx # [0.0, -0.014499323957q1-0.014499323957q0+0.240519453193, # -0.0289986479139q1-0.0289986479139q0+0.481038906386] #end print pc.E(approx, Q) # [ 0. 0.19270877 0.38541753]
return q[0] * e**-q[1] / (q[2] + 1) + sin(q[3]) model_solver = pc.lazy_eval(model_solver) #end current = array([1, 1, 1, 1, 1]) current_error = inf #end for step in range(10): for direction in eye(len(dist), dtype=int): #end orth = pc.orth_ttr(current + direction, dist) nodes, weights = pc.quadgen(current + direction, dist, rule="C", growth=True) vals = [model_solver(q) for q in nodes.T] #end residuals = pc.cross_validate(orth, nodes, vals, folds=5) error = sum(residuals**2) #end if error < current_error: current_error = error proposed_dir = current + direction #end
# [ 0. 0. 0. 0. 24.]] #end dist = pc.Gamma(2) print pc.orth_bert(2, dist) # [1.0, q0-2.0, q0^2-6.0q0+6.0] #end dist = pc.Uniform(-1,1) print dist.ttr([0,1,2,3]) # [[ 0. 0. 0. 0. ] # [-0. 0.33333333 0.26666667 0.25714286]] #end dist = pc.Lognormal(0.01) orths = pc.orth_ttr(2, dist) print orths # [1.0, q0-1.00501252086, q0^2-2.04042818514q0+0.842739860094] #end dist = pc.Iid(pc.Gamma(1), 2) orths = pc.orth_ttr(2, dist) print orths # [1.0, q1-1.0, q0-1.0, q1^2-4.0q1+2.0, q0q1-q1-q0+1.0, q0^2-4.0q0+2.0] #end q = pc.variable() dist = pc.Normal() print pc.E(q, dist) # 0.0 #end
ylabel(r"Flow velocity") axis([0,1,0,1]) legend(loc="upper left") savefig("intro3.pdf"); clf() mu = [0.001, 0.01, 0.1] Sigma = [[1,.5,.5],[.5,1,.5],[.5,.5,1]] #end N = pc.Iid(pc.Normal(0,1), 3) L = linalg.cholesky(Sigma) Q = e**(N0*L + mu) #end orth_poly = pc.orth_ttr(2, N) #end approx = pc.pcm(model_wrapper, 2, Q, proxy_dist=N) fail print len(w) # 9 print approx # [0.0, -0.014499323957q1-0.014499323957q0+0.240519453193, # -0.0289986479139q1-0.0289986479139q0+0.481038906386] #end print pc.E(approx, Q)
from pylab import * import current as pc dist_main = pc.MvNormal([0, 0], [[1, .5], [.5, 1]]) #end dist_aux = pc.Iid(pc.Normal(), 2) #end orth, norms = pc.orth_ttr(2, dist_aux, retall=True) print orth # [1.0, q1, q0, q1^2-1.0, q0q1, q0^2-1.0] #end nodes_aux, weights = pc.quadgen(3, dist_aux, rule="G") #end function = lambda q: q[0] * e**-q[1] + 1 #end nodes_main = dist_main.inv(dist_aux.fwd(nodes_aux)) solves = [function(q) for q in nodes_main.T] #end approx = pc.fitter_quad(orth, nodes_aux, weights, solves, norms=norms) print pc.E(approx, dist_aux) # 0.175824752014 #end
def model_solver(q): return q[0]*e**-q[1]/(q[2]+1) + sin(q[3]) model_solver = pc.lazy_eval(model_solver) #end current = array([1,1,1,1,1]) current_error = inf #end for step in range(10): for direction in eye(len(dist), dtype=int): #end orth = pc.orth_ttr(current+direction, dist) nodes, weights = pc.quadgen(current+direction, dist, rule="C", growth=True) vals = [model_solver(q) for q in nodes.T] #end residuals = pc.cross_validate(orth, nodes, vals, folds=5) error = sum(residuals**2) #end if error < current_error: current_error = error proposed_dir = current+direction #end current = proposed_dir