Skip to content
Oakfield Operator Calculus Function Reference Site

Mathematics Examples

1) Calculate harmonic series to the billionth term

Section titled “1) Calculate harmonic series to the billionth term”

Uses the digamma function relation

Hn=ψ(n+1)+γH_n = \psi(n + 1) + \gamma

where ψ\psi is the digamma function and γ0.5772156649015329\gamma \approx 0.5772156649015329 is the Euler-Mascheroni constant.

local sim = require("libsimcore")
local ctx = sim.sim_create()
local steps = 1000000000
local dt = 0.02
sim.log("Starting simulation with %d steps and dt = %.3f", steps, dt)
local t0 = os.clock()
for n = 1, steps do
local Hn = sim.digamma(n + 1) + 0.5772156649015329
if n % 1000000000 == 0 then
sim.log("H_%d ≈ %.15f", n, Hn)
end
end
local elapsed = os.clock() - t0
sim.log("Simulation completed in %.15f seconds", elapsed)
sim.sim_shutdown(ctx)
return ctx

Example output:

Terminal window
oak@field % ./bin/sim_cli --script harmonic-series.lua
[INFO] Starting simulation with 1000000000 steps and dt = 0.020
[INFO] H_1000000000 ≈ 21.300481502347946
[INFO] Simulation completed in 28.414504999993369 seconds

Walks the Jackson qq-number sequence

[n]q=1qn1q[n]_q = \frac{1 - q^{n}}{1 - q}

side-by-side for a fast-decaying deformation (q=0.60q=0.60) and a near-classical case (q=0.95q=0.95).

local sim = require("libsimcore")
local ctx = sim.sim_create()
local q_fast = 0.60
local q_slow = 0.95
local n_max = 12
sim.log("Jackson q-number ladder up to n=%d (q=%.2f vs q=%.2f)", n_max, q_fast, q_slow)
for n = 1, n_max do
local fast = sim.qnumber(n, q_fast)
local slow = sim.qnumber(n, q_slow)
sim.log("n=%02d [n]_%.2f=%.8f [n]_%.2f=%.8f", n, q_fast, fast, q_slow, slow)
end
sim.sim_shutdown(ctx)
return ctx

Example output:

Terminal window
oak@field % ./bin/sim_cli --script q-number-ladder.lua
[INFO] Jackson q-number ladder up to n=12 (q=0.60 vs q=0.95)
[INFO] n=01 [n]_0.60=1.00000000 [n]_0.95=1.00000000
[INFO] n=02 [n]_0.60=1.60000000 [n]_0.95=1.95000000
[INFO] n=03 [n]_0.60=1.96000000 [n]_0.95=2.85250000
[INFO] n=04 [n]_0.60=2.17600000 [n]_0.95=3.70987500
[INFO] n=05 [n]_0.60=2.30560000 [n]_0.95=4.52438125
[INFO] n=06 [n]_0.60=2.38336000 [n]_0.95=5.29816219
[INFO] n=07 [n]_0.60=2.43001600 [n]_0.95=6.03325408
[INFO] n=08 [n]_0.60=2.45800960 [n]_0.95=6.73159137
[INFO] n=09 [n]_0.60=2.47480576 [n]_0.95=7.39501181
[INFO] n=10 [n]_0.60=2.48488346 [n]_0.95=8.02526122
[INFO] n=11 [n]_0.60=2.49093007 [n]_0.95=8.62399815
[INFO] n=12 [n]_0.60=2.49455804 [n]_0.95=9.19279825

Samples ζq(s,a)\zeta_q(s, a) across increasing qq to show how the deformation pushes the series upward for a fixed (s,a)(s, a) pair.

local sim = require("libsimcore")
local ctx = sim.sim_create()
local s = 2.50
local a = 0.75
local q_values = {0.10, 0.30, 0.50, 0.70, 0.90}
sim.log("q-Hurwitz zeta sweep for s=%.2f, a=%.2f", s, a)
for _, q in ipairs(q_values) do
local z = sim.qzeta(s, a, q)
sim.log("q=%.2f zeta_q=%.10f", q, z)
end
sim.sim_shutdown(ctx)
return ctx

Example output:

Terminal window
oak@field % ./bin/sim_cli --script qzeta-spectrum.lua
[INFO] q-Hurwitz zeta sweep for s=2.50, a=0.75
[INFO] q=0.10 zeta_q=0.0959811147
[INFO] q=0.30 zeta_q=0.4157875357
[INFO] q=0.50 zeta_q=0.8654166800
[INFO] q=0.70 zeta_q=1.4323668003
[INFO] q=0.90 zeta_q=2.1111821796

Accumulates the qq-deformed hyperexponential sum

ϕq=k=0K1λλ+εqk\phi_q = \sum_{k=0}^{K-1} \frac{\lambda}{\lambda + \varepsilon q^{k}}

and its derivative λϕq\partial_{\lambda}\phi_q for a few KK values to illustrate how additional terms reshape both the value and slope.

