nDot.io physics
07-ilang-weight / 05-inertia-of-mark
05inertia of markverified

Determines, for a moving body with its own mark and three couplings, whether its inertia is its cost over the square of one speed for all levels, and whether weight over inertia is level-independent.

Code of version 3

check_fall_full_grip.py8 KB · raw
"""Check of 05-inertia-of-mark (v3): fall of the full grip from rest, (5.14), for the chart mean position, N_f = 1.

Joint description: body place x, branch, one field object y on a ring of L places; full-grip contract on
level k plus a held source g_s P_{x_s}. The start is the dressed band state with real envelope phi_j:
Psi = U sum_j phi_j |j,sigma> Omega_sigma(j), U the direct rotation (Schrieffer-Wolff) of the held band
onto the spectral band of the full contract. The observable is the chart position X = diag(0, ..., L-1) of
the body: the labels close across the cut bond (L-1, 0), opposite the start (centre L/2 - 1).
a(0) = d^2 <X>/dlambda^2 at 0 is computed from the double commutator -<[C,[C,X]]> and from the joint
evolution (second difference of <X>(lambda)); it is compared with -E''(0) sum_j phi_{j+1} phi_{j-1} W'(j),
E'' the exact curvature of the sector contract at g_s = 0, W(j) = g_s <Omega(j)|P_{x_s}|Omega(j)> the held
weight. The split a = <i[C, v]> + eps_cut, v the oriented-bond velocity (translation invariant) and
eps_cut = -L <i[C, v_cut]>, is checked, with the bound |eps_cut| <= L tau (tau + N_f|g|) p_c, p_c the weight
of the start on the body places L-2, L-1, 0, 1.
Output: output/check_fall_full_grip.txt
"""
from pathlib import Path
import numpy as np

OUT = Path(__file__).parent / "output"
OUT.mkdir(exist_ok=True)
lines = []


def log(s=""):
    lines.append(s)


tf = 1.0
sx = np.array([[0, 1], [1, 0]], complex)
sz = np.diag([1.0, -1.0]).astype(complex)


def P(L, r):
    M = np.zeros((L, L)); M[r % L, r % L] = 1.0
    return M


def c1(L):
    Tp = np.roll(np.eye(L), 1, axis=0)                     # Tp |x> = |x+1>
    return Tp, -tf * (Tp + Tp.T)


def curvature(L, g, tau, sig):
    """Exact curvature at P = 0 of the dressed level of (5.1) (full grip, g_s = 0) and the tau = 0 distance d."""
    Tp, h0 = c1(L)
    C0 = np.kron(np.eye(2), h0) + g * np.kron(sz, P(L, 0))
    Cp = 0.5 * tau * np.kron(-1j * sx, Tp.T)
    w0 = np.linalg.eigvalsh(C0)
    e, V = np.linalg.eigh(h0 + sig * g * P(L, 0)); phi = V[:, 0] * np.sign(V[0, 0])
    j = np.argmin(abs(w0 - e[0])); d = np.min(abs(np.delete(w0, j) - e[0]))
    C = C0 + Cp + Cp.conj().T
    d1 = -1j * Cp + 1j * Cp.conj().T
    d2 = -(Cp + Cp.conj().T)
    wc, Vc = np.linalg.eigh(C)
    i = np.argmax(abs(Vc.conj().T @ np.kron(np.eye(2)[:, 0 if sig > 0 else 1], phi))); psi = Vc[:, i]
    a = Vc.conj().T @ (d1 @ psi); m = np.arange(len(wc)) != i
    return np.real(psi.conj() @ d2 @ psi) + 2 * np.sum(abs(a[m]) ** 2 / (wc[i] - wc[m])), d, phi


def fall(L, g, sig, tau_over_d, gs, wid, xs=0):
    j0 = L // 2 - 1
    _, d, phi = curvature(L, g, 1e-5, sig)
    tau = tau_over_d * d
    E2, _, _ = curvature(L, g, tau, sig)
    Tp, h0 = c1(L)
    I2L, IL = np.eye(2 * L), np.eye(L)
    A = 0.5 * tau * np.kron(np.kron(Tp, -1j * sx), IL); A = A + A.conj().T
    C = A + np.kron(I2L, h0 + gs * P(L, xs))
    for x in range(L):
        C = C + g * np.kron(np.kron(P(L, x), sz), P(L, x))
    X = np.kron(np.kron(np.diag(np.arange(L, dtype=float)), np.eye(2)), IL)   # chart position, cut (L-1, 0)
    v = -0.5 * tau * np.kron(np.kron(Tp + Tp.T, sx), IL)                         # oriented-bond velocity
    Ecut = np.zeros((L, L)); Ecut[0, L - 1] = 1.0
    vcut = -0.5 * tau * np.kron(np.kron(Ecut + Ecut.T, sx), IL)
    ident = np.max(abs(1j * (C @ X - X @ C) - (v - L * vcut)))                  # i[C, X] = v - L v_cut
    b = 0 if sig > 0 else 1
    held = []
    for j in range(L):
        e, V = np.linalg.eigh(h0 + sig * g * P(L, j) + gs * P(L, xs))
        held.append(np.kron(np.kron(IL[:, j], np.eye(2)[:, b]), V[:, 0] * np.sign(V[j, 0])))
    Pi = np.array(held).T
    wc, Vc = np.linalg.eigh(C)
    band = np.argsort(np.sum(abs(Vc.conj().T @ Pi) ** 2, axis=1))[-L:]
    Vb, wb = Vc[:, band], wc[band]
    Mo = Pi.conj().T @ Vb
    ev, EV = np.linalg.eigh(Mo @ Mo.conj().T)
    phij = np.exp(-(np.arange(L) - j0) ** 2 / (2 * wid * wid)); phij /= np.linalg.norm(phij)
    cb = Mo.conj().T @ (EV @ np.diag(ev ** -0.5) @ EV.conj().T @ phij)          # band coefficients of Psi
    Psi = Vb @ cb

    def ex(O):
        return np.real(Psi.conj() @ (O @ Psi))
    a_comm = -ex(C @ (C @ X) - 2 * C @ (X @ C) + (X @ C) @ C)
    a_bond = ex(1j * (C @ v - v @ C))
    eps = -L * ex(1j * (C @ vcut - vcut @ C))
    lam = 0.02 / abs(E2)

    def xmean(l):
        ps = Vb @ (np.exp(-1j * wb * l) * cb)
        return np.real(ps.conj() @ (X @ ps))
    a_evol = (xmean(lam) + xmean(-lam) - 2 * xmean(0.0)) / lam ** 2
    body = np.sum(abs(Psi.reshape(L, 2 * L)) ** 2, axis=1)                       # body-place distribution
    pc = body[[L - 2, L - 1, 0, 1]].sum()
    W = np.array([gs * phi[(xs - j) % L] ** 2 for j in range(L)])
    pred = -E2 * sum(phij[(j + 1) % L] * phij[(j - 1) % L] * 0.5 * (W[(j + 1) % L] - W[(j - 1) % L]) for j in range(L))
    bound = L * tau * (tau + abs(g)) * pc
    return dict(d=d, tau=tau, a=a_comm, evol=a_evol, bond=a_bond, eps=eps, pred=pred, pc=pc,
                bound=bound, ident=ident, split=abs(a_comm - a_bond - eps) / abs(pred))


log("(5.14) for the chart mean position: full grip, N_f = 1, t_f = 1, source at x_s = 0, Gaussian envelope")
log("centred at L/2 - 1, chart labels 0..L-1 (cut bond (L-1, 0), opposite the start).")
log("a = -<[C,[C,X]]>; evol = second difference of <X>(lambda), lambda = 0.02/|E''|; pred = -E'' sum phi phi W'.")
log("rel = a/pred - 1; rel_0 = 2 rel(g_s) - rel(2 g_s) (part surviving g_s -> 0), lin = rel(2 g_s) - rel(g_s).")
log("eps = -L<i[C, v_cut]> (boundary term), bound = L tau (tau + |g|) p_c, p_c = weight of the body on L-2..1.")
log("split = |a - <i[C, v]> - eps| / |pred|; ident = max |i[C,X] - (v - L v_cut)|.")
log()
log("1. Start localized away from the cut: width 1.0, L = 16, 20.")
mx = dict(rel=0, evol=0, eps=0, bound=0, split=0, ident=0)
for L in (16, 20):
    for g in (0.1, 0.3):
        for sig in (-1, 1):
            for tod in (0.1, 0.05):
                r1, r2 = [fall(L, g, sig, tod, gs, 1.0) for gs in (1e-3, 2e-3)]
                q1 = r1["a"] / r1["pred"] - 1; q2 = r2["a"] / r2["pred"] - 1
                ev = max(abs(r["evol"] / r["a"] - 1) for r in (r1, r2))
                eb = max(abs(r["eps"] / r["pred"]) for r in (r1, r2))
                bb = max(abs(r["bound"] / r["pred"]) for r in (r1, r2))
                mx["rel"] = max(mx["rel"], abs(q1), abs(q2)); mx["evol"] = max(mx["evol"], ev)
                mx["eps"] = max(mx["eps"], eb); mx["bound"] = max(mx["bound"], bb)
                mx["split"] = max(mx["split"], r1["split"], r2["split"]); mx["ident"] = max(mx["ident"], r1["ident"])
                log("  L=%2d gM=%.1f sig=%+d tau/d=%.2f d=%.4f | g_s=1e-3: a=%+.6e pred=%+.6e rel=%+.2e |"
                    " g_s=2e-3: rel=%+.2e | rel_0=%+.2e lin=%+.2e | |evol/a-1|=%.1e |eps/pred|=%.1e bound/pred=%.1e"
                    % (L, g, sig, tod, r1["d"], r1["a"], r1["pred"], q1, q2, 2 * q1 - q2, q2 - q1, ev, eb, bb))
log("  max |rel| = %.2e, max |evol/a - 1| = %.1e, max |eps/pred| = %.1e, max bound/pred = %.1e,"
    " max split = %.1e, max ident = %.1e" % (mx["rel"], mx["evol"], mx["eps"], mx["bound"], mx["split"], mx["ident"]))
log()
log("2. Boundary term for a start reaching the cut: width 1.5, gM = 0.1, tau/d = 0.1, g_s = 1e-3.")
for L in (12, 16):
    for sig in (-1, 1):
        r = fall(L, 0.1, sig, 0.1, 1e-3, 1.5)
        log("  L=%2d sig=%+d: a/pred-1=%+.2e, <i[C,v]>/pred-1=%+.2e, eps/pred=%+.2e,"
            " bound/|eps|=%.1e, p_c=%.1e, split=%.1e"
            % (L, sig, r["a"] / r["pred"] - 1, r["bond"] / r["pred"] - 1, r["eps"] / r["pred"],
               r["bound"] / abs(r["eps"]), r["pc"], r["split"]))

