def fve_gun(exp, nom, plt): from fit import Opt from gun import magic from gun import Gun fig = plt.figure('fve_gun',figsize=fig_y_size(9)) p2f = magic.newton2dyne*magic.area/1e11 opt = Opt( nom.eos, {'gun':nom.gun,'stick':nom.stick}, {'gun':exp.vt,'stick':exp.stick_data}) cs,costs = opt.fit(max_iter=5) print('costs={0}'.format(costs)) opt_gun = Gun(opt.eos) nom.gun.eos = nom.eos # Restore nominal eos after optimization t2vs = [Gun(eos).fit_t2v() for eos in [opt.eos.new_c(c) for c in cs]] e = [exp.v - t2v(exp.t) for t2v in t2vs[1:]] data = {'nominal':( (exp.x, nom.eos(exp.x)*p2f, 'f'), (exp.x, nom.gun.x_dot(exp.x)/magic.cm2km, 'v'))} data['experimental']=( (exp.x, exp.eos(exp.x)*p2f, 'f'), (exp.x, exp.gun.x_dot(exp.x)/magic.cm2km, 'v')) data['fit']=( (exp.x, opt.eos(exp.x)*p2f, 'f'), (exp.x, opt_gun.x_dot(exp.x)/magic.cm2km, 'v')) cm = r'$x/(\rm{cm})$' mu_sec = r'$t/(\mu\rm{sec})$' f_key = r'$f/({\rm dyn}\cdot 10^{11})$' v_key = r'$v/(\rm{km/s})$' e_key = r'$\epsilon_k/(\rm{m/s})$' ax_d = { 'f':{'ax':fig.add_subplot(3,1,1), 'l_x':cm, 'l_y':f_key, 'loc':'upper right'}, 'v':{'ax':fig.add_subplot(3,1,2), 'l_x':cm, 'l_y':v_key, 'loc':'lower right'}, 'e':{'ax':fig.add_subplot(3,1,3), 'l_x':mu_sec, 'l_y':e_key, 'loc':'upper right'} } for mod,xyn in data.items(): for x,y,name in xyn: if mod == 'experimental': ax_d[name]['ax'].plot(x,y,'r-.',label=r'$\rm %s$'%mod) else: ax_d[name]['ax'].plot(x,y,label=r'$\rm %s$'%mod) for i in range(len(e)): ax_d['e']['ax'].plot(exp.t*1e6,e[i]/100,label=r'$\epsilon_%d$'%(i+1)) for name,d in ax_d.items(): d['ax'].legend(loc=ax_d[name]['loc']) d['ax'].set_xlabel(d['l_x']) d['ax'].set_ylabel(r'$%s$'%name) if 'l_y' in d: d['ax'].set_ylabel(d['l_y']) return fig
def work(): ''' This code for debugging stuff will change often ''' import matplotlib.pyplot as plt from eos import Nominal, Spline_eos from fit import Opt vt = data() nom = Spline_eos(Nominal(),precondition=True) stick = Stick(nom) opt = Opt( nom, {'stick':stick}, {'stick':vt}) cs,costs = opt.fit(max_iter=10) D, ep, Sigma_inv = stick.compare(vt, cs[-1]) info = np.dot(D.T, np.dot(Sigma_inv, D)) _vals,_vecs = np.linalg.eigh(info) _vals = np.maximum(_vals, 0) i = np.argsort(_vals)[-1::-1] vals = _vals[i] vecs = _vecs[i] n_vals = len(np.where(vals > vals[0]*1e-20)[0]) n_vecs = len(np.where(vals > vals[0]*1e-2)[0]) fig = plt.figure() ax = fig.add_subplot(2,2,1) costs = np.array(costs) x = range(len(costs)) c_min = costs.min() c_max = costs.max() if c_min > 0: y = costs ylabel = r'$\log_{e}(p(y|c_i))$' else: offset = (c_max-c_min)*1e-5 -c_min y = costs + offset ylabel = r'$\log_{e}(p(y|\hat c_i)) + {0:.3e}$'.format(offset) ax.semilogy(x,y) ax.semilogy(x,y, 'kx') ax.set_ylabel(ylabel) ax.set_xlabel(r'$i$') ax.set_xticks(x) v = np.linspace(.2,50,500) ax = fig.add_subplot(2,2,2) ax.loglog(v,nom(v)) ax = fig.add_subplot(2,2,3) ax.semilogy(range(n_vals), vals[:n_vals]) ax = fig.add_subplot(2,2,4) for vec in vecs[:n_vecs]: f = nom.new_c(vec) ax.semilogx(v,f(v)) plt.show() vecs = _vecs[i] # for j,v in enumerate(vals): # print('v[{0:2d}] = {1:.3e}'.format(j,v)) return 0
def work(): ''' This code for debugging stuff will change often ''' import matplotlib.pyplot as plt from eos import Nominal, Spline_eos from fit import Opt vt = data() nom = Spline_eos(Nominal(), precondition=True) stick = Stick(nom) opt = Opt(nom, {'stick': stick}, {'stick': vt}) cs, costs = opt.fit(max_iter=10) D, ep, Sigma_inv = stick.compare(vt, cs[-1]) info = np.dot(D.T, np.dot(Sigma_inv, D)) _vals, _vecs = np.linalg.eigh(info) _vals = np.maximum(_vals, 0) i = np.argsort(_vals)[-1::-1] vals = _vals[i] vecs = _vecs[i] n_vals = len(np.where(vals > vals[0] * 1e-20)[0]) n_vecs = len(np.where(vals > vals[0] * 1e-2)[0]) fig = plt.figure() ax = fig.add_subplot(2, 2, 1) costs = np.array(costs) x = range(len(costs)) c_min = costs.min() c_max = costs.max() if c_min > 0: y = costs ylabel = r'$\log_{e}(p(y|c_i))$' else: offset = (c_max - c_min) * 1e-5 - c_min y = costs + offset ylabel = r'$\log_{e}(p(y|\hat c_i)) + {0:.3e}$'.format(offset) ax.semilogy(x, y) ax.semilogy(x, y, 'kx') ax.set_ylabel(ylabel) ax.set_xlabel(r'$i$') ax.set_xticks(x) v = np.linspace(.2, 50, 500) ax = fig.add_subplot(2, 2, 2) ax.loglog(v, nom(v)) ax = fig.add_subplot(2, 2, 3) ax.semilogy(range(n_vals), vals[:n_vals]) ax = fig.add_subplot(2, 2, 4) for vec in vecs[:n_vecs]: f = nom.new_c(vec) ax.semilogx(v, f(v)) plt.show() vecs = _vecs[i] # for j,v in enumerate(vals): # print('v[{0:2d}] = {1:.3e}'.format(j,v)) return 0
def tx_stick(exp, nom, plt): import stick from fit import Opt fig = plt.figure('tx_stick', figsize=fig_y_size(5.0)) opt = Opt( nom.eos, {'stick':nom.stick}, {'stick':exp.stick_data}) cs,costs = opt.fit(max_iter=10) print('stick costs={0}'.format(costs)) opt_t = stick.data(opt.eos) x = nom.stick.x / 10 #cm ax = fig.add_subplot(1,1,1) ax.plot(x, nom.stick_data*1e6, label='nom') ax.plot(x, exp.stick_data*1e6, 'r+', label='exp') ax.plot(x, opt_t*1e6, label='fit') ax.set_xlabel(r'$x/{\rm cm}$') ax.set_ylabel(r'$t/\mu{\rm sec}$') ax.legend(loc='lower right') fig.subplots_adjust(bottom=0.15) # Make more space for label return fig
def opt_result(exp, nom, plt): from fit import Opt from gun import magic fig = plt.figure('opt_result', figsize=fig_y_size(6)) p2f = magic.newton2dyne*magic.area/1e11 opt = Opt( nom.eos, {'gun':nom.gun,'stick':nom.stick}, {'gun':exp.vt,'stick':exp.stick_data}) eos_0 = opt.eos opt.fit(max_iter=1) eos_1 = opt.eos nom.gun.eos = nom.eos # Restore after optimization ax = fig.add_subplot(1,1,1) ax.plot(exp.x,eos_0(exp.x)*p2f,label=r'$f_0$') ax.plot(exp.x,eos_1(exp.x)*p2f,label=r'$f_1$') ax.legend() ax.set_xlabel(r'$x/{\rm cm}$') ax.set_ylabel(r'$f/({\rm dyn}\cdot 10^{11})$') return fig