import numpy as np import matplotlib.pyplot as plt from plotstyle import * plain_style() fig = plt.figure( figsize=(2.5,3.4) ) ax = fig.add_subplot(1, 1, 1) # parabula: x1 = -0.2 x2 = 0.9 x = np.linspace(x1, x2, 200) y = x*x ax.set_xlim(x1, x2) ax.set_ylim(-0.2, 0.7) ax.plot(x, y, c=colors['blue'], lw=4, zorder=0) # secant: x = np.asarray([0.1, 0.7]) y = x*x ax.set_xticks(x) ax.set_yticks(y) ax.set_xticklabels(['$x$','$x+\Delta x$']) ax.set_yticklabels(['','']) ax.scatter(x, y, c=colors['red'], edgecolor='none', s=150, zorder=10) # function values: ax.plot([x[0], x[0], x1],[-0.2, y[0], y[0]], '--k', lw=1, zorder=6) ax.plot([x[1], x[1], x1],[-0.2, y[1], y[1]], '--k', lw=1, zorder=6) ax.text(x1+0.05, y[0]+0.05, '$f(x)$', zorder=6) ax.text(x1+0.05, y[1]+0.05, '$f(x+\Delta x)$', zorder=6) # slope triangle: ax.plot([x[0], x[1], x[1]],[y[0], y[0], y[1]], '-k', lw=2, zorder=7) ax.text(np.mean(x), y[0]-0.08, '$\Delta x$', ha='center', zorder=7) ax.text(x[1]+0.05, np.mean(y), '$f(x+\Delta x)-f(x)$', va='center', rotation='vertical', zorder=7) # secant line: m = np.diff(y)/np.diff(x) xl = [x1, x2] yl = m*(xl-x[0])+y[0] ax.plot(xl, yl, c=colors['red'], lw=3, zorder=7) # derivative: md = 2.0*x[0] yl = md*(xl-x[0])+y[0] ax.plot(xl, yl, c=colors['yellow'], lw=3, zorder=5) # limit: for ml in np.linspace(md, m, 5)[1:] : yl = ml*(xl-x[0])+y[0] xs = 0.5*(ml+np.sqrt(ml*ml-4.0*(ml*x[0]-y[0]))) ax.scatter([xs], [xs*xs], c=colors['orange'], edgecolor='none', s=80, zorder=3) ax.plot(xl, yl, c=colors['orange'], lw=2, zorder=3) fig.subplots_adjust(**adjust_fs(fig, 0.5, 0.5, 1.4, 0.5)) plt.savefig('derivative.pdf') #plt.show();