(OUT / "check_fall_full_grip.txt").write_text("\n".join(lines) + "\n", encoding="utf-8")
print("\n".join(lines))
check_full_grip.py7 KB · raw
"""Check of 05-inertia-of-mark (v1): full grip, N_f = 1, exact sector contract (6.1).

Compares the curvature of the exact dressed level at P = 0 with (5.2) and (5.6),
and the ratios of items 2 and 3 ((5.7), (5.10)) with the same exact data.
Output: output/check_full_grip.txt
"""
from pathlib import Path
import numpy as np

OUT = Path(__file__).parent / "output"
OUT.mkdir(exist_ok=True)
lines = []


def log(s=""):
    lines.append(s)


t_f, g_s = 1.0, 1.0
m, Nclk, lam0 = 1.0, 2, 2.5 * np.pi              # M_k = m + 2 pi k/(N lam0): 1.0, 1.4
Ms = [m + 2 * np.pi * k / (Nclk * lam0) for k in range(Nclk)]
sx = np.array([[0, 1], [1, 0]], complex)
sz = np.diag([1.0, -1.0]).astype(complex)


def ring(L):
    Tp = np.roll(np.eye(L), 1, axis=0)            # T_+ |r> = |r+1>
    c1 = -t_f * (Tp + Tp.T)
    P0 = np.zeros((L, L)); P0[0, 0] = 1.0
    return Tp, Tp.T, c1, P0


def ground(L, g):
    _, _, c1, P0 = ring(L)
    w, V = np.linalg.eigh(c1 + g * P0)
    phi = V[:, 0] * np.sign(V[0, 0] if abs(V[0, 0]) > 1e-12 else V[1, 0])
    return w[0], phi


def sector(L, g, tau):
    """C(P) = C0 + e^{-iP} Cp + e^{iP} Cp^dag, full grip, N_f = 1, (5.1)."""
    _, Tm, c1, P0 = ring(L)
    C0 = np.kron(np.eye(2), c1) + g * np.kron(sz, P0)
    Cp = 0.5 * tau * np.kron(-1j * sx, Tm)
    return C0, Cp


def exact_curv(L, g, tau, sig):
    C0, Cp = sector(L, g, tau)
    C = C0 + Cp + Cp.conj().T
    d1 = -1j * Cp + 1j * Cp.conj().T             # dC/dP at P = 0
    d2 = -(Cp + Cp.conj().T)                       # d2C/dP2 at P = 0
    w, V = np.linalg.eigh(C)
    _, phi = ground(L, sig * g)
    ref = np.kron(np.eye(2)[:, 0 if sig > 0 else 1], phi)
    i = np.argmax(abs(V.conj().T @ ref))
    psi = V[:, i]
    a = V.conj().T @ (d1 @ psi)
    mask = np.arange(len(w)) != i
    E2 = np.real(psi.conj() @ d2 @ psi) + 2 * np.sum(abs(a[mask]) ** 2 / (w[i] - w[mask]))
    w0 = np.linalg.eigvalsh(C0)
    e0s = ground(L, sig * g)[0]
    j = np.argmin(abs(w0 - e0s))
    dist = np.min(abs(np.delete(w0, j) - e0s))     # isolation distance d_sigma
    return E2, dist


def J_tau2(L, g, sig):
    """(5.2): J = <phi_s| T_- (E0_s - h_{-s})^{-1} T_- |phi_s>, E'' = 2 tau^2 J."""
    Tp, Tm, c1, P0 = ring(L)
    e0, phi = ground(L, sig * g)
    return (Tp @ phi) @ np.linalg.solve(e0 * np.eye(L) - (c1 - sig * g * P0), Tm @ phi)


def sums(L):
    q = 2 * np.pi * np.arange(1, L) / L
    eps = 2 * t_f * (1 - np.cos(q))
    s1 = np.sum(1 / eps) / L
    s2 = np.sum(1 / eps ** 2) / L
    S2 = np.sum((1 + np.cos(q)) / eps ** 2) / L
    Lam = 2 * np.eye(L) - ring(L)[0] - ring(L)[1]
    ell = np.linalg.pinv(Lam)
    return s1, s2, S2, ell[:, 0], (ell @ ell)[:, 0]


# ---- 0. sector contract (6.1)/(5.1) against the full contract, L = 6
L, g, tau = 6, 0.3, 0.2
Tp, Tm, c1, P0 = ring(L)
A = 0.5 * tau * (np.kron(np.kron(Tp, -1j * sx), np.eye(L)))
A = A + A.conj().T
Cf = A + np.kron(np.eye(2 * L), c1)
for x in range(L):
    Px = np.zeros((L, L)); Px[x, x] = 1
    Cf = Cf + g * np.kron(np.kron(np.diag(np.eye(L)[x]), sz), Px)
full = np.sort(np.linalg.eigvalsh(Cf))
sec = []
for jP in range(L):
    C0, Cp = sector(L, g, tau)
    P = 2 * np.pi * jP / L
    sec += list(np.linalg.eigvalsh(C0 + np.exp(-1j * P) * Cp + np.exp(1j * P) * Cp.conj().T))
log("0. Sector contract vs full contract (L=6, gamma*M=0.3, tau=0.2): max |eig diff| = %.2e"
    % np.max(abs(full - np.sort(sec))))
log()

# ---- 1-3. curvature, inertia vs cost, weight over inertia
r, rp = 2, 3                                      # r = x_s - x, r' = x_s - x'
for L in (8, 13):
    n = 1.0 / L
    s1, s2, S2, ell, ell2 = sums(L)
    ell0 = ell[0]
    K = 2 * n * S2 + s1 ** 2 - s2 / L
    br = lambda f: f[r] - f[rp]
    F = -2 * g_s * br(ell) / t_f
    F2 = g_s / (n * t_f ** 2) * br(ell ** 2 - 2 * ell2 / L)
    Xi = -br(ell ** 2 + 2 * ell0 * ell - 2 * ell2 / L) / (2 * t_f * br(ell))
    eps1 = 2 * t_f * (1 - np.cos(2 * np.pi / L))
    log("L = %d, N_f = 1, n = 1/L, t_f = 1, eps_1 = %.4f, ell_0 = %.5f, K_L = %.4f, Xi = %.4f"
        % (L, eps1, ell0, K, Xi))
    for gam in (0.01, 0.02, 0.3):
        log("  gamma = %.3f   (N_f*kappa_k = gamma*M_k*L/t_f = %s)"
            % (gam, ", ".join("%.3f" % (gam * M * L / t_f) for M in Ms)))
        log("    k sig   d_sig     tau/d   |E''/(2tau^2 J)-1|  E''/(5.6)-1   "
            "tau^2 mu-Cost  pred(5.7)  -C_even   E''dW/(tau^2F)-1  pred g_sig*Xi")
        res = {}
        for k, M in enumerate(Ms):
            g = gam * M
            e00 = ground(L, 0.0)[0]
            cost = {s: ground(L, s * g)[0] - e00 for s in (1, -1)}
            ceven = 0.5 * (cost[1] + cost[-1])
            for sig in (1, -1):
                tau = 1e-5
                E2, d = exact_curv(L, g, tau, sig)
                E2b, _ = exact_curv(L, g, 0.2 * d, sig)
                J = J_tau2(L, g, sig)
                pred6 = tau ** 2 / (n * sig * g) * (1 - g ** 2 * K)
                D = tau ** 2 / E2 - cost[sig]
                phi = ground(L, sig * g)[1]
                dW = g_s * (phi[r] ** 2 - phi[rp] ** 2)
                rat3 = E2 * dW / (tau ** 2 * F) - 1
                res[(k, sig)] = (D, E2 * dW / tau ** 2, cost[sig], tau ** 2 / E2, dW)
                log("    %d %+d  %.3e  %.1e   %.1e (tau=d/5: %.1e)  %+.2e   %+.4e %+.4e %+.4e   %+.4e  %+.4e"
                    % (k, sig, d, tau / d, abs(E2 / (2 * tau ** 2 * J) - 1),
                       abs(E2b / (2 * (0.2 * d) ** 2 * J) - 1), E2 / pred6 - 1,
                       D, n * ell0 * g ** 2 / t_f, -ceven, rat3, sig * g * Xi))
        # level-difference and branch-difference forms (item 2), weight over inertia spread (item 3)
        lv = res[(1, 1)][0] - res[(0, 1)][0]
        lvp = n * ell0 * gam ** 2 * (Ms[1] ** 2 - Ms[0] ** 2) / t_f
        brd = [(res[(k, 1)][3] - res[(k, -1)][3]) - (res[(k, 1)][2] - res[(k, -1)][2]) for k in range(Nclk)]
        spread = [res[key][1] for key in res]
        cw = [abs(res[(k, s)][4] - (F * res[(k, s)][2] + F2 * res[(k, s)][2] ** 2)) for k in range(Nclk) for s in (1, -1)]
        log("    item 2: level difference of tau^2 mu - Cost (k=1 minus k=0, sig=+): %+.4e, pred %+.4e"
            % (lv, lvp))
        log("    item 2: branch differences tau^2(mu_+ - mu_-) - (Cost_+ - Cost_-), k=0,1: %+.2e, %+.2e"
            "  (vs Cost_+ - Cost_- = %.3e, %.3e)"
            % (brd[0], brd[1], res[(0, 1)][2] - res[(0, -1)][2], res[(1, 1)][2] - res[(1, -1)][2]))
        log("    item 3: E''dW/tau^2 over (k,sig): min %+.5e max %+.5e, leading F = %+.5e;"
            " max |dW - (F C + F2 C^2)| = %.1e" % (min(spread), max(spread), F, max(cw)))
        odd = [0.5 * (res[(k, 1)][1] - res[(k, -1)][1]) / F for k in range(Nclk)]
        evn = [0.5 * (res[(k, 1)][1] + res[(k, -1)][1]) / F - 1 for k in range(Nclk)]
        log("    item 3: odd part of E''dW/(tau^2 F) over sig, k=0,1: %+.5e %+.5e; pred gamma*M_k*Xi:"
            " %+.5e %+.5e; even part minus 1: %+.2e %+.2e"
            % (odd[0], odd[1], gam * Ms[0] * Xi, gam * Ms[1] * Xi, evn[0], evn[1]))
    log()

(OUT / "check_full_grip.txt").write_text("\n".join(lines) + "\n", encoding="utf-8")
print("\n".join(lines))
check_inertia_ac.py10 KB · raw
"""Check of 05-inertia-of-mark (v3): couplings (a) and (c), N_f = 1.

1. (5.9): tau^2 D_{k,sigma} = tau^2 mu - tau^2 Cost/v^2 from the exact tau^2 coefficient J of (5.2)
   (exact in gamma) against the order-gamma^2 formula, and the exact curvature at small tau against 2 tau^2 J.
2. (5.12): one-speed criterion at order gamma^2. For (c), the branch average and its positive coefficient.
   For (a), the double points of the chord curve x -> (s(x), i(x)) for 5 <= L <= 16 (numerical root search in
   symmetric functions; its completeness is not established) and parameters shared by two of them; an exact check at one double point (residual of the line through the four points of
   two levels scales as gamma^3 there, as gamma^2 at a generic pair).
Output: output/check_inertia_ac.txt
"""
from pathlib import Path
import numpy as np

