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.
check_fall_full_grip.py5 KB · raw
"""Check of 05-inertia-of-mark (v2): fall of the full grip from rest, (5.14) (I2), 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. a(0) = d<v>/dlambda at 0, with v = i[C, x] (bond form), is
computed from the double commutator and from the joint evolution exp(-iC 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 and
W(j) = g_s <Omega(j)|P_{x_s}|Omega(j)> the held weight.
Output: output/check_fall_full_grip.txt
"""
from pathlib import Path
import numpy as np
from scipy.linalg import expm
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)
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, xs=0, wid=1.5):
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)
A = 0.5 * tau * np.kron(np.kron(Tp, -1j * sx), np.eye(L)); A = A + A.conj().T
C = A + np.kron(np.eye(2 * L), h0 + gs * P(L, xs))
for x in range(L):
C = C + g * np.kron(np.kron(P(L, x), sz), P(L, x))
v = -0.5 * tau * np.kron(np.kron(Tp + Tp.T, sx), np.eye(L)) # v = i[C, x], bond form
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(np.eye(L)[:, 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 = Vc[:, 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)
Psi = Vb @ (Mo.conj().T @ (EV @ np.diag(ev ** -0.5) @ EV.conj().T @ phij))
a_comm = np.real(1j * (Psi.conj() @ (C @ (v @ Psi)) - Psi.conj() @ (v @ (C @ Psi))))
lam = 1.0
U = expm(-1j * C * lam)
vp = np.real((U @ Psi).conj() @ v @ (U @ Psi)); vm = np.real((U.conj().T @ Psi).conj() @ v @ (U.conj().T @ Psi))
a_evol = (vp - vm) / (2 * lam)
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))
return d, tau, a_comm, a_evol, pred
log("(5.14): full grip, N_f = 1, t_f = 1, source at x_s = 0, Gaussian envelope (width 1.5) centred at L/2 - 1.")
log("a(0) from the double commutator and from the joint evolution (central difference of <v>, lambda = +-1),")
log("against -E''(0) sum_j phi_{j+1} phi_{j-1} W'(j). rel = a_comm/pred - 1; extrapolations: rel_0 = 2 rel(g_s) -")
log("rel(2 g_s) (the part that survives g_s -> 0) and rel(2 g_s) - rel(g_s) (the part linear in g_s).")
for L in (12, 16):
for g in (0.1, 0.3):
for sig in (-1, 1):
for tod in (0.1, 0.05):
res = [fall(L, g, sig, tod, gs) for gs in (1e-3, 2e-3)]
r1 = res[0][2] / res[0][4] - 1; r2 = res[1][2] / res[1][4] - 1
log(" L=%2d gamma*M=%.1f sig=%+d tau/d=%.2f d=%.4f | g_s=1e-3: a=%+.6e evol=%+.6e pred=%+.6e rel=%+.2e |"
" g_s=2e-3: rel=%+.2e | rel_0=%+.2e, linear part=%+.2e"
% (L, g, sig, tod, res[0][0], res[0][2], res[0][3], res[0][4], r1, r2, 2 * r1 - r2, r2 - r1))
(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 (v2): 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 (exhaustive search in
symmetric functions) 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 show stability.")
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.txt3 KB · raw
(5.14): full grip, N_f = 1, t_f = 1, source at x_s = 0, Gaussian envelope (width 1.5) centred at L/2 - 1.
a(0) from the double commutator and from the joint evolution (central difference of <v>, lambda = +-1),
against -E''(0) sum_j phi_{j+1} phi_{j-1} W'(j). rel = a_comm/pred - 1; extrapolations: rel_0 = 2 rel(g_s) -
rel(2 g_s) (the part that survives g_s -> 0) and rel(2 g_s) - rel(g_s) (the part linear in g_s).
L=12 gamma*M=0.1 sig=-1 tau/d=0.10 d=0.0168 | g_s=1e-3: a=-3.023571e-10 evol=-3.023571e-10 pred=-3.031537e-10 rel=-2.63e-03 | g_s=2e-3: rel=-3.55e-03 | rel_0=-1.71e-03, linear part=-9.20e-04
L=12 gamma*M=0.1 sig=-1 tau/d=0.05 d=0.0168 | g_s=1e-3: a=-7.568625e-11 evol=-7.568625e-11 pred=-7.578843e-11 rel=-1.35e-03 | g_s=2e-3: rel=-2.27e-03 | rel_0=-4.23e-04, linear part=-9.25e-04
L=12 gamma*M=0.1 sig=+1 tau/d=0.10 d=0.0168 | g_s=1e-3: a=-2.865523e-10 evol=-2.865523e-10 pred=-2.873527e-10 rel=-2.79e-03 | g_s=2e-3: rel=-3.62e-03 | rel_0=-1.95e-03, linear part=-8.32e-04
L=12 gamma*M=0.1 sig=+1 tau/d=0.05 d=0.0168 | g_s=1e-3: a=-7.174339e-11 evol=-7.174339e-11 pred=-7.183820e-11 rel=-1.32e-03 | g_s=2e-3: rel=-2.16e-03 | rel_0=-4.84e-04, linear part=-8.35e-04
L=12 gamma*M=0.3 sig=-1 tau/d=0.10 d=0.0535 | g_s=1e-3: a=-2.698008e-09 evol=-2.698008e-09 pred=-2.703968e-09 rel=-2.20e-03 | g_s=2e-3: rel=-3.24e-03 | rel_0=-1.17e-03, linear part=-1.03e-03
L=12 gamma*M=0.3 sig=-1 tau/d=0.05 d=0.0535 | g_s=1e-3: a=-6.751037e-10 evol=-6.751037e-10 pred=-6.760023e-10 rel=-1.33e-03 | g_s=2e-3: rel=-2.37e-03 | rel_0=-2.90e-04, linear part=-1.04e-03
L=12 gamma*M=0.3 sig=+1 tau/d=0.10 d=0.0535 | g_s=1e-3: a=-2.316113e-09 evol=-2.316113e-09 pred=-2.325205e-09 rel=-3.91e-03 | g_s=2e-3: rel=-4.70e-03 | rel_0=-3.12e-03, linear part=-7.88e-04
L=12 gamma*M=0.3 sig=+1 tau/d=0.05 d=0.0535 | g_s=1e-3: a=-5.804046e-10 evol=-5.804046e-10 pred=-5.813171e-10 rel=-1.57e-03 | g_s=2e-3: rel=-2.36e-03 | rel_0=-7.79e-04, linear part=-7.90e-04
L=16 gamma*M=0.1 sig=-1 tau/d=0.10 d=0.0127 | g_s=1e-3: a=-1.257469e-10 evol=-1.257469e-10 pred=-1.261401e-10 rel=-3.12e-03 | g_s=2e-3: rel=-4.50e-03 | rel_0=-1.73e-03, linear part=-1.38e-03
L=16 gamma*M=0.1 sig=-1 tau/d=0.05 d=0.0127 | g_s=1e-3: a=-3.147758e-11 evol=-3.147758e-11 pred=-3.153504e-11 rel=-1.82e-03 | g_s=2e-3: rel=-3.21e-03 | rel_0=-4.32e-04, linear part=-1.39e-03
L=16 gamma*M=0.1 sig=+1 tau/d=0.10 d=0.0127 | g_s=1e-3: a=-1.209484e-10 evol=-1.209484e-10 pred=-1.213236e-10 rel=-3.09e-03 | g_s=2e-3: rel=-4.19e-03 | rel_0=-1.99e-03, linear part=-1.10e-03
L=16 gamma*M=0.1 sig=+1 tau/d=0.05 d=0.0127 | g_s=1e-3: a=-3.028239e-11 evol=-3.028239e-11 pred=-3.033092e-11 rel=-1.60e-03 | g_s=2e-3: rel=-2.70e-03 | rel_0=-4.95e-04, linear part=-1.10e-03
L=16 gamma*M=0.3 sig=-1 tau/d=0.10 d=0.0422 | g_s=1e-3: a=-1.015585e-09 evol=-1.015585e-09 pred=-1.018688e-09 rel=-3.05e-03 | g_s=2e-3: rel=-4.73e-03 | rel_0=-1.37e-03, linear part=-1.68e-03
L=16 gamma*M=0.3 sig=-1 tau/d=0.05 d=0.0422 | g_s=1e-3: a=-2.541619e-10 evol=-2.541619e-10 pred=-2.546788e-10 rel=-2.03e-03 | g_s=2e-3: rel=-3.72e-03 | rel_0=-3.44e-04, linear part=-1.69e-03
L=16 gamma*M=0.3 sig=+1 tau/d=0.10 d=0.0422 | g_s=1e-3: a=-9.151758e-10 evol=-9.151758e-10 pred=-9.208831e-10 rel=-6.20e-03 | g_s=2e-3: rel=-7.10e-03 | rel_0=-5.29e-03, linear part=-9.04e-04
L=16 gamma*M=0.3 sig=+1 tau/d=0.05 d=0.0422 | g_s=1e-3: a=-2.297220e-10 evol=-2.297220e-10 pred=-2.302363e-10 rel=-2.23e-03 | g_s=2e-3: rel=-3.14e-03 | rel_0=-1.33e-03, linear part=-9.08e-04
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 show stability.
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