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)
Exemple #4
0
        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