#!/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_reny_entropy012inf.svg'
fig = mplwp.fig_standard(mpl)
xlim = -0.05, 1.05; fig.gca().set_xlim(xlim)
ylim = 0, 1.1; fig.gca().set_ylim(ylim)
mplwp.mark_axeszero(fig.gca())
def H(x, alpha):
if x == 0 or x == 1:
return 0.0
if alpha == 1:
return (x * log(x) + (1-x) * log(1-x)) / log(0.5)
if alpha == float('inf'):
return log(max(x, 1-x)) / log(0.5)
return 1/(1.0-alpha) * log(sum([p**alpha for p in [x, 1-x]])) / log(2.0)
x = np.linspace(0, 1, 5001)
x0 = [0, 0, 1, 1]
y0 = [0, 1, 1, 0]
plt.plot(x0, y0, label=ur'$H_0(x,\,1\u2212x)$')
y1 = [H(xx, 1) for xx in x]
plt.plot(x, y1, label=ur'$H_1(x,\,1\u2212x)$')
y2 = [H(xx, 2) for xx in x]
plt.plot(x, y2, label=ur'$H_2(x,\,1\u2212x)$')
yinf = [H(xx, float('inf')) for xx in x]
plt.plot(x, yinf, label=ur'$H_\infty(x,\,1\u2212x)$')
mpl.rc('legend', borderaxespad=1.0)
plt.legend(loc='lower center').get_frame().set_alpha(0.9)
plt.savefig(name)
mplwp.postprocess(name)