codexslow-variation-oscillation-comparison.py
slow-variation-oscillation-comparison.py
"""Generate slow-variation-oscillation-comparison.png in the current directory."""
from pathlib import Path
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
def main():
plt.rcParams.update({"font.size": 11, "axes.spines.top": False,
"axes.spines.right": False})
s = np.linspace(2, 40, 1200)
shift = np.pi / 2
slow = np.exp(np.sin(np.log(s)))
fast = 2 + np.sin(s)
slow_ratio = np.exp(np.sin(np.log(s + shift)) - np.sin(np.log(s)))
fast_ratio = (2 + np.sin(s + shift)) / fast
fig, axes = plt.subplots(2, 2, figsize=(10.2, 6.5), dpi=120,
facecolor="white", sharex=True)
axes[0, 0].plot(s, slow, color="#2875ad", linewidth=2.2)
axes[0, 1].plot(s, fast, color="#d4652b", linewidth=2.2)
axes[0, 0].set(title=r"$\ell(t)=\exp(\sin(\log\log t))$",
ylabel="Function value", ylim=(0.2, 3.2))
axes[0, 1].set(title=r"$h(t)=2+\sin(\log t)$", ylim=(0.2, 3.2))
axes[1, 0].plot(s, slow_ratio, color="#2875ad", linewidth=2.2)
axes[1, 1].plot(s, fast_ratio, color="#d4652b", linewidth=2.2)
axes[1, 0].set(ylabel=r"Rescaling ratio $\ell(ut)/\ell(t)$",
xlabel=r"Logarithmic input $s=\log t$")
axes[1, 1].set(ylabel=r"Rescaling ratio $h(ut)/h(t)$",
xlabel=r"Logarithmic input $s=\log t$")
for ax in axes[1]:
ax.axhline(1, color="#555555", linestyle="--", linewidth=1.1)
ax.set_ylim(0.25, 2.8)
for ax in axes.flat:
ax.grid(alpha=0.2)
ax.set_xlim(2, 40)
fig.suptitle("Oscillation can be compatible with slow variation",
fontsize=15, y=0.98)
fig.subplots_adjust(left=0.09, right=0.98, bottom=0.23, top=0.87,
wspace=0.30, hspace=0.26)
fig.text(0.5, 0.035,
"Fixed u = exp(π/2). Left ratio → 1; right ratio keeps oscillating.\n"
"Neither function converges. A finite plot illustrates, rather than proves, the limits.",
ha="center", fontsize=11, linespacing=1.5)
fig.savefig(Path.cwd() / "slow-variation-oscillation-comparison.png",
facecolor="white")
plt.close(fig)
if __name__ == "__main__":
main()