local sim = require("libsimcore")
local ctx = sim.sim_create()
local lambda = 1.10
local epsilon = 0.60
local q = 0.82
local steps = {3, 5, 7, 9, 11}
sim.log("q-hyperexponential ladder with lambda=%.2f, epsilon=%.2f, q=%.2f", lambda, epsilon, q)
for _, K in ipairs(steps) do
local phi = sim.qhyperexp_phi(lambda, epsilon, K, q)
local dphi = sim.qhyperexp_phi_deriv(lambda, epsilon, K, q)
sim.log("K=%02d phi=%.8f dphi=%.8f", K, phi, dphi)
end
sim.sim_shutdown(ctx)
return ctx

Example output:

Terminal window
oak@field % ./bin/sim_cli --script q-hyperexp-staircase.lua
[INFO] q-hyperexponential ladder with lambda=1.10, epsilon=0.60, q=0.82
[INFO] K=03 phi=2.06966900 dphi=0.58022341
[INFO] K=05 phi=3.64063279 dphi=0.88608059
[INFO] K=07 phi=5.33019012 dphi=1.12418797
[INFO] K=09 phi=7.11017829 dphi=1.30202556
[INFO] K=11 phi=8.95666551 dphi=1.43078130

Samples the trigamma (first polygamma) ψ1(z)\psi_1(z) across half-steps to highlight how curvature decays as zz grows.

local sim = require("libsimcore")
local ctx = sim.sim_create()
local z_values = {0.5, 1.0, 1.5, 2.0, 3.5, 5.0}
sim.log("Trigamma curvature samples psi1(z) for select z values")
for _, z in ipairs(z_values) do
local psi1 = sim.trigamma(z)
sim.log("z=%3.1f psi1=%.12f", z, psi1)
end
sim.sim_shutdown(ctx)
return ctx

Example output:

Terminal window
oak@field % ./bin/sim_cli --script trigamma-curvature.lua
[INFO] Trigamma curvature samples psi1(z) for select z values
[INFO] z=0.5 psi1=4.934797200545
[INFO] z=1.0 psi1=1.644929066861
[INFO] z=1.5 psi1=0.934797200570
[INFO] z=2.0 psi1=0.644929066886
[INFO] z=3.5 psi1=0.330352756175
[INFO] z=5.0 psi1=0.221317955850

6) q-digamma convergence to classical digamma

Section titled “6) q-digamma convergence to classical digamma”

Shows how the qq-digamma ψq(z)\psi_q(z) approaches the classical digamma ψ(z)\psi(z) as q1q \to 1 by logging the delta.

local sim = require("libsimcore")
local ctx = sim.sim_create()
local z = 5
local q_values = {0.50, 0.70, 0.90, 0.97, 0.995}
local psi_classic = sim.digamma(z)
sim.log("q-digamma convergence toward digamma at z=%d (psi=%.12f)", z, psi_classic)
for _, q in ipairs(q_values) do
local psi_q = sim.qdigamma(z, q)
local delta = psi_q - psi_classic
sim.log("q=%.3f psi_q=%.12f delta=%.12f", q, psi_q, delta)
end
sim.sim_shutdown(ctx)
return ctx

Example output:

Terminal window
oak@field % ./bin/sim_cli --script qdigamma-limit.lua
[INFO] q-digamma convergence toward digamma at z=5 (psi=1.506117668432)
[INFO] q=0.500 psi_q=0.648898044222 delta=-0.857219624210
[INFO] q=0.700 psi_q=0.981376082021 delta=-0.524741586411
[INFO] q=0.900 psi_q=1.330585006503 delta=-0.175532661929
[INFO] q=0.970 psi_q=1.453554858225 delta=-0.052562810207
[INFO] q=0.995 psi_q=1.497365785717 delta=-0.008751882715

Sweeps λ\lambda while holding ε\varepsilon and KK fixed to show how the hyperexponential sum

ϕ=k=0K1λλ+ε+k\phi = \sum_{k=0}^{K-1} \frac{\lambda}{\lambda + \varepsilon + k}

and its slope λϕ\partial_{\lambda}\phi change with signal level.

local sim = require("libsimcore")
local ctx = sim.sim_create()
local epsilon = 0.40
local K = 10
local lambdas = {0.60, 1.00, 1.80, 3.00}
sim.log("Hyperexponential gain sweep (epsilon=%.2f, K=%d)", epsilon, K)
sim.log("lambda phi(lambda) dphi/dlambda slope_ratio")
for _, lambda in ipairs(lambdas) do
local phi = sim.hyperexp_phi(lambda, epsilon, K)
local dphi = sim.hyperexp_phi_deriv(lambda, epsilon, K)
local ratio = dphi / phi
sim.log("%5.2f %11.8f %12.8f %11.8f", lambda, phi, dphi, ratio)
end
sim.sim_shutdown(ctx)
return ctx

Example output:

Terminal window
oak@field % ./bin/sim_cli --script hyperexp-gain-sweep.lua
[INFO] Hyperexponential gain sweep (epsilon=0.40, K=10)
[INFO] lambda phi(lambda) dphi/dlambda slope_ratio
[INFO] 0.60 1.75738095 1.99910762 1.13754938
[INFO] 1.00 2.45049752 1.51681989 0.61898446
[INFO] 1.80 3.44807892 1.03807316 0.30105841
[INFO] 3.00 4.46372879 0.69572733 0.15586237