utau = Retau*eqn.nu*2.0
ydns = dns[:,0]*0.5
udns = dns[:,2]*utau
f = interp1d(ydns, udns)
utarget = f(eqn.y)



beta_prior = eqn.beta.copy()
sigma_obs = 1e-10
sigma_prior = 1.0

eqn.objective = BayesianObjectiveU(utarget, beta_prior, sigma_obs, sigma_prior)
inverse_solver = InverseSolver(eqn)
inverse_solver.maxiter = 10
inverse_solver.stepsize = 0.1
inverse_solver.algo = "gn"
eqn = inverse_solver.solve()

plt.figure(11)
plt.semilogx(eqn.yp, up_prior, 'g-', label=r'Prior')
plt.semilogx(eqn.yp, eqn.up, 'r-', label=r'Posterior')
plt.semilogx(eqn.yp[::5], utarget[::5]/utau, 'b.', label=r'DNS')
plt.xlabel(r"$y^+$")
plt.ylabel(r"$u^+$")
plt.legend(loc=2)
plt.tight_layout()
plt.savefig("figs/inverse_matchu_u.pdf")

plt.figure(4)
beta11, beta12, beta22, beta33 = get_beta(eqn.beta)
        eqn.beta[:] = 1.0

    beta_prior = np.ones_like(eqn.beta)
    sigma_obs = 1e-10
    sigma_prior = 1.0

    if objective[0] == "ALL":
        eqn.objective = BayesianObjectiveAll(qtarget, beta_prior, sigma_obs, sigma_prior)
    elif objective[0] == "U":
        eqn.objective = BayesianObjectiveU(qtarget, beta_prior, sigma_obs, sigma_prior)
    else:
        raise ValueError("Objective function not defined!")

    inverse_solver = InverseSolver(eqn)
    inverse_solver.maxiter = maxiter
    inverse_solver.stepsize = maxstep
    inverse_solver.algo = "sd"
    eqn = inverse_solver.solve()

    plt.ioff()
    plt.figure(11)
    plt.semilogx(eqn.yp, up_prior, "g-", label=r"Prior")
    plt.semilogx(eqn.yp, eqn.up, "r-", label=r"Posterior")
    plt.semilogx(dns.yp[::5], dns.u[::5], "b.", label=r"DNS")
    plt.xlabel(r"$y^+$")
    plt.ylabel(r"$u^+$")
    plt.legend(loc=2)
    plt.tight_layout()
    plt.savefig("figs/inverse_%s_u.pdf" % objective)

    plt.figure(4)