codex/past-exam-of-the-options-ii-course-of-the-university-of-oxford/2004-interpolation-spline.py

past-exam-of-the-options-ii-course-of-the-university-of-oxford/2004-interpolation-spline.py
"""Python 3.12; requires numpy and matplotlib; writes PNG into CWD."""
from pathlib import Path
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
nodes=np.arange(5.);x=np.linspace(0,4,700)
def t(x):return .27*(x-1)*(x-2)*(x-3)
y=t(nodes)
fig,ax=plt.subplots(figsize=(7.2,3.8),facecolor='white')
ax.axhline(0,color='.6',lw=.8)
ax.plot(x,t(x),label='$t=q-r$',color='#2366a8',lw=2)
ax.plot(nodes,y,'o-',label='linear interpolant $s$',color='#c6502b',lw=2)
for xi in nodes[1:-1]:ax.axvline(xi,color='.8',ls=':',lw=.8)
ax.set(xticks=nodes,xticklabels=['$x_0$','$x_1$','$x_2$','$x_3$','$x_4$'],xlabel='interpolation nodes',ylabel='function value',title='Endpoint ramps and zero interior spline pieces')
ax.legend();ax.grid(axis='y',alpha=.15);fig.tight_layout()
fig.savefig(Path.cwd()/(Path(__file__).stem+'.png'),dpi=150,facecolor='white')