def f(x): kappa1 = x[:, 0] kappa2 = x[:, 1] square_diff = x[:, 2] delta_inf = x[:, 3] mu = tf.zeros((1, ), dtype=DTYPE) delta_0 = tf.sqrt(2 * square_diff + tf.square(delta_inf)) Prime = tfi.Prime(mu, delta_0, num_pts=gauss_quad_pts) PrimSq = tfi.PrimSq(mu, delta_0, num_pts=gauss_quad_pts) IntPrimPrim = tfi.IntPrimPrim(mu, delta_0, delta_inf, num_pts=gauss_quad_pts) IntPhiPhi = tfi.IntPhiPhi(mu, delta_0, delta_inf, num_pts=gauss_quad_pts) noise_corr = ((Sw**2 + tf.square(betam)) * (tf.square(kappa1) + tf.square(kappa2)) + (SI**2) * (cA**2 + cB**2) + tf.square(rhom * kappa1 + gammaA) + tf.square(rhom * kappa2 + gammaB)) F = (rhom * rhon * kappa1 + betam * betan * (kappa1 + kappa2) + cA * SI + rhon * gammaA) * Prime G = (rhom * rhon * kappa2 + betam * betan * (kappa1 + kappa2) + cB * SI + rhon * gammaB) * Prime H = tf.square(g) * (PrimSq - IntPrimPrim) + noise_corr * (delta_0 - delta_inf) I = tf.square(g) * IntPhiPhi + noise_corr return tf.stack([F, G, H, I], axis=1)
def f(x): mu = x[:, 0] kappa = x[:, 1] square_diff = x[:, 2] delta_inf = x[:, 3] delta_0 = tf.sqrt(2 * square_diff + tf.square(delta_inf)) Phi = tfi.Phi(mu, delta_0, num_pts=gauss_quad_pts) Prime = tfi.Prime(mu, delta_0, num_pts=gauss_quad_pts) PrimSq = tfi.PrimSq(mu, delta_0, num_pts=gauss_quad_pts) IntPrimPrim = tfi.IntPrimPrim(mu, delta_0, delta_inf, num_pts=gauss_quad_pts) IntPhiPhi = tfi.IntPhiPhi(mu, delta_0, delta_inf, num_pts=gauss_quad_pts) F = Mm * kappa + MI # mu G = Mn * Phi + SnI * Prime H = tf.square(g) * (PrimSq - IntPrimPrim) + ( tf.square(Sm) * tf.square(kappa) + 2 * SmI * kappa + SI_squared) * (delta_0 - delta_inf) I = (tf.square(g) * IntPhiPhi + tf.square(Sm) * tf.square(kappa) + 2 * SmI * kappa + SI_squared) return tf.stack([F, G, H, I], axis=1)
def f(x): kappa1 = x[:, 0] kappa2 = x[:, 1] delta_0 = x[:, 2] mu = tf.zeros((1, ), dtype=DTYPE) Prime = tfi.Prime(mu, delta_0, num_pts=gauss_quad_pts) PhiSq = tfi.PhiSq(mu, delta_0, num_pts=gauss_quad_pts) F = (rhom * rhon * kappa1 + betam * betan * (kappa1 + kappa2) + cA * (SI**2) + rhon * gammaA) * Prime G = (rhom * rhon * kappa2 + betam * betan * (kappa1 + kappa2) + cB * (SI**2) + rhon * gammaB) * Prime H = (g**2) * PhiSq H += ((Sy**2) + tf.square(betam)) * (tf.square(kappa1) + tf.square(kappa2)) H += ((SI**2) * (cA**2 + cB**2) + tf.square(rhom * kappa1 + gammaA) + tf.square(rhom * kappa2 + gammaB)) return tf.stack([F, G, H], axis=1)
def consistent_solve(y, g, eps, T): y_1 = y[:, :, :, 0] y_2 = y[:, :, :, 1] y_3 = y[:, :, :, 2] for i in range(T): Sii = tf.sqrt((Sini / Sin_tf)**2 + Sip**2) mu = Mm_tf * y_3 + Mi new1 = g * g * tf_integrals.PhiSq(mu, y_2) + Sim_tf**2 * y_3**2 new1 = new1 + Sii**2 new2 = Mn_tf * tf_integrals.Phi( mu, y_2) + Sini * tf_integrals.Prime(mu, y_2) y_new_1 = Mm_tf * new2 + Mi y_new_2 = (1 - eps) * y_2 + eps * new1 y_new_3 = (1 - eps) * y_3 + eps * new2 y_1 = y_new_1 y_2 = y_new_2 y_3 = y_new_3 y_out = tf.stack([y_1, y_2, y_3], axis=0) return y_out
def rank2_CDD_chaotic_solve( kappa1_init, kappa2_init, delta_0_init, delta_inf_init, cA, cB, g, rhom, rhon, betam, betan, gammaA, gammaB, num_its, eps, gauss_quad_pts=50, db=False, ): SI = 1.2 Sy = 1.2 SyA = Sy SyB = Sy SIA = SI SIB = SI SIctxA = 1.0 SIctxB = 1.0 Sw = 1.0 Sm1 = SyA + rhom * SIctxA + betam * Sw Sm2 = SyB + rhom * SIctxB + betam * Sw square_diff_init = (tf.square(delta_0_init) - tf.square(delta_inf_init)) / 2.0 # convergence equations used for langevin-like dynamimcs solver def f(x): kappa1 = x[:, 0] kappa2 = x[:, 1] square_diff = x[:, 2] delta_inf = x[:, 3] mu = tf.zeros((1, ), dtype=DTYPE) delta_0 = tf.sqrt(2 * square_diff + tf.square(delta_inf)) Prime = tfi.Prime(mu, delta_0, num_pts=gauss_quad_pts) PrimSq = tfi.PrimSq(mu, delta_0, num_pts=gauss_quad_pts) IntPrimPrim = tfi.IntPrimPrim(mu, delta_0, delta_inf, num_pts=gauss_quad_pts) IntPhiPhi = tfi.IntPhiPhi(mu, delta_0, delta_inf, num_pts=gauss_quad_pts) noise_corr = ((Sw**2 + tf.square(betam)) * (tf.square(kappa1) + tf.square(kappa2)) + (SI**2) * (cA**2 + cB**2) + tf.square(rhom * kappa1 + gammaA) + tf.square(rhom * kappa2 + gammaB)) F = (rhom * rhon * kappa1 + betam * betan * (kappa1 + kappa2) + cA * SI + rhon * gammaA) * Prime G = (rhom * rhon * kappa2 + betam * betan * (kappa1 + kappa2) + cB * SI + rhon * gammaB) * Prime H = tf.square(g) * (PrimSq - IntPrimPrim) + noise_corr * (delta_0 - delta_inf) I = tf.square(g) * IntPhiPhi + noise_corr return tf.stack([F, G, H, I], axis=1) x_init = tf.stack( [kappa1_init, kappa2_init, square_diff_init, delta_inf_init], axis=1) non_neg = [False, False, True, True] if db: xs_end, xs = bounded_langevin_dyn(f, x_init, eps, num_its, non_neg, db=db) else: xs_end = bounded_langevin_dyn(f, x_init, eps, num_its, non_neg, db=db) kappa1 = xs_end[:, 0] kappa2 = xs_end[:, 1] square_diff = xs_end[:, 2] delta_inf = xs_end[:, 3] mu = tf.zeros((1, ), dtype=DTYPE) delta_0 = tf.sqrt(2 * square_diff + tf.square(delta_inf)) Prime = tfi.Prime(mu, delta_0, num_pts=gauss_quad_pts) z = betam * (kappa1 + kappa2) * Prime if db: return kappa1, kappa2, delta_0, delta_inf, z, xs else: return kappa1, kappa2, delta_0, delta_inf, z
def rank2_CDD_static_solve( kappa1_init, kappa2_init, delta_0_init, cA, cB, g, rhom, rhon, betam, betan, gammaA, gammaB, num_its, eps, gauss_quad_pts=50, db=False, ): # Use equations 159 and 160 from M&O 2018 SI = 1.2 Sy = 1.2 # convergence equations used for langevin-like dynamimcs solver def f(x): kappa1 = x[:, 0] kappa2 = x[:, 1] delta_0 = x[:, 2] mu = tf.zeros((1, ), dtype=DTYPE) Prime = tfi.Prime(mu, delta_0, num_pts=gauss_quad_pts) PhiSq = tfi.PhiSq(mu, delta_0, num_pts=gauss_quad_pts) F = (rhom * rhon * kappa1 + betam * betan * (kappa1 + kappa2) + cA * (SI**2) + rhon * gammaA) * Prime G = (rhom * rhon * kappa2 + betam * betan * (kappa1 + kappa2) + cB * (SI**2) + rhon * gammaB) * Prime H = (g**2) * PhiSq H += ((Sy**2) + tf.square(betam)) * (tf.square(kappa1) + tf.square(kappa2)) H += ((SI**2) * (cA**2 + cB**2) + tf.square(rhom * kappa1 + gammaA) + tf.square(rhom * kappa2 + gammaB)) return tf.stack([F, G, H], axis=1) x_init = tf.stack([kappa1_init, kappa2_init, delta_0_init], axis=1) non_neg = [False, False, True] if db: xs_end, xs = bounded_langevin_dyn(f, x_init, eps, num_its, non_neg, db=db) else: xs_end = bounded_langevin_dyn(f, x_init, eps, num_its, non_neg, db=db) kappa1 = xs_end[:, 0] kappa2 = xs_end[:, 1] delta_0 = xs_end[:, 2] mu = tf.zeros((1, ), dtype=DTYPE) Prime = tfi.Prime(mu, delta_0, num_pts=gauss_quad_pts) z = betam * (kappa1 + kappa2) * Prime if db: return kappa1, kappa2, delta_0, z, xs else: return kappa1, kappa2, delta_0, z