んちゃ!
今回はゼータ関数の加速級数を発見したので紹介いたします。
使用するのはコネクターだけです。
参考記事:記号や詳細についてはこちらの記事を参照(👈クリック)
[1]
[3]
任意の複素数
import sympy as sp
def binomial(n, k):
return sp.binomial(n, k)
def compute_rhs(k, max_m=100, max_p=100):
term1 = sum(1 / (sp.Pow(m, k) * sp.Pow(binomial(2 * m, m), k)) for m in range(1, max_m + 1)) * (sp.Pow(2, k) + 1)
term2 = sum((sp.Pow(p, k) - sp.Pow(m, k)) / (sp.Pow(m, k) * sp.Pow(p, k) * sp.Pow(binomial(m + p, p), k))
for m in range(1, max_m + 1) for p in range(m + 1, max_p + 1))
return term1 + term2
def matching_digits(x, y):
if x.is_real and y.is_real:
x_val = float(x.evalf(50))
y_val = float(y.evalf(50))
x_str = f"{x_val:.50f}"
y_str = f"{y_val:.50f}"
else:
x_real, x_imag = float(x.as_real_imag()[0].evalf(50)), float(x.as_real_imag()[1].evalf(50))
y_real, y_imag = float(y.as_real_imag()[0].evalf(50)), float(y.as_real_imag()[1].evalf(50))
x_str = f"{x_real:.50f}{x_imag:+.50f}j"
y_str = f"{y_real:.50f}{y_imag:+.50f}j"
count = 0
for a, b in zip(x_str, y_str):
if a == b:
count += 1
else:
break
return count
def main(k, max_m=10, max_p=10):
lhs = sp.N(sp.zeta(k), 20) # ζ(k) の高精度計算
rhs = compute_rhs(k, max_m, max_p)
matched_digits = matching_digits(lhs, rhs)
print(f"LHS (Zeta Function): {lhs}")
print(f"RHS (Computed Sum) : {rhs.evalf(20)}")
print(f"Matching Digits : {matched_digits}")
if name == "main":
k = 2 + 0.5j # 複素数の例
main(k)