OUT = Path(__file__).parent / "output"
OUT.mkdir(exist_ok=True)
lines = []
def log(s=""):
    lines.append(s)
sx = np.array([[0, 1], [1, 0]], complex)
sz = np.diag([1.0, -1.0]).astype(complex)


def ring(L, tf):
    Tp = np.roll(np.eye(L), 1, axis=0)
    return Tp, Tp.T, -tf * (Tp + Tp.T)


def proj(L, r):
    P = np.zeros((L, L)); P[r % L, r % L] = 1.0
    return P


def ground(L, tf, g):
    _, _, c1 = ring(L, tf)
    w, V = np.linalg.eigh(c1 + g * proj(L, 0))
    return w[0], V[:, 0] * np.sign(V[0, 0])


def Kop(L, gam, coup):
    _, Tm, _ = ring(L, 1.0)
    return Tm if coup == "a" else Tm @ (np.eye(L) + 0.5 * gam * (proj(L, 0) + proj(L, 1)))


def J52(L, tf, M, gam, sig, coup):
    """(5.2): J = <Omega_s| K (E0_s - C0_{-s})^{-1} K |Omega_s>, theta = 1."""
    _, _, c1 = ring(L, tf)
    e, phi = ground(L, tf, sig * gam * M)
    E0 = sig * M + e
    Cm = -sig * M * np.eye(L) + c1 - sig * gam * M * proj(L, 0)
    K = Kop(L, gam, coup)
    return phi @ K @ np.linalg.solve(E0 * np.eye(L) - Cm, K @ phi)


def exact_curv(L, tf, M, gam, tau, sig, coup):
    _, _, c1 = ring(L, tf)
    C0 = M * np.kron(sz, np.eye(L)) + np.kron(np.eye(2), c1) + gam * M * np.kron(sz, proj(L, 0))
    Cp = 0.5 * tau * np.kron(-1j * sx, Kop(L, gam, coup))
    C = C0 + Cp + Cp.conj().T
    d1 = -1j * Cp + 1j * Cp.conj().T
    d2 = -(Cp + Cp.conj().T)
    w, V = np.linalg.eigh(C)
    ref = np.kron(np.eye(2)[:, 0 if sig > 0 else 1], ground(L, tf, sig * gam * M)[1])
    i = np.argmax(abs(V.conj().T @ ref)); psi = V[:, i]
    a = V.conj().T @ (d1 @ psi); m = np.arange(len(w)) != i
    return np.real(psi.conj() @ d2 @ psi) + 2 * np.sum(abs(a[m]) ** 2 / (w[i] - w[m]))


def tau2D_exact(L, tf, M, gam, sig, coup):
    e0 = ground(L, tf, 0.0)[0]
    cost = sig * M + ground(L, tf, sig * gam * M)[0] - e0
    v2 = (1 + gam / L) ** 2 if coup == "c" else 1.0          # v^2 / tau^2, (5.7)
    return 1.0 / (2 * J52(L, tf, M, gam, sig, coup)) - cost / v2


def Fsc(y, L, coup):
    """(5.12): tau^2 D = n gamma^2 t_f F(sigma M_k / t_f) + O(gamma^3)."""
    q = 2 * np.pi * np.arange(1, L) / L; c = np.cos(q)
    if coup == "a":
        br = (1 + (1 + c) * y * (y - 1) / (y - 1 + c)) / (1 - c)
    else:
        br = (1 + c + c * c + y * (1 + c)) / (1 - c)
    return 0.5 * y * y * np.sum(br) / L


# ---- 1. (5.9) against the exact tau^2 coefficient, and 2 tau^2 J against the exact curvature
log("1. (5.9): tau^2 D from the exact tau^2 coefficient J of (5.2) vs the order-gamma^2 formula; t_f = 1, N_f = 1")
log("   coup L  M_k  gamma sig   tau^2 D exact    (5.9)          (exact-(5.9))/gamma^3   |E''(tau=1e-4)/(2tau^2 J)-1|")
tf = 1.0
for coup in ("a", "c"):
    for L in (7, 13):
        for M in (1.0, 1.4):
            for gam in (0.01, 0.02):
                for sig in (1, -1):
                    ex = tau2D_exact(L, tf, M, gam, sig, coup)
                    pr = (gam ** 2 / L) * tf * Fsc(sig * M / tf, L, coup)
                    tau = 1e-4
                    E2 = exact_curv(L, tf, M, gam, tau, sig, coup)
                    log("   %s   %2d %.1f  %.2f  %+d   %+.6e   %+.6e   %+.4f            %.1e"
                        % (coup, L, M, gam, sig, ex, pr, (ex - pr) / gam ** 3,
                           abs(E2 / (2 * tau ** 2 * J52(L, tf, M, gam, sig, coup)) - 1)))
log()

# ---- 2. (5.12): branch average of (c)
log("2. (c): branch average (F_c(y)+F_c(-y))/2 = alpha_L y^2, alpha_L = <(1+c+c^2)/(1-c)>_q / 2 > 0:")
log("   " + ", ".join("L=%d: %.4f" % (L, 0.5 * np.sum((1 + np.cos(q) + np.cos(q) ** 2) / (1 - np.cos(q))) / L)
                      for L in range(5, 17) for q in [2 * np.pi * np.arange(1, L) / L]))
log()

# ---- 3. (5.12): double points of the chord curve of (a)
log("3. (a): double points (x0 < x1) of x -> (s(x), i(x)), s = [F_a(x)-F_a(-x)]/(2x), i = [F_a(x)+F_a(-x)]/2,")
log("   x = M_k/t_f. With u = x^2, s and i are rational with simple poles at u = P_m = (1 - c_m)^2, and a double")
log("   point solves E_s = beta + sum_m w_m P_m/(2 l_m) = 0, E_i = alpha + sum_m w_m p_m P_m/(2 l_m) = 0 with")
log("   l_m = s2 - P_m s1 + P_m^2 linear in (s1, s2) = (u0 + u1, u0 u1). For each s1 on a grid all roots s2 of")
log("   E_s (a polynomial of degree = number of poles) are found; sign changes of E_i along root branches are")
log("   refined by bisection. Hits on pairs of poles (spurious) are discarded. Two grids are compared.")
log("   These are numerical findings: the completeness of the search (missed branches, tangential roots,")
log("   roots outside the grid) is not established.")


def chord(x, L):
    return np.array([(Fsc(x, L, "a") - Fsc(-x, L, "a")) / (2 * x), 0.5 * (Fsc(x, L, "a") + Fsc(-x, L, "a"))])


def pole_data(L):
    c = np.cos(2 * np.pi * np.arange(1, L) / L)
    al = 0.5 * np.sum((1 - c - c * c) / (1 - c)) / L
    be = 0.5 * np.sum((1 + c) / (1 - c)) / L
    keep = np.abs(c * (1 + c)) > 1e-12
    cu, cnt = np.unique(np.round(c[keep], 12), return_counts=True)
    return al, be, 1 - cu, cnt * cu * (1 + cu) / L     # F_a(y) = al y^2 + be y^3 - (y^2/2) sum w/(y - p)


def double_points(L, ngrid, s1max):
    al, be, p, w = pole_data(L)
    P = p * p; a = w * P; b = w * p * P; Mp = len(P)
    S1 = np.geomspace(1e-5, s1max, ngrid)
    kap = P[None, :] ** 2 - P[None, :] * S1[:, None]

    def mul(poly, k):
        new = np.zeros((poly.shape[0], poly.shape[1] + 1))
        new[:, :-1] += k[:, None] * poly; new[:, 1:] += poly
        return new
    full = np.ones((ngrid, 1))
    for m in range(Mp):
        full = mul(full, kap[:, m])
    poly = be * full
    for m in range(Mp):
        part = np.ones((ngrid, 1))
        for mm in range(Mp):
            if mm != m:
                part = mul(part, kap[:, mm])
        poly[:, :-1] += 0.5 * a[m] * part
    comp = np.zeros((ngrid, Mp, Mp)); comp[:, 1:, :-1] = np.eye(Mp - 1); comp[:, :, -1] = -poly[:, :-1] / poly[:, -1:]
    rts = np.linalg.eigvals(comp)
    r = np.where(abs(rts.imag) < 1e-9 * (1 + abs(rts.real)), rts.real, np.nan)
    r = np.sort(np.where((r > 0) & (S1[:, None] ** 2 - 4 * r > 0), r, np.nan), axis=1)
    with np.errstate(all="ignore"):
        Ei = al + 0.5 * np.sum(b / (r[:, :, None] - P * S1[:, None, None] + P ** 2), axis=2)
    d = np.abs(r[:-1, :, None] - r[1:, None, :]); d = np.where(np.isnan(d), np.inf, d)
    k = np.argmin(d, axis=2); dmin = np.take_along_axis(d, k[:, :, None], 2)[:, :, 0]
    flip = (dmin < 0.05 * (1 + np.abs(r[:-1]))) & (np.sign(np.take_along_axis(Ei[1:], k, 1)) != np.sign(Ei[:-1]))

    def g(s1, s2ref):
        kp = P ** 2 - P * s1
        pl = be * np.poly(-kp)
        for m in range(Mp):
            pl = pl + np.r_[0, 0.5 * a[m] * np.poly(-np.delete(kp, m))]
        rr = np.roots(pl); rr = rr[abs(rr.imag) < 1e-7 * (1 + abs(rr.real))].real
        s2 = rr[np.argmin(abs(rr - s2ref))]
        return al + 0.5 * np.sum(b / (s2 - P * s1 + P * P)), s2
    sols = []
    for i, j in np.argwhere(flip):
        lo, hi, s2lo = S1[i], S1[i + 1], r[i, j]
        glo, _ = g(lo, s2lo)
        for _ in range(80):
            mid = 0.5 * (lo + hi); gm, s2m = g(mid, s2lo)
            if np.sign(gm) == np.sign(glo):
                lo, glo, s2lo = mid, gm, s2m
            else:
                hi = mid
        s1 = 0.5 * (lo + hi); _, s2 = g(s1, s2lo); disc = s1 * s1 - 4 * s2
        if disc <= 0 or s2 <= 0:
            continue
        x0, x1 = np.sqrt((s1 - np.sqrt(disc)) / 2), np.sqrt((s1 + np.sqrt(disc)) / 2)
        if min(abs(np.r_[x0 - p, x1 - p])) < 1e-7 or x1 - x0 < 1e-6:
            continue                                     # spurious: both parameters on poles
        rel = np.max(abs(chord(x0, L) - chord(x1, L))) / max(1.0, np.max(abs(chord(x0, L))))
        if rel < 1e-6 and all(abs(x0 - s[0]) + abs(x1 - s[1]) > 1e-6 for s in sols):
            sols.append((x0, x1))
    return sorted(sols), p


