#!/usr/bin/python
# -*- coding: utf8 -*-
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
from math import *
code_website = 'http://commons.wikimedia.org/wiki/User:Geek3/mplwp'
try:
import mplwp
except ImportError, er:
print 'ImportError:', er
print 'You need to download mplwp.py from', code_website
exit(1)
name = 'mplwp_factorial_stirling_loglog2.svg'
fig = mplwp.fig_standard(mpl)
xlim = 1, 1e3; fig.gca().set_xlim(xlim)
ylim = 1e-1, 1e4; fig.gca().set_ylim(ylim)
from scipy.special import gammaln
from scipy.optimize import brentq
f1 = lambda x: gammaln(1 + x)
x1min = brentq(lambda x: f1(x) - ylim[0], xlim[0], xlim[1])
x1 = np.logspace(log10(x1min), log10(xlim[1]), 5000)
y1 = [f1(xx) for xx in x1]
plt.loglog(x1, y1, zorder=3, label='ln n!')
f2 = lambda x: x * log(x) - x + 0.5 * log(2*pi*x)
x2min = brentq(lambda x: f2(x) - ylim[0], xlim[0], xlim[1])
x2 = np.logspace(log10(x2min), log10(xlim[1]), 5000)
y2 = [f2(xx) for xx in x2]
plt.loglog(x2, y2, zorder=2,
label=ur'n ln n \u2212 $n +\,\frac{1}{2}\,ln(2\pi n)$')
f3 = lambda x: x * log(x) - x
x3min = brentq(lambda x: f3(x) - ylim[0], xlim[0], xlim[1])
x3 = np.logspace(log10(x3min), log10(xlim[1]), 5000)
y3 = [f3(xx) for xx in x3]
plt.loglog(x3, y3, zorder=1, label=u'n ln n \u2212 n')
plt.legend(loc='lower right').get_frame().set_alpha(0.9)
plt.savefig(name)
mplwp.postprocess(name)