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.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.py12 KB · raw
"""Check of 05-inertia-of-mark (v4): weight over inertia, place pairs with F = 0 or Xi = 0, N_f = 1 unless stated.
1. F = 0 exactly for reflection-equivalent pairs (r' = -r mod L); list of pairs with Xi = 0 for 5 <= L <= 16;
at the Xi = 0 pairs, Psi_0 against its closed form -(L^2-1)(2L^2+7)/(360 L^2 t_f^2), and K_L > 0
(the closed form also for even L up to 40).
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); for (a) also the closed form gamma^2 G(sigma M_k/t_f).
3. (a) at Xi = 0, even 6 <= L <= 16: cancellation conditions of the complete gamma^2 coefficient G:
(i) phi(M_k^2/t_f^2) = 0 at every level, (ii) equal branch-even part at every level. Zeros of phi
(polynomial roots, cross-checked by a sign-change count), the N_f that (ii) requires for each pair of zeros,
and equally spaced triples of sqrt(zeros).
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), and max|Psi_0 - closed form| (v4),")
log(" closed form Psi_0 = -(L^2-1)(2L^2+7)/(360 L^2 t_f^2); K_L = 2 n S_2 + s_3 with S_2 > 0 and s_3 > 0.")
def psi0_closed(L):
return -(L ** 2 - 1) * (2 * L ** 2 + 7) / (360 * L ** 2 * tf ** 2)
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])
dpsi = max(abs(coeffs(L, *pr)[2] - psi0_closed(L)) for pr in xi0)
_, _, _, s1_, s2_, S2_ = sums(L)
extra = ("; Psi_0 - K_L = %.5f/t_f^2; max|Psi_0 - closed form| = %.1e; S_2 = %.4f, s_3 = %.4f"
% (P0 - K0, dpsi, S2_, s1_ ** 2 - s2_ / L))
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(" closed form of Psi_0 at the pairs (L/2 - 1, L/2), (L/2, L/2 + 1), even 18 <= L <= 40:")
worst = 0.0
for L in range(18, 41, 2):
for pr in ((L // 2 - 1, L // 2), (L // 2, L // 2 + 1)):
F_, Xi_, P0_, K0_ = coeffs(L, *pr)
worst = max(worst, abs(P0_ - psi0_closed(L)) / abs(psi0_closed(L)), abs(Xi_) * L)
log(" max relative |Psi_0 - closed form| and max L|Xi| over these pairs: %.1e" % worst)
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)))
def avg(L, f):
q = 2 * np.pi * np.arange(1, L) / L
return np.sum(f(np.cos(q))) / L
def G_closed(L, nn, y):
"""(a) at Xi = 0: complete gamma^2 coefficient of (5.15), y = sigma M_k / t_f (v4)."""
return psi0_closed(L) * tf ** 2 * y * y - 0.5 * nn * y * y * (y - 1) * avg(L, lambda c: (1 + c) / ((1 - c) * (y - 1 + c)))
dev = 0.0
for M in (1.2, 1.6):
for gam in (0.01, 0.02):
for sig in (1, -1):
pr = Psi0 * (gam * M) ** 2 - sig * (Dsc(L, M, gam, sig, "a") - n * s1 * (gam * M) ** 2) / M
dev = max(dev, abs(gam ** 2 * G_closed(L, n, sig * M / tf) - pr) / abs(pr))
log(" (a): closed form gamma^2 G(sigma M_k/t_f) against the prediction column: max relative deviation %.1e" % dev)
log()
log("3. (a) at Xi = 0 (even L): G(y) = y^2 [Psi_0 t_f^2 - n A_L + (n/2) psi(y^2)] + (n/2) y^3 phi(y^2), y = sigma M_k/t_f,")
log(" A_L = (L-1)(L-2)/(6L), phi(u) = <c(1+c)/((1-c)(u-(1-c)^2))>_q, psi(u) = <c(1+c)/(u-(1-c)^2)>_q, c = cos q.")
log(" Common to all levels and branches iff (i) phi(x_k^2) = 0 for every level, x_k = M_k/t_f, and (ii) the branch-even")
log(" part is equal at every level; (ii) for two zeros u_a, u_b of phi fixes n = N_f/L uniquely.")
def phipsi(L):
j = np.arange(1, L // 2)
c = np.cos(2 * np.pi * j / L)
keep = np.abs(c * (1 + c)) > 1e-12
c = c[keep]
W = 2 * c * (1 + c) / ((1 - c) * L)
return c, W, (1 - c) ** 2
ident = 0.0
for L in range(6, 17, 2):
c, W, p = phipsi(L)
for y in (0.37, -0.81, 1.9, -2.6):
nn = 3.0 / L
u = y * y
ph = np.sum(W / (u - p)); ps = np.sum(W * (1 - c) / (u - p))
A = (L - 1) * (L - 2) / (6 * L)
alt = y * y * (psi0_closed(L) * tf ** 2 - nn * A + 0.5 * nn * ps) + 0.5 * nn * y ** 3 * ph
ident = max(ident, abs(alt - G_closed(L, nn, y)) / abs(G_closed(L, nn, y)))
log(" identity of the even/odd split against G (L = 6..16 even, four y, N_f = 3): max relative deviation %.1e" % ident)
summ = []
for L in range(6, 41, 2):
c, W, p = phipsi(L)
order = np.argsort(p); c, W, p = c[order], W[order], p[order]
P = np.zeros(len(p))
for i in range(len(p)):
P = P + W[i] * np.poly(np.delete(p, i))
rts = np.roots(P)
Z = np.sort(np.array([z.real for z in rts if abs(z.imag) < 1e-9 and z.real > 0]))
for _ in range(8): # Newton polish of the roots on phi itself
Z = Z - np.array([np.sum(W / (z - p)) / -np.sum(W / (z - p) ** 2) for z in Z]).reshape(Z.shape)
# cross-check: sign changes of phi on each interval between consecutive poles, and above the largest pole
edges = np.concatenate(([0.0], p, [1e4]))
nsc = 0
for a, b in zip(edges[:-1], edges[1:]):
uu = (np.geomspace(a + 1e-9, b, 400001) if b > 10 else a + (b - a) * np.linspace(1e-7, 1 - 1e-7, 400001))
f = np.array([np.sum(W / (x - p)) for x in uu[:: 100]]) if False else (W[None, :] / (uu[:, None] - p[None, :])).sum(1)
nsc += int(np.sum(np.sign(f[1:]) != np.sign(f[:-1])))
res = max([abs(np.sum(W / (z - p))) * z for z in Z], default=0.0)
A = (L - 1) * (L - 2) / (6 * L)
ps = lambda u: np.sum(W * (1 - c) / (u - p))
Nf_req = []
for ia in range(len(Z)):
for ib in range(ia + 1, len(Z)):
ua, ub = Z[ia], Z[ib]
den = A * (ua - ub) - 0.5 * (ua * ps(ua) - ub * ps(ub))
Nf_req.append(L * psi0_closed(L) * tf ** 2 * (ua - ub) / den)
pos = [x for x in Nf_req if x > 0]
dist = min([abs(x - round(x)) for x in pos if round(x) >= 1], default=float("nan"))
xs = np.sqrt(Z)
tri = sum(1 for a in range(len(xs)) for b in range(a + 1, len(xs)) for d in range(b + 1, len(xs))
if abs((xs[b] - xs[a]) - (xs[d] - xs[b])) < 1e-9)
reso = [z for z in Z if min(abs(z - 1), abs(z - 4)) < 1e-9]
# proof ingredients: at zeros of phi, psi(u) = -<w/(sqrt(u) + 1 - c)>; kappa'(u) = -(1/4)<w (x+2a)/(x+a)^2> < A_L
om = lambda x: np.sum(W / (x + 1 - c))
dpsi = max([abs(ps(z) + om(np.sqrt(z))) for z in Z], default=0.0)
xg = np.geomspace(1e-4, 1e3, 20001)
a_ = 1 - c
kprime = -0.25 * (W[None, :] * (xg[:, None] + 2 * a_[None, :]) / (xg[:, None] + a_[None, :]) ** 2).sum(1)
summ.append((L, len(Z), nsc, len(Nf_req), len(pos), max(Nf_req, default=float("nan")), tri, len(reso), dpsi,
np.max(kprime) - A, A))
if L > 16:
continue
log(" L=%2d: %d poles; zeros of phi: %d (roots), %d (sign changes), max|u phi(u)| at roots %.1e;"
" x = M_k/t_f at the zeros: %s" % (L, len(p), len(Z), nsc, res, np.array2string(xs, precision=5)))
log(" N_f required by (ii) for the %d pairs: %s; positive: %d; min distance of a positive one to an"
" integer >= 1: %.3g; equally spaced triples: %d; zeros at u = 1 or 4: %d"
% (len(Nf_req), np.array2string(np.array(Nf_req), precision=4), len(pos), dist, tri, len(reso)))
log(" summary, even 6 <= L <= 40: L, zeros (roots), zeros (sign changes), pairs, pairs with N_f > 0, max required N_f,"
" equally spaced triples, zeros at u = 1 or 4, max|psi + <w/(x+1-c)>| at the zeros,")
log(" max over x in [1e-4, 1e3] of kappa'(u) - A_L (negative: (ii) needs N_f < 0), A_L")
for t in summ:
log(" L=%2d: %2d %2d pairs %3d positive %d max N_f %+.4f triples %d resonant %d %.1e %+.4f %.4f" % t)
(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.txt10 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), and max|Psi_0 - closed form| (v4),
closed form Psi_0 = -(L^2-1)(2L^2+7)/(360 L^2 t_f^2); K_L = 2 n S_2 + s_3 with S_2 > 0 and s_3 > 0.
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; max|Psi_0 - closed form| = 1.4e-15; S_2 = 0.5185, s_3 = 0.1728
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; max|Psi_0 - closed form| = 7.2e-16; S_2 = 1.3125, s_3 = 0.3281
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; max|Psi_0 - closed form| = 2.0e-15; S_2 = 2.6400, s_3 = 0.5280
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; max|Psi_0 - closed form| = 2.8e-15; S_2 = 4.6343, s_3 = 0.7724
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; max|Psi_0 - closed form| = 3.3e-15; S_2 = 7.4286, s_3 = 1.0612
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; max|Psi_0 - closed form| = 1.1e-14; S_2 = 11.1562, s_3 = 1.3945
closed form of Psi_0 at the pairs (L/2 - 1, L/2), (L/2, L/2 + 1), even 18 <= L <= 40:
max relative |Psi_0 - closed form| and max L|Xi| over these pairs: 5.3e-12
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
(a): closed form gamma^2 G(sigma M_k/t_f) against the prediction column: max relative deviation 6.4e-16
3. (a) at Xi = 0 (even L): G(y) = y^2 [Psi_0 t_f^2 - n A_L + (n/2) psi(y^2)] + (n/2) y^3 phi(y^2), y = sigma M_k/t_f,
A_L = (L-1)(L-2)/(6L), phi(u) = <c(1+c)/((1-c)(u-(1-c)^2))>_q, psi(u) = <c(1+c)/(u-(1-c)^2)>_q, c = cos q.
Common to all levels and branches iff (i) phi(x_k^2) = 0 for every level, x_k = M_k/t_f, and (ii) the branch-even
part is equal at every level; (ii) for two zeros u_a, u_b of phi fixes n = N_f/L uniquely.
identity of the even/odd split against G (L = 6..16 even, four y, N_f = 3): max relative deviation 1.2e-13
L= 6: 2 poles; zeros of phi: 1 (roots), 1 (sign changes), max|u phi(u)| at roots 3.5e-16; x = M_k/t_f at the zeros: [1.58114]
N_f required by (ii) for the 0 pairs: []; positive: 0; min distance of a positive one to an integer >= 1: nan; equally spaced triples: 0; zeros at u = 1 or 4: 0
L= 8: 2 poles; zeros of phi: 1 (roots), 1 (sign changes), max|u phi(u)| at roots 1.5e-15; x = M_k/t_f at the zeros: [1.73205]
N_f required by (ii) for the 0 pairs: []; positive: 0; min distance of a positive one to an integer >= 1: nan; equally spaced triples: 0; zeros at u = 1 or 4: 0
L=10: 4 poles; zeros of phi: 3 (roots), 3 (sign changes), max|u phi(u)| at roots 1.0e-14; x = M_k/t_f at the zeros: [0.66814 1.32142 1.81864]
N_f required by (ii) for the 3 pairs: [-3.5787 -3.7575 -3.9206]; positive: 0; min distance of a positive one to an integer >= 1: nan; equally spaced triples: 0; zeros at u = 1 or 4: 0
L=12: 4 poles; zeros of phi: 3 (roots), 3 (sign changes), max|u phi(u)| at roots 1.6e-14; x = M_k/t_f at the zeros: [0.47368 1.50903 1.87041]
N_f required by (ii) for the 3 pairs: [-4.7065 -4.9007 -5.2661]; positive: 0; min distance of a positive one to an integer >= 1: nan; equally spaced triples: 0; zeros at u = 1 or 4: 0
L=14: 6 poles; zeros of phi: 5 (roots), 5 (sign changes), max|u phi(u)| at roots 4.3e-14; x = M_k/t_f at the zeros: [0.35207 0.77116 1.22662 1.62926 1.90323]
N_f required by (ii) for the 10 pairs: [-5.0186 -5.6406 -6.0239 -6.2276 -6.027 -6.3129 -6.47 -6.559 -6.681
-6.8319]; positive: 0; min distance of a positive one to an integer >= 1: nan; equally spaced triples: 0; zeros at u = 1 or 4: 0
L=16: 6 poles; zeros of phi: 5 (roots), 5 (sign changes), max|u phi(u)| at roots 1.0e-13; x = M_k/t_f at the zeros: [0.27149 0.60844 1.38676 1.71078 1.92515]
N_f required by (ii) for the 10 pairs: [-5.6322 -7.1414 -7.5263 -7.7361 -7.5264 -7.8318 -8.0018 -8.3565 -8.4675
-8.615 ]; positive: 0; min distance of a positive one to an integer >= 1: nan; equally spaced triples: 0; zeros at u = 1 or 4: 0
summary, even 6 <= L <= 40: L, zeros (roots), zeros (sign changes), pairs, pairs with N_f > 0, max required N_f, equally spaced triples, zeros at u = 1 or 4, max|psi + <w/(x+1-c)>| at the zeros,
max over x in [1e-4, 1e3] of kappa'(u) - A_L (negative: (ii) needs N_f < 0), A_L
L= 6: 1 1 pairs 0 positive 0 max N_f +nan triples 0 resonant 0 1.9e-16 -0.5557 0.5556
L= 8: 1 1 pairs 0 positive 0 max N_f +nan triples 0 resonant 0 8.9e-16 -0.8752 0.8750
L=10: 3 3 pairs 3 positive 0 max N_f -3.5787 triples 0 resonant 0 5.8e-15 -1.2004 1.2000
L=12: 3 3 pairs 3 positive 0 max N_f -4.7065 triples 0 resonant 0 8.7e-15 -1.5283 1.5278
L=14: 5 5 pairs 10 positive 0 max N_f -5.0186 triples 0 resonant 0 2.3e-14 -1.8579 1.8571
L=16: 5 5 pairs 10 positive 0 max N_f -5.6322 triples 0 resonant 0 5.3e-14 -2.1884 2.1875
L=18: 7 7 pairs 21 positive 0 max N_f -6.1680 triples 0 resonant 0 3.9e-14 -2.5196 2.5185
L=20: 7 7 pairs 21 positive 0 max N_f -6.6308 triples 0 resonant 0 1.6e-13 -2.8512 2.8500
L=22: 9 9 pairs 36 positive 0 max N_f -7.0284 triples 0 resonant 0 2.7e-13 -3.1832 3.1818
L=24: 9 9 pairs 36 positive 0 max N_f -7.3692 triples 0 resonant 0 6.5e-13 -3.5154 3.5139
L=26: 11 11 pairs 55 positive 0 max N_f -7.6616 triples 0 resonant 0 7.9e-13 -3.8478 3.8462
L=28: 11 11 pairs 55 positive 0 max N_f -7.9128 triples 0 resonant 0 1.0e-12 -4.1804 4.1786
L=30: 13 13 pairs 78 positive 0 max N_f -8.1294 triples 0 resonant 0 4.6e-13 -4.5131 4.5111
L=32: 13 13 pairs 78 positive 0 max N_f -8.3168 triples 0 resonant 0 3.2e-12 -4.8459 4.8438
L=34: 15 15 pairs 105 positive 0 max N_f -8.4795 triples 0 resonant 0 4.0e-12 -5.1788 5.1765
L=36: 15 15 pairs 105 positive 0 max N_f -8.6214 triples 0 resonant 0 5.2e-12 -5.5118 5.5093
L=38: 17 17 pairs 136 positive 0 max N_f -8.7457 triples 0 resonant 0 6.2e-12 -5.8448 5.8421
L=40: 17 17 pairs 136 positive 0 max N_f -8.8550 triples 0 resonant 0 7.0e-12 -6.1778 6.1750