all_dp = {}
for L in range(5, 17):
    sa, _ = double_points(L, 200000, 100.0)
    sols, poles = double_points(L, 600000, 1000.0)
    all_dp[L] = sols
    straddle = all(np.any((poles > s[0]) & (poles < s[1])) for s in sols)
    xs = [x for s in sols for x in s]
    shared = sum(1 for i in range(len(xs)) for j in range(i + 1, len(xs)) if abs(xs[i] - xs[j]) < 1e-6)
    log("   L=%2d: %2d double points (coarser grid: %2d); each has a resonance 1-cos q between x0 and x1: %s;"
        " parameters shared by two double points (needed for N >= 3): %d" % (L, len(sols), len(sa), straddle, shared))
    log("         " + "; ".join("(%.5f, %.5f)" % s for s in sols))
log()

# ---- 4. exact check at a double point of L = 7 against a generic pair
log("4. (a), L = 7, N_f = 1, t_f = 1: residual of the least-squares line through the four points")
log("   (sigma M_k, tau^2 D_{k,sigma}) (exact tau^2 coefficient), divided by gamma^2:")
L = 7
for label, (x0, x1) in (("double point", all_dp[7][0]), ("generic pair", (1.0, 1.4))):
    out = []
    for gam in (0.002, 0.004, 0.008):
        ys, ds = [], []
        for M in (x0, x1):
            for sig in (1, -1):
                ys.append(sig * M); ds.append(tau2D_exact(L, 1.0, M, gam, sig, "a"))
        A = np.vstack([np.ones(4), ys]).T
        res = ds - A @ np.linalg.lstsq(A, ds, rcond=None)[0]
        out.append("gamma=%.3f: %.3e" % (gam, np.max(abs(res)) / gam ** 2))
    log("   %s (M_0, M_1) = (%.6f, %.6f): " % (label, x0, x1) + ", ".join(out))

(OUT / "check_inertia_ac.txt").write_text("\n".join(lines) + "\n", encoding="utf-8")
print("\n".join(lines))
check_small_hopping.py3 KB · raw
"""Check of 05-inertia-of-mark (v2): full grip, N_f = 1, small field hopping (I1).

1. (5.13): at t_f = 0 the curvature of the isolated lower dressed level comes only from body paths that
   wind the ring; exact curvature of the sector contract (6.1)/(5.1) against the leading winding term.
2. Order of limits at fixed tau: the exact curvature against the order-tau^2 term 2 tau^2 J of (5.2)
   (which vanishes as t_f^{2 N_f}) and the winding value, as t_f decreases.
Output: output/check_small_hopping.txt
"""
from pathlib import Path
import numpy as np

OUT = Path(__file__).parent / "output"
OUT.mkdir(exist_ok=True)
lines = []


def log(s=""):
    lines.append(s)


sx = np.array([[0, 1], [1, 0]], complex)
sz = np.diag([1.0, -1.0]).astype(complex)


def sector(L, tf, g, tau):
    Tp = np.roll(np.eye(L), 1, axis=0)
    P0 = np.zeros((L, L)); P0[0, 0] = 1.0
    C0 = np.kron(np.eye(2), -tf * (Tp + Tp.T)) + g * np.kron(sz, P0)
    Cp = 0.5 * tau * np.kron(-1j * sx, Tp.T)
    return C0, Cp, Tp, P0


def lower_level(L, tf, g, tau):
    """Lower branch sigma_l = -1 for g = gamma M_k > 0: curvature at P = 0 and the J of (5.2)."""
    C0, Cp, Tp, P0 = sector(L, tf, g, tau)
    h = -tf * (Tp + Tp.T) - g * P0
    w, V = np.linalg.eigh(h); e0, phi = w[0], V[:, 0] * np.sign(V[0, 0])
    C = C0 + Cp + Cp.conj().T
    d1 = -1j * Cp + 1j * Cp.conj().T
    d2 = -(Cp + Cp.conj().T)
    wc, Vc = np.linalg.eigh(C)
    ref = np.kron(np.eye(2)[:, 1], phi)
    i = np.argmax(abs(Vc.conj().T @ ref)); psi = Vc[:, i]
    a = Vc.conj().T @ (d1 @ psi); m = np.arange(len(wc)) != i
    E2 = np.real(psi.conj() @ d2 @ psi) + 2 * np.sum(abs(a[m]) ** 2 / (wc[i] - wc[m]))
    J = (Tp @ phi) @ np.linalg.solve(e0 * np.eye(L) - (-tf * (Tp + Tp.T) + g * P0), Tp.T @ phi)
    return E2, J


def wind(L, tau, G):
    if L % 2 == 0:
        return 2 * (-1) ** (L // 2) * L ** 2 * tau ** L / (2 ** L * G ** (L - 1))
    return -4 * L ** 2 * tau ** (2 * L) / (2 ** (2 * L) * G ** (2 * L - 1))


G = 1.0                                           # G = N_f |gamma| M_k, N_f = 1
log("1. (5.13) at t_f = 0, N_f = 1, G = |gamma| M_k = 1: exact E''(0) of the lower level vs leading winding term")
log("   L   tau/G   E'' exact        (5.13) leading   ratio    (1 - ratio)/(L tau^2/G^2)")
for L, taus in ((5, (0.1, 0.2)), (6, (0.1, 0.2)), (7, (0.2, 0.3)), (8, (0.1, 0.2))):
    for tau in taus:
        E2, _ = lower_level(L, 0.0, G, tau)
        pr = wind(L, tau, G)
        log("   %d   %.2f   %+.6e   %+.6e   %.5f   %.3f" % (L, tau, E2, pr, E2 / pr, (1 - E2 / pr) / (L * tau ** 2)))
log()

L, tau = 6, 0.2
log("2. Order of limits, L = 6, N_f = 1, G = 1, tau = %.1f (d_{k,sigma_l} -> |g| = 1 as t_f -> 0):" % tau)
log("   t_f      E'' exact       2 tau^2 J (order tau^2)   E''(t_f=0)")
E20, _ = lower_level(L, 0.0, G, tau)
for tf in (0.3, 0.1, 0.05, 0.02, 0.01, 0.005, 0.002, 0.001, 0.0):
    E2, J = lower_level(L, tf, G, tau) if tf > 0 else (E20, 0.0)
    log("   %.3f   %+.4e     %+.4e               %+.4e" % (tf, E2, 2 * tau ** 2 * J, E20))
log("   2 tau^2 J / (tau^2 t_f^2) at t_f = 0.001: %.4f (J = O(t_f^{2 N_f}))"
    % (2 * lower_level(L, 0.001, G, tau)[1] / 0.001 ** 2))

(OUT / "check_small_hopping.txt").write_text("\n".join(lines) + "\n", encoding="utf-8")
print("\n".join(lines))
check_weight_next_order.py5 KB · raw
"""Check of 05-inertia-of-mark (v2): weight over inertia, place pairs with F = 0 or Xi = 0 (I5), N_f = 1.

1. F = 0 exactly for reflection-equivalent pairs (r' = -r mod L); list of pairs with Xi = 0 for 5 <= L <= 16.
2. (5.15) at L = 8, (r, r') = (3, 4) (Xi = 0): E''(0) Delta W / (tau^2 F Lambda) - 1 from the exact tau^2
   coefficient (E'' = 2 tau^2 J of (5.2), exact in gamma) and the exact first-order held weight, against the
   order-gamma^2 prediction, for the full grip, (a) and (c).
Output: output/check_weight_next_order.txt
"""
from pathlib import Path
import numpy as np

OUT = Path(__file__).parent / "output"
OUT.mkdir(exist_ok=True)
lines = []


def log(s=""):
    lines.append(s)


tf, gs = 1.0, 1.0


def ring(L):
    Tp = np.roll(np.eye(L), 1, axis=0)
    return Tp, Tp.T, -tf * (Tp + Tp.T)


def proj(L, r):
    P = np.zeros((L, L)); P[r % L, r % L] = 1.0
    return P


def sums(L):
    Tp, Tm, _ = ring(L)
    ell = np.linalg.pinv(2 * np.eye(L) - Tp - Tm)
    q = 2 * np.pi * np.arange(1, L) / L; eps = 2 * tf * (1 - np.cos(q))
    return (ell[:, 0], (ell @ ell)[:, 0], (ell @ ell @ ell)[:, 0], np.sum(1 / eps) / L, np.sum(1 / eps ** 2) / L,
            np.sum((1 + np.cos(q)) / eps ** 2) / L)


def coeffs(L, r, rp):
    n = 1.0 / L
    l1, l2, l3, s1, s2, S2 = sums(L)
    br = lambda f: f[r] - f[rp]
    F = -2 * gs * br(l1) / tf
    if abs(F) < 1e-13:
        return F, None, None, None
    F2 = gs / (n * tf ** 2) * br(l1 ** 2 - 2 * l2 / L)
    F3 = 2 * gs / (n ** 2 * tf ** 3 * L) * br(l1 * l2 + l2[0] * l1 - l3 / L)
    Xi = n * F2 / F - s1
    Psi0 = s1 ** 2 - s2 / L - 2 * s1 * n * F2 / F + n ** 2 * F3 / F
    KL = 2 * n * S2 + s1 ** 2 - s2 / L
    return F, Xi, Psi0, KL


log("1. F = 0 iff r' = r or r' = L - r (reflection-equivalent); Xi of (5.10) against the closed form")
log("   Xi = -(rho^2 + rho'^2 - 1)/(3 L t_f), rho = r - L/2; pairs 0 <= r < r' < L with F != 0 and Xi = 0;")
log("   at those pairs Psi_0 - K_L of (5.15) (full grip, N_f = 1).")
for L in range(5, 17):
    zeroF = [(r, rp) for r in range(L) for rp in range(r + 1, L) if abs(coeffs(L, r, rp)[0]) < 1e-13]
    refl = all((rp == L - r) for r, rp in zeroF) and len(zeroF) == (L - 1) // 2
    dev = max(abs(coeffs(L, r, rp)[1] + ((r - L / 2) ** 2 + (rp - L / 2) ** 2 - 1) / (3 * L * tf))
              for r in range(L) for rp in range(r + 1, L) if coeffs(L, r, rp)[1] is not None)
    xi0 = [(r, rp) for r in range(L) for rp in range(r + 1, L)
           if coeffs(L, r, rp)[1] is not None and abs(coeffs(L, r, rp)[1]) < 1e-12]
    extra = ""
    if xi0:
        _, _, P0, K0 = coeffs(L, *xi0[0])
        extra = "; Psi_0 - K_L = %.5f/t_f^2" % (P0 - K0)
    log("   L=%2d: F = 0 exactly on the %d reflection-equivalent pairs: %s; max|Xi - closed form| = %.1e;"
        " Xi = 0 on: %s%s" % (L, len(zeroF), refl, dev, xi0, extra))
log()


def ground(L, g):
    _, _, c1 = ring(L)
    w, V = np.linalg.eigh(c1 + g * proj(L, 0))
    return w[0], V[:, 0] * np.sign(V[0, 0])


def J52(L, M, gam, sig, coup):
    Tp, Tm, c1 = ring(L)
    th = 0.0 if coup == "fg" else 1.0
    e, phi = ground(L, sig * gam * M)
    K = Tm if coup != "c" else Tm @ (np.eye(L) + 0.5 * gam * (proj(L, 0) + proj(L, 1)))
    Cm = -th * sig * M * np.eye(L) + c1 - sig * gam * M * proj(L, 0)
    return phi @ K @ np.linalg.solve((th * sig * M + e) * np.eye(L) - Cm, K @ phi), phi


def Dsc(L, M, gam, sig, coup):
    """(5.9): tau^2 D at order gamma^2."""
    q = 2 * np.pi * np.arange(1, L) / L; c = np.cos(q); eps = 2 * tf * (1 - c)
    if coup == "a":
        br = (tf + 2 * M * (1 + c) * (M - sig * tf) / (2 * sig * M - eps)) / (1 - c)
    else:
        br = (tf * (1 + c + c * c) + sig * M * (1 + c)) / (1 - c)
    return gam ** 2 * M ** 2 / (2 * tf ** 2) * np.sum(br) / L / L


L, r, rp = 8, 3, 4
n = 1.0 / L
F, Xi, Psi0, KL = coeffs(L, r, rp)
s1 = sums(L)[3]
log("2. (5.15) at L = 8, (r, r') = (3, 4): F = %.6f, Xi = %.1e, Psi_0 = %.6f, K_L = %.6f, Psi_0 - K_L = %.6f"
    % (F, Xi, Psi0, KL, Psi0 - KL))
log("   coup  M_k  gamma  sig   exact ratio-1     prediction      (exact-pred)/gamma^3   branch-odd part: exact, pred")
for coup, Ms in (("fg", (1.0, 1.4)), ("a", (1.2, 1.6)), ("c", (1.2, 1.6))):
    for M in Ms:
        for gam in (0.01, 0.02):
            g = gam * M
            vals = {}
            for sig in (1, -1):
                J, phi = J52(L, M, gam, sig, coup)
                dW = gs * (phi[r] ** 2 - phi[rp] ** 2)
                Lam = 1.0 if coup == "fg" else (n * gam / (1 + gam * n) if coup == "a" else n * gam * (1 + gam * n))
                ex = 2 * J * dW / (F * Lam) - 1
                if coup == "fg":
                    pr = (Psi0 - KL) * g * g
                else:
                    pr = Psi0 * g * g - sig * (Dsc(L, M, gam, sig, coup) - n * s1 * g * g) / M
                vals[sig] = (ex, pr)
            odd_ex = 0.5 * (vals[1][0] - vals[-1][0]); odd_pr = 0.5 * (vals[1][1] - vals[-1][1])
            for sig in (1, -1):
                ex, pr = vals[sig]
                log("   %-3s  %.1f  %.2f   %+d   %+.6e   %+.6e   %+.4f              %+.4e %+.4e"
                    % (coup, M, gam, sig, ex, pr, (ex - pr) / gam ** 3, odd_ex, odd_pr))
log("   (c): predicted branch-odd part -sigma gamma^2 M_k n (L-2)(L-4)/(6 L t_f) at gamma = 0.02, M = 1.2: %+.4e"
    % (-(0.02 ** 2) * 1.2 * n * (L - 2) * (L - 4) / (6 * L * tf)))

(OUT / "check_weight_next_order.txt").write_text("\n".join(lines) + "\n", encoding="utf-8")
print("\n".join(lines))
output/check_fall_full_grip.txt5 KB · raw
(5.14) for the chart mean position: full grip, N_f = 1, t_f = 1, source at x_s = 0, Gaussian envelope
centred at L/2 - 1, chart labels 0..L-1 (cut bond (L-1, 0), opposite the start).
a = -<[C,[C,X]]>; evol = second difference of <X>(lambda), lambda = 0.02/|E''|; pred = -E'' sum phi phi W'.
rel = a/pred - 1; rel_0 = 2 rel(g_s) - rel(2 g_s) (part surviving g_s -> 0), lin = rel(2 g_s) - rel(g_s).
eps = -L<i[C, v_cut]> (boundary term), bound = L tau (tau + |g|) p_c, p_c = weight of the body on L-2..1.
split = |a - <i[C, v]> - eps| / |pred|; ident = max |i[C,X] - (v - L v_cut)|.

1. Start localized away from the cut: width 1.0, L = 16, 20.
  L=16 gM=0.1 sig=-1 tau/d=0.10 d=0.0127 | g_s=1e-3: a=-7.212296e-11 pred=-7.172661e-11 rel=+5.53e-03 | g_s=2e-3: rel=+4.03e-03 | rel_0=+7.02e-03 lin=-1.49e-03 | |evol/a-1|=1.7e-05 |eps/pred|=3.0e-09 bound/pred=1.7e-04
  L=16 gM=0.1 sig=-1 tau/d=0.05 d=0.0127 | g_s=1e-3: a=-1.793667e-11 pred=-1.793166e-11 rel=+2.79e-04 | g_s=2e-3: rel=-1.16e-03 | rel_0=+1.71e-03 lin=-1.44e-03 | |evol/a-1|=6.5e-05 |eps/pred|=1.3e-11 bound/pred=5.5e-06
  L=16 gM=0.1 sig=+1 tau/d=0.10 d=0.0127 | g_s=1e-3: a=-7.048149e-11 pred=-7.009116e-11 rel=+5.57e-03 | g_s=2e-3: rel=+4.43e-03 | rel_0=+6.71e-03 lin=-1.14e-03 | |evol/a-1|=1.7e-05 |eps/pred|=3.1e-09 bound/pred=1.8e-04
  L=16 gM=0.1 sig=+1 tau/d=0.05 d=0.0127 | g_s=1e-3: a=-1.753258e-11 pred=-1.752280e-11 rel=+5.58e-04 | g_s=2e-3: rel=-5.23e-04 | rel_0=+1.64e-03 lin=-1.08e-03 | |evol/a-1|=6.5e-05 |eps/pred|=1.3e-11 bound/pred=5.6e-06
  L=16 gM=0.3 sig=-1 tau/d=0.10 d=0.0422 | g_s=1e-3: a=-5.655472e-10 pred=-5.636496e-10 rel=+3.37e-03 | g_s=2e-3: rel=+1.56e-03 | rel_0=+5.18e-03 lin=-1.81e-03 | |evol/a-1|=3.0e-07 |eps/pred|=2.2e-09 bound/pred=1.5e-04
  L=16 gM=0.3 sig=-1 tau/d=0.05 d=0.0422 | g_s=1e-3: a=-1.408521e-10 pred=-1.409162e-10 rel=-4.54e-04 | g_s=2e-3: rel=-2.26e-03 | rel_0=+1.35e-03 lin=-1.81e-03 | |evol/a-1|=1.2e-05 |eps/pred|=1.0e-11 bound/pred=5.1e-06
  L=16 gM=0.3 sig=+1 tau/d=0.10 d=0.0422 | g_s=1e-3: a=-5.347502e-10 pred=-5.371538e-10 rel=-4.47e-03 | g_s=2e-3: rel=-5.30e-03 | rel_0=-3.65e-03 lin=-8.21e-04 | |evol/a-1|=5.7e-07 |eps/pred|=2.5e-09 bound/pred=1.5e-04
  L=16 gM=0.3 sig=+1 tau/d=0.05 d=0.0422 | g_s=1e-3: a=-1.340724e-10 pred=-1.342975e-10 rel=-1.68e-03 | g_s=2e-3: rel=-2.49e-03 | rel_0=-8.60e-04 lin=-8.16e-04 | |evol/a-1|=1.2e-05 |eps/pred|=1.2e-11 bound/pred=5.4e-06
  L=20 gM=0.1 sig=-1 tau/d=0.10 d=0.0102 | g_s=1e-3: a=-3.645115e-11 pred=-3.627805e-11 rel=+4.77e-03 | g_s=2e-3: rel=+2.80e-03 | rel_0=+6.74e-03 lin=-1.97e-03 | |evol/a-1|=3.9e-07 |eps/pred|=1.7e-13 bound/pred=1.4e-08
  L=20 gM=0.1 sig=-1 tau/d=0.05 d=0.0102 | g_s=1e-3: a=-9.067682e-12 pred=-9.069517e-12 rel=-2.02e-04 | g_s=2e-3: rel=-2.15e-03 | rel_0=+1.75e-03 lin=-1.95e-03 | |evol/a-1|=1.8e-06 |eps/pred|=3.7e-17 bound/pred=2.3e-11
  L=20 gM=0.1 sig=+1 tau/d=0.10 d=0.0102 | g_s=1e-3: a=-3.586655e-11 pred=-3.569356e-11 rel=+4.85e-03 | g_s=2e-3: rel=+3.50e-03 | rel_0=+6.20e-03 lin=-1.35e-03 | |evol/a-1|=4.4e-07 |eps/pred|=1.7e-13 bound/pred=1.4e-08
  L=20 gM=0.1 sig=+1 tau/d=0.05 d=0.0102 | g_s=1e-3: a=-8.925957e-12 pred=-8.923396e-12 rel=+2.87e-04 | g_s=2e-3: rel=-1.04e-03 | rel_0=+1.61e-03 lin=-1.33e-03 | |evol/a-1|=1.8e-06 |eps/pred|=3.8e-17 bound/pred=2.4e-11
  L=20 gM=0.3 sig=-1 tau/d=0.10 d=0.0359 | g_s=1e-3: a=-2.494571e-10 pred=-2.493118e-10 rel=+5.83e-04 | g_s=2e-3: rel=-1.82e-03 | rel_0=+2.98e-03 lin=-2.40e-03 | |evol/a-1|=5.7e-06 |eps/pred|=6.6e-14 bound/pred=7.1e-09
  L=20 gM=0.3 sig=-1 tau/d=0.05 d=0.0359 | g_s=1e-3: a=-6.222786e-11 pred=-6.233044e-11 rel=-1.65e-03 | g_s=2e-3: rel=-4.03e-03 | rel_0=+7.38e-04 lin=-2.38e-03 | |evol/a-1|=2.0e-05 |eps/pred|=1.7e-17 bound/pred=1.3e-11
  L=20 gM=0.3 sig=+1 tau/d=0.10 d=0.0359 | g_s=1e-3: a=-2.332362e-10 pred=-2.374007e-10 rel=-1.75e-02 | g_s=2e-3: rel=-1.82e-02 | rel_0=-1.68e-02 lin=-6.96e-04 | |evol/a-1|=2.4e-06 |eps/pred|=7.0e-14 bound/pred=7.3e-09
  L=20 gM=0.3 sig=+1 tau/d=0.05 d=0.0359 | g_s=1e-3: a=-5.906779e-11 pred=-5.935964e-11 rel=-4.92e-03 | g_s=2e-3: rel=-5.61e-03 | rel_0=-4.22e-03 lin=-6.95e-04 | |evol/a-1|=2.0e-05 |eps/pred|=1.8e-17 bound/pred=1.4e-11
  max |rel| = 1.82e-02, max |evol/a - 1| = 6.5e-05, max |eps/pred| = 3.1e-09, max bound/pred = 1.8e-04, max split = 6.7e-05, max ident = 6.9e-18

2. Boundary term for a start reaching the cut: width 1.5, gM = 0.1, tau/d = 0.1, g_s = 1e-3.
  L=12 sig=-1: a/pred-1=-8.52e-02, <i[C,v]>/pred-1=-2.63e-03, eps/pred=-8.25e-02, bound/|eps|=2.8e+04, p_c=3.5e-04, split=9.5e-07
  L=12 sig=+1: a/pred-1=-8.98e-02, <i[C,v]>/pred-1=-2.79e-03, eps/pred=-8.70e-02, bound/|eps|=2.8e+04, p_c=3.5e-04, split=9.1e-07
  L=16 sig=-1: a/pred-1=-3.14e-03, <i[C,v]>/pred-1=-3.12e-03, eps/pred=-3.11e-05, bound/|eps|=3.7e+04, p_c=7.0e-08, split=7.4e-06
  L=16 sig=+1: a/pred-1=-3.12e-03, <i[C,v]>/pred-1=-3.09e-03, eps/pred=-3.22e-05, bound/|eps|=3.7e+04, p_c=7.0e-08, split=7.8e-06
output/check_full_grip.txt8 KB · raw
0. Sector contract vs full contract (L=6, gamma*M=0.3, tau=0.2): max |eig diff| = 3.66e-15

L = 8, N_f = 1, n = 1/L, t_f = 1, eps_1 = 0.5858, ell_0 = 0.65625, K_L = 0.6562, Xi = -0.1667
  gamma = 0.010   (N_f*kappa_k = gamma*M_k*L/t_f = 0.080, 0.112)
    k sig   d_sig     tau/d   |E''/(2tau^2 J)-1|  E''/(5.6)-1   tau^2 mu-Cost  pred(5.7)  -C_even   E''dW/(tau^2F)-1  pred g_sig*Xi
    0 +1  2.500e-03  4.0e-03   6.2e-13 (tau=d/5: 4.5e-11)  -9.29e-08   +8.2444e-06 +8.2031e-06 +8.2033e-06   -1.7575e-03  -1.6667e-03
    0 -1  2.500e-03  4.0e-03   6.8e-14 (tau=d/5: 4.6e-11)  +9.46e-08   +8.1623e-06 +8.2031e-06 +8.2033e-06   +1.5753e-03  +1.6667e-03
    1 +1  3.500e-03  2.9e-03   3.6e-13 (tau=d/5: 1.8e-10)  -2.54e-07   +1.6192e-05 +1.6078e-05 +1.6079e-05   -2.5111e-03  -2.3333e-03
    1 -1  3.500e-03  2.9e-03   6.2e-13 (tau=d/5: 1.7e-10)  +2.61e-07   +1.5966e-05 +1.6078e-05 +1.6079e-05   +2.1540e-03  +2.3333e-03
    item 2: level difference of tau^2 mu - Cost (k=1 minus k=0, sig=+): +7.9472e-06, pred +7.8750e-06
    item 2: branch differences tau^2(mu_+ - mu_-) - (Cost_+ - Cost_-), k=0,1: +8.20e-08, +2.25e-07  (vs Cost_+ - Cost_- = 2.500e-03, 3.500e-03)
    item 3: E''dW/tau^2 over (k,sig): min -3.75808e-01 max -3.74058e-01, leading F = -3.75000e-01; max |dW - (F C + F2 C^2)| = 8.0e-09
    item 3: odd part of E''dW/(tau^2 F) over sig, k=0,1: -1.66638e-03 -2.33255e-03; pred gamma*M_k*Xi: -1.66667e-03 -2.33333e-03; even part minus 1: -9.11e-05 -1.79e-04
  gamma = 0.020   (N_f*kappa_k = gamma*M_k*L/t_f = 0.160, 0.224)
    k sig   d_sig     tau/d   |E''/(2tau^2 J)-1|  E''/(5.6)-1   tau^2 mu-Cost  pred(5.7)  -C_even   E''dW/(tau^2F)-1  pred g_sig*Xi
    0 +1  5.001e-03  2.0e-03   6.8e-14 (tau=d/5: 7.4e-10)  -7.36e-07   +3.3145e-05 +3.2812e-05 +3.2815e-05   -3.6953e-03  -3.3333e-03
    0 -1  5.001e-03  2.0e-03   4.3e-13 (tau=d/5: 7.2e-10)  +7.64e-07   +3.2488e-05 +3.2812e-05 +3.2815e-05   +2.9668e-03  +3.3333e-03
    1 +1  7.002e-03  1.4e-03   3.5e-13 (tau=d/5: 2.9e-09)  -2.01e-06   +6.5229e-05 +6.4312e-05 +6.4320e-05   -5.3744e-03  -4.6667e-03
    1 -1  7.002e-03  1.4e-03   4.5e-13 (tau=d/5: 2.8e-09)  +2.11e-06   +6.3426e-05 +6.4312e-05 +6.4320e-05   +3.9464e-03  +4.6667e-03
    item 2: level difference of tau^2 mu - Cost (k=1 minus k=0, sig=+): +3.2084e-05, pred +3.1500e-05
    item 2: branch differences tau^2(mu_+ - mu_-) - (Cost_+ - Cost_-), k=0,1: +6.57e-07, +1.80e-06  (vs Cost_+ - Cost_- = 5.001e-03, 7.002e-03)
    item 3: E''dW/tau^2 over (k,sig): min -3.76480e-01 max -3.72985e-01, leading F = -3.75000e-01; max |dW - (F C + F2 C^2)| = 6.6e-08
    item 3: odd part of E''dW/(tau^2 F) over sig, k=0,1: -3.33105e-03 -4.66041e-03; pred gamma*M_k*Xi: -3.33333e-03 -4.66667e-03; even part minus 1: -3.64e-04 -7.14e-04
  gamma = 0.300   (N_f*kappa_k = gamma*M_k*L/t_f = 2.400, 3.360)
    k sig   d_sig     tau/d   |E''/(2tau^2 J)-1|  E''/(5.6)-1   tau^2 mu-Cost  pred(5.7)  -C_even   E''dW/(tau^2F)-1  pred g_sig*Xi
    0 +1  7.721e-02  1.3e-04   2.0e-11 (tau=d/5: 4.7e-05)  -2.06e-03   +8.8141e-03 +7.3828e-03 +7.4816e-03   -1.2343e-01  -5.0000e-02
    0 -1  7.721e-02  1.3e-04   1.4e-11 (tau=d/5: 3.4e-05)  +3.58e-03   +6.3737e-03 +7.3828e-03 +7.4816e-03   -3.7490e-02  +5.0000e-02
    1 +1  1.110e-01  9.0e-05   4.3e-11 (tau=d/5: 2.1e-04)  -5.47e-03   +1.9021e-02 +1.4470e-02 +1.4838e-02   -2.0696e-01  -7.0000e-02
    1 -1  1.110e-01  9.0e-05   2.6e-11 (tau=d/5: 1.3e-04)  +1.17e-02   +1.1668e-02 +1.4470e-02 +1.4838e-02   -1.0217e-01  +7.0000e-02
    item 2: level difference of tau^2 mu - Cost (k=1 minus k=0, sig=+): +1.0207e-02, pred +7.0875e-03
    item 2: branch differences tau^2(mu_+ - mu_-) - (Cost_+ - Cost_-), k=0,1: +2.44e-03, +7.35e-03  (vs Cost_+ - Cost_- = 7.721e-02, 1.110e-01)
    item 3: E''dW/tau^2 over (k,sig): min -3.60941e-01 max -2.97389e-01, leading F = -3.75000e-01; max |dW - (F C + F2 C^2)| = 6.5e-04
    item 3: odd part of E''dW/(tau^2 F) over sig, k=0,1: -4.29681e-02 -5.23942e-02; pred gamma*M_k*Xi: -5.00000e-02 -7.00000e-02; even part minus 1: -8.05e-02 -1.55e-01

L = 13, N_f = 1, n = 1/L, t_f = 1, eps_1 = 0.2291, ell_0 = 1.07692, K_L = 1.8225, Xi = -0.8077
  gamma = 0.010   (N_f*kappa_k = gamma*M_k*L/t_f = 0.130, 0.182)
    k sig   d_sig     tau/d   |E''/(2tau^2 J)-1|  E''/(5.6)-1   tau^2 mu-Cost  pred(5.7)  -C_even   E''dW/(tau^2F)-1  pred g_sig*Xi
    0 +1  1.539e-03  6.5e-03   2.4e-14 (tau=d/5: 1.4e-10)  -5.04e-07   +8.3549e-06 +8.2840e-06 +8.2844e-06   -8.2471e-03  -8.0769e-03
    0 -1  1.539e-03  6.5e-03   1.9e-13 (tau=d/5: 1.3e-10)  +5.18e-07   +8.2147e-06 +8.2840e-06 +8.2844e-06   +7.9033e-03  +8.0769e-03
    1 +1  2.154e-03  4.6e-03   2.4e-14 (tau=d/5: 5.2e-10)  -1.38e-06   +1.6432e-05 +1.6237e-05 +1.6238e-05   -1.1640e-02  -1.1308e-02
    1 -1  2.154e-03  4.6e-03   6.0e-13 (tau=d/5: 5.1e-10)  +1.43e-06   +1.6047e-05 +1.6237e-05 +1.6238e-05   +1.0966e-02  +1.1308e-02
    item 2: level difference of tau^2 mu - Cost (k=1 minus k=0, sig=+): +8.0773e-06, pred +7.9527e-06
    item 2: branch differences tau^2(mu_+ - mu_-) - (Cost_+ - Cost_-), k=0,1: +1.40e-07, +3.85e-07  (vs Cost_+ - Cost_- = 1.539e-03, 2.154e-03)
    item 3: E''dW/tau^2 over (k,sig): min -6.22133e-01 max -6.08222e-01, leading F = -6.15385e-01; max |dW - (F C + F2 C^2)| = 3.1e-08
    item 3: odd part of E''dW/(tau^2 F) over sig, k=0,1: -8.07519e-03 -1.13029e-02; pred gamma*M_k*Xi: -8.07692e-03 -1.13077e-02; even part minus 1: -1.72e-04 -3.37e-04
  gamma = 0.020   (N_f*kappa_k = gamma*M_k*L/t_f = 0.260, 0.364)
    k sig   d_sig     tau/d   |E''/(2tau^2 J)-1|  E''/(5.6)-1   tau^2 mu-Cost  pred(5.7)  -C_even   E''dW/(tau^2F)-1  pred g_sig*Xi
    0 +1  3.078e-03  3.2e-03   1.4e-12 (tau=d/5: 2.2e-09)  -3.98e-06   +3.3710e-05 +3.3136e-05 +3.3143e-05   -1.6828e-02  -1.6154e-02
    0 -1  3.078e-03  3.2e-03   1.4e-12 (tau=d/5: 2.1e-09)  +4.20e-06   +3.2587e-05 +3.3136e-05 +3.3143e-05   +1.5452e-02  +1.6154e-02
    1 +1  4.311e-03  2.3e-03   1.3e-12 (tau=d/5: 8.5e-09)  -1.08e-05   +6.6538e-05 +6.4947e-05 +6.4971e-05   -2.3925e-02  -2.2615e-02
    1 -1  4.311e-03  2.3e-03   1.4e-12 (tau=d/5: 8.1e-09)  +1.17e-05   +6.3454e-05 +6.4947e-05 +6.4971e-05   +2.1229e-02  +2.2615e-02
    item 2: level difference of tau^2 mu - Cost (k=1 minus k=0, sig=+): +3.2828e-05, pred +3.1811e-05
    item 2: branch differences tau^2(mu_+ - mu_-) - (Cost_+ - Cost_-), k=0,1: +1.12e-06, +3.08e-06  (vs Cost_+ - Cost_- = 3.078e-03, 4.311e-03)
    item 3: E''dW/tau^2 over (k,sig): min -6.28449e-01 max -6.00661e-01, leading F = -6.15385e-01; max |dW - (F C + F2 C^2)| = 2.5e-07
    item 3: odd part of E''dW/(tau^2 F) over sig, k=0,1: -1.61400e-02 -2.25773e-02; pred gamma*M_k*Xi: -1.61538e-02 -2.26154e-02; even part minus 1: -6.88e-04 -1.35e-03
  gamma = 0.300   (N_f*kappa_k = gamma*M_k*L/t_f = 3.900, 5.460)
    k sig   d_sig     tau/d   |E''/(2tau^2 J)-1|  E''/(5.6)-1   tau^2 mu-Cost  pred(5.7)  -C_even   E''dW/(tau^2F)-1  pred g_sig*Xi
    0 +1  4.994e-02  2.0e-04   1.9e-10 (tau=d/5: 1.9e-04)  -1.13e-02   +1.0712e-02 +7.4556e-03 +7.7631e-03   -3.5532e-01  -2.4231e-01
    0 -1  4.994e-02  2.0e-04   9.6e-11 (tau=d/5: 9.4e-05)  +2.48e-02   +5.7983e-03 +7.4556e-03 +7.7631e-03   +4.5096e-02  +2.4231e-01
    1 +1  7.497e-02  1.3e-04   4.8e-10 (tau=d/5: 1.1e-03)  -3.34e-02   +2.7503e-02 +1.4613e-02 +1.5723e-02   -5.3528e-01  -3.3923e-01
    1 -1  7.497e-02  1.3e-04   1.6e-10 (tau=d/5: 3.5e-04)  +9.67e-02   +9.7896e-03 +1.4613e-02 +1.5723e-02   -6.1963e-02  +3.3923e-01
    item 2: level difference of tau^2 mu - Cost (k=1 minus k=0, sig=+): +1.6791e-02, pred +7.1574e-03
    item 2: branch differences tau^2(mu_+ - mu_-) - (Cost_+ - Cost_-), k=0,1: +4.91e-03, +1.77e-02  (vs Cost_+ - Cost_- = 4.994e-02, 7.497e-02)
    item 3: E''dW/tau^2 over (k,sig): min -6.43136e-01 max -2.85982e-01, leading F = -6.15385e-01; max |dW - (F C + F2 C^2)| = 1.6e-03
    item 3: odd part of E''dW/(tau^2 F) over sig, k=0,1: -2.00207e-01 -2.36658e-01; pred gamma*M_k*Xi: -2.42308e-01 -3.39231e-01; even part minus 1: -1.55e-01 -2.99e-01

output/check_inertia_ac.txt8 KB · raw
1. (5.9): tau^2 D from the exact tau^2 coefficient J of (5.2) vs the order-gamma^2 formula; t_f = 1, N_f = 1
   coup L  M_k  gamma sig   tau^2 D exact    (5.9)          (exact-(5.9))/gamma^3   |E''(tau=1e-4)/(2tau^2 J)-1|
   a    7 1.0  0.01  +1   +8.128417e-06   +8.163265e-06   -0.0348            1.4e-13
   a    7 1.0  0.01  -1   -5.947152e-06   -5.863754e-06   -0.0834            6.0e-14
   a    7 1.0  0.02  +1   +3.237540e-05   +3.265306e-05   -0.0347            5.6e-13
   a    7 1.0  0.02  -1   -2.412580e-05   -2.345502e-05   -0.0838            2.2e-13
   a    7 1.4  0.01  +1   +3.292755e-05   +3.323077e-05   -0.3032            5.7e-14
   a    7 1.4  0.01  -1   -2.040893e-05   -2.009285e-05   -0.3161            7.4e-14
   a    7 1.4  0.02  +1   +1.304994e-04   +1.329231e-04   -0.3030            2.0e-13
   a    7 1.4  0.02  -1   -8.291835e-05   -8.037142e-05   -0.3184            3.5e-13
   a   13 1.0  0.01  +1   +8.172460e-06   +8.284024e-06   -0.1116            5.1e-13
   a   13 1.0  0.01  -1   -1.353925e-05   -1.330375e-05   -0.2355            1.0e-13
   a   13 1.0  0.02  +1   +3.224704e-05   +3.313609e-05   -0.1111            2.0e-12
   a   13 1.0  0.02  -1   -5.511596e-05   -5.321500e-05   -0.2376            3.5e-13
   a   13 1.4  0.01  +1   +3.434093e-05   +3.511020e-05   -0.7693            1.6e-13
   a   13 1.4  0.01  -1   -3.777082e-05   -3.688446e-05   -0.8864            1.8e-13
   a   13 1.4  0.02  +1   +1.343356e-04   +1.404408e-04   -0.7632            6.9e-13
   a   13 1.4  0.02  -1   -1.547167e-04   -1.475379e-04   -0.8974            6.6e-13
   c    7 1.0  0.01  +1   +2.328370e-05   +2.346939e-05   -0.1857            7.0e-14
   c    7 1.0  0.01  -1   +3.008556e-06   +3.061224e-06   -0.0527            4.9e-15
   c    7 1.0  0.02  +1   +9.239923e-05   +9.387755e-05   -0.1848            2.7e-13
   c    7 1.0  0.02  -1   +1.182203e-05   +1.224490e-05   -0.0529            5.6e-14
   c    7 1.4  0.01  +1   +5.343175e-05   +5.400000e-05   -0.5683            6.9e-14
   c    7 1.4  0.01  -1   -2.205092e-06   -2.000000e-06   -0.2051            1.3e-14
   c    7 1.4  0.02  +1   +2.114829e-04   +2.160000e-04   -0.5646            3.3e-13
   c    7 1.4  0.02  -1   -9.650402e-06   -8.000000e-06   -0.2063            7.5e-14
   c   13 1.0  0.01  +1   +3.066011e-05   +3.106509e-05   -0.4050            1.5e-13
   c   13 1.0  0.01  -1   +4.960782e-06   +5.029586e-06   -0.0688            2.8e-13
   c   13 1.0  0.02  +1   +1.210468e-04   +1.242604e-04   -0.4017            6.1e-13
   c   13 1.0  0.02  -1   +1.955999e-05   +2.011834e-05   -0.0698            1.3e-12
   c   13 1.4  0.01  +1   +6.977912e-05   +7.109349e-05   -1.3144            2.4e-13
   c   13 1.4  0.01  -1   -7.492979e-07   -3.479290e-07   -0.4014            3.8e-13
   c   13 1.4  0.02  +1   +2.739779e-04   +2.843740e-04   -1.2995            9.8e-13
   c   13 1.4  0.02  -1   -4.652855e-06   -1.391716e-06   -0.4076            1.6e-12

2. (c): branch average (F_c(y)+F_c(-y))/2 = alpha_L y^2, alpha_L = <(1+c+c^2)/(1-c)>_q / 2 > 0:
   L=5: 0.5000, L=6: 0.7083, L=7: 0.9286, L=8: 1.1562, L=9: 1.3889, L=10: 1.6250, L=11: 1.8636, L=12: 2.1042, L=13: 2.3462, L=14: 2.5893, L=15: 2.8333, L=16: 3.0781

3. (a): double points (x0 < x1) of x -> (s(x), i(x)), s = [F_a(x)-F_a(-x)]/(2x), i = [F_a(x)+F_a(-x)]/2,
   x = M_k/t_f. With u = x^2, s and i are rational with simple poles at u = P_m = (1 - c_m)^2, and a double
   point solves E_s = beta + sum_m w_m P_m/(2 l_m) = 0, E_i = alpha + sum_m w_m p_m P_m/(2 l_m) = 0 with
   l_m = s2 - P_m s1 + P_m^2 linear in (s1, s2) = (u0 + u1, u0 u1). For each s1 on a grid all roots s2 of
   E_s (a polynomial of degree = number of poles) are found; sign changes of E_i along root branches are
   refined by bisection. Hits on pairs of poles (spurious) are discarded. Two grids are compared.
   These are numerical findings: the completeness of the search (missed branches, tangential roots,
   roots outside the grid) is not established.
   L= 5:  1 double points (coarser grid:  1); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.62260, 1.26979)
   L= 6:  1 double points (coarser grid:  1); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.48965, 2.36808)
   L= 7:  3 double points (coarser grid:  3); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.35551, 1.35669); (0.36718, 2.01385); (1.22668, 1.90684)
   L= 8:  1 double points (coarser grid:  1); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.28551, 1.81404)
   L= 9:  6 double points (coarser grid:  6); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.20802, 0.77532); (0.22753, 1.57038); (0.22979, 1.96084); (0.82368, 1.51150); (0.82461, 1.94264); (1.50313, 1.94091)
   L=10:  6 double points (coarser grid:  6); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.16471, 0.62024); (0.18516, 1.34758); (0.18781, 1.84410); (0.68657, 1.31746); (0.68841, 1.81603); (1.31108, 1.81192)
   L=11: 10 double points (coarser grid: 10); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.13283, 0.50797); (0.15337, 1.15784); (0.15613, 1.68909); (0.15680, 1.96637); (0.57903, 1.14652); (0.58160, 1.66382); (0.58234, 1.96115); (1.14306, 1.96020); (1.14329, 1.65863); (1.65659, 1.95991)
   L=12:  6 double points (coarser grid:  6); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.10884, 0.42392); (0.13172, 1.52713); (0.13246, 1.88061); (0.49680, 1.50869); (0.49779, 1.87043); (1.50156, 1.86714)
   L=13: 15 double points (coarser grid: 15); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.09043, 0.35929); (0.10982, 0.86941); (0.11254, 1.37337); (0.11330, 1.76604); (0.11354, 1.97382); (0.42520, 0.87584); (0.42864, 1.36161); (0.42980, 1.75483); (0.43019, 1.97194); (0.87865, 1.35773); (0.87892, 1.75138); (0.87901, 1.97139); (1.35562, 1.97120); (1.35581, 1.75015); (1.74948, 1.97113)
   L=14: 15 double points (coarser grid: 15); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.07607, 0.30850); (0.09457, 0.76114); (0.09721, 1.23366); (0.09796, 1.64031); (0.09823, 1.90799); (0.36951, 0.77097); (0.37317, 1.22721); (0.37445, 1.63046); (0.37494, 1.90379); (0.77601, 1.22468); (0.77653, 1.62679); (0.77674, 1.90230); (1.22315, 1.90174); (1.22332, 1.62537); (1.62450, 1.90149)
   L=15: 20 double points (coarser grid: 21); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.06471, 0.26783); (0.08224, 0.67090); (0.08477, 1.10941); (0.08551, 1.51423); (0.08579, 1.81862); (0.08589, 1.97955); (0.32375, 0.68230); (0.32754, 1.10679); (0.32889, 1.50659); (0.32943, 1.81336); (0.32964, 1.97877); (0.68900, 1.10561); (0.68974, 1.50324); (0.69006, 1.81117); (0.69018, 1.97846); (1.10478, 1.97833); (1.10482, 1.81026); (1.10492, 1.50185); (1.50082, 1.97827); (1.50094, 1.80985)
   L=16: 15 double points (coarser grid: 15); each has a resonance 1-cos q between x0 and x1: True; parameters shared by two double points (needed for N >= 3): 0
         (0.05559, 0.23476); (0.07213, 0.59519); (0.07527, 1.39364); (0.07555, 1.71751); (0.07566, 1.92764); (0.28576, 0.60707); (0.29098, 1.38823); (0.29157, 1.71230); (0.29182, 1.92572); (0.61585, 1.38552); (0.61627, 1.70979); (0.61645, 1.92483); (1.38335, 1.92425); (1.38347, 1.70814); (1.70776, 1.92416)

4. (a), L = 7, N_f = 1, t_f = 1: residual of the least-squares line through the four points
   (sigma M_k, tau^2 D_{k,sigma}) (exact tau^2 coefficient), divided by gamma^2:
   double point (M_0, M_1) = (0.355508, 1.356686): gamma=0.002: 1.033e-03, gamma=0.004: 2.080e-03, gamma=0.008: 4.212e-03
   generic pair (M_0, M_1) = (1.000000, 1.400000): gamma=0.002: 1.065e-01, gamma=0.004: 1.062e-01, gamma=0.008: 1.057e-01
output/check_small_hopping.txt1 KB · raw
1. (5.13) at t_f = 0, N_f = 1, G = |gamma| M_k = 1: exact E''(0) of the lower level vs leading winding term
   L   tau/G   E'' exact        (5.13) leading   ratio    (1 - ratio)/(L tau^2/G^2)
   5   0.10   -9.478120e-12   -9.765625e-12   0.97056   0.589
   5   0.20   -8.885691e-09   -1.000000e-08   0.88857   0.557
   6   0.10   -1.102813e-06   -1.125000e-06   0.98028   0.329
   6   0.20   -6.655007e-05   -7.200000e-05   0.92431   0.315
   7   0.20   -1.674216e-12   -1.960000e-12   0.85419   0.521
   7   0.30   -4.040328e-10   -5.721814e-10   0.70613   0.466
   8   0.10   +4.877034e-09   +5.000000e-09   0.97541   0.307
   8   0.20   +1.160004e-06   +1.280000e-06   0.90625   0.293

2. Order of limits, L = 6, N_f = 1, G = 1, tau = 0.2 (d_{k,sigma_l} -> |g| = 1 as t_f -> 0):
   t_f      E'' exact       2 tau^2 J (order tau^2)   E''(t_f=0)
   0.300   -2.7046e-02     -3.0795e-02               -6.6550e-05
   0.100   -2.8229e-03     -3.2514e-03               -6.6550e-05
   0.050   -7.4565e-04     -8.0343e-04               -6.6550e-05
   0.020   -1.7473e-04     -1.2809e-04               -6.6550e-05
   0.010   -9.3578e-05     -3.2006e-05               -6.6550e-05
   0.005   -7.3306e-05     -8.0003e-06               -6.6550e-05
   0.002   -6.7631e-05     -1.2800e-06               -6.6550e-05
   0.001   -6.6820e-05     -3.2000e-07               -6.6550e-05
   0.000   -6.6550e-05     +0.0000e+00               -6.6550e-05
   2 tau^2 J / (tau^2 t_f^2) at t_f = 0.001: -8.0000 (J = O(t_f^{2 N_f}))
output/check_weight_next_order.txt5 KB · raw
1. F = 0 iff r' = r or r' = L - r (reflection-equivalent); Xi of (5.10) against the closed form
   Xi = -(rho^2 + rho'^2 - 1)/(3 L t_f), rho = r - L/2; pairs 0 <= r < r' < L with F != 0 and Xi = 0;
   at those pairs Psi_0 - K_L of (5.15) (full grip, N_f = 1).
   L= 5: F = 0 exactly on the 2 reflection-equivalent pairs: True; max|Xi - closed form| = 1.4e-16; Xi = 0 on: []
   L= 6: F = 0 exactly on the 2 reflection-equivalent pairs: True; max|Xi - closed form| = 2.5e-15; Xi = 0 on: [(2, 3), (3, 4)]; Psi_0 - K_L = -0.55903/t_f^2
   L= 7: F = 0 exactly on the 3 reflection-equivalent pairs: True; max|Xi - closed form| = 3.3e-16; Xi = 0 on: []
   L= 8: F = 0 exactly on the 3 reflection-equivalent pairs: True; max|Xi - closed form| = 8.9e-16; Xi = 0 on: [(3, 4), (4, 5)]; Psi_0 - K_L = -1.02539/t_f^2
   L= 9: F = 0 exactly on the 4 reflection-equivalent pairs: True; max|Xi - closed form| = 8.9e-16; Xi = 0 on: []
   L=10: F = 0 exactly on the 4 reflection-equivalent pairs: True; max|Xi - closed form| = 2.0e-15; Xi = 0 on: [(4, 5), (5, 6)]; Psi_0 - K_L = -1.62525/t_f^2
   L=11: F = 0 exactly on the 5 reflection-equivalent pairs: True; max|Xi - closed form| = 5.1e-16; Xi = 0 on: []
   L=12: F = 0 exactly on the 5 reflection-equivalent pairs: True; max|Xi - closed form| = 2.0e-15; Xi = 0 on: [(5, 6), (6, 7)]; Psi_0 - K_L = -2.35851/t_f^2
   L=13: F = 0 exactly on the 6 reflection-equivalent pairs: True; max|Xi - closed form| = 2.3e-15; Xi = 0 on: []
   L=14: F = 0 exactly on the 6 reflection-equivalent pairs: True; max|Xi - closed form| = 3.8e-15; Xi = 0 on: [(6, 7), (7, 8)]; Psi_0 - K_L = -3.22513/t_f^2
   L=15: F = 0 exactly on the 7 reflection-equivalent pairs: True; max|Xi - closed form| = 7.2e-15; Xi = 0 on: []
   L=16: F = 0 exactly on the 7 reflection-equivalent pairs: True; max|Xi - closed form| = 7.3e-15; Xi = 0 on: [(7, 8), (8, 9)]; Psi_0 - K_L = -4.22510/t_f^2

2. (5.15) at L = 8, (r, r') = (3, 4): F = -0.125000, Xi = 1.1e-16, Psi_0 = -0.369141, K_L = 0.656250, Psi_0 - K_L = -1.025391
   coup  M_k  gamma  sig   exact ratio-1     prediction      (exact-pred)/gamma^3   branch-odd part: exact, pred
   fg   1.0  0.01   +1   -1.023603e-04   -1.025391e-04   +0.1788              +1.7575e-07 +0.0000e+00
   fg   1.0  0.01   -1   -1.027118e-04   -1.025391e-04   -0.1727              +1.7575e-07 +0.0000e+00
   fg   1.0  0.02   +1   -4.087030e-04   -4.101562e-04   +0.1817              +1.4053e-06 +0.0000e+00
   fg   1.0  0.02   -1   -4.115135e-04   -4.101562e-04   -0.1697              +1.4053e-06 +0.0000e+00
   fg   1.4  0.01   +1   -2.004829e-04   -2.009766e-04   +0.4937              +4.8218e-07 +0.0000e+00
   fg   1.4  0.01   -1   -2.014472e-04   -2.009766e-04   -0.4706              +4.8218e-07 +0.0000e+00
   fg   1.4  0.02   +1   -7.998683e-04   -8.039062e-04   +0.5047              +3.8534e-06 +0.0000e+00
   fg   1.4  0.02   -1   -8.075751e-04   -8.039062e-04   -0.4586              +3.8534e-06 +0.0000e+00
   a    1.2  0.01   +1   -5.760587e-05   -5.814538e-05   +0.5395              +9.0476e-06 +8.4392e-06
   a    1.2  0.01   -1   -7.570116e-05   -7.502376e-05   -0.6774              +9.0476e-06 +8.4392e-06
   a    1.2  0.02   +1   -2.282679e-04   -2.325815e-04   +0.5392              +3.8623e-05 +3.3757e-05
   a    1.2  0.02   -1   -3.055144e-04   -3.000950e-04   -0.6774              +3.8623e-05 +3.3757e-05
   a    1.6  0.01   +1   -1.040105e-04   -1.053571e-04   +1.3466              +1.4319e-05 +1.2853e-05
   a    1.6  0.01   -1   -1.326495e-04   -1.310623e-04   -1.5872              +1.4319e-05 +1.2853e-05
   a    1.6  0.02   +1   -4.106866e-04   -4.214286e-04   +1.3427              +6.3131e-05 +5.1410e-05
   a    1.6  0.02   -1   -5.369483e-04   -5.242492e-04   -1.5874              +6.3131e-05 +5.1410e-05
   c    1.2  0.01   +1   -7.571484e-05   -7.640625e-05   +0.6914              -6.8473e-06 -7.5000e-06
   c    1.2  0.01   -1   -6.202020e-05   -6.140625e-05   -0.6140              -6.8473e-06 -7.5000e-06
   c    1.2  0.02   +1   -3.000968e-04   -3.056250e-04   +0.6910              -2.4776e-05 -3.0000e-05
   c    1.2  0.02   -1   -2.505440e-04   -2.456250e-04   -0.6149              -2.4776e-05 -3.0000e-05
   c    1.6  0.01   +1   -1.308947e-04   -1.325000e-04   +1.6053              -8.4627e-06 -1.0000e-05
   c    1.6  0.01   -1   -1.139693e-04   -1.125000e-04   -1.4693              -8.4627e-06 -1.0000e-05
   c    1.6  0.02   +1   -5.171705e-04   -5.300000e-04   +1.6037              -2.7699e-05 -4.0000e-05
   c    1.6  0.02   -1   -4.617732e-04   -4.500000e-04   -1.4717              -2.7699e-05 -4.0000e-05
   (c): predicted branch-odd part -sigma gamma^2 M_k n (L-2)(L-4)/(6 L t_f) at gamma = 0.02, M = 1.2: -3.0000e-05

Interested in this research?

Join the readers' list and get an e-mail when a new stage or a correction is published. No password, and you can unsubscribe at any time.