def plota_figura_curvas_m_varios_alpha(vcost, n, salva_fig=True): for c in vcost: beta_v = np.arange(0., 1.01, 0.01) v_alpha = [0.1, 0.3, 0.5, 0.7, 0.9] params = {'c': c, 'n': n, 'alpha': v_alpha} fname = 'data/mxbeta_'+hashlib.md5(str(params)+\ str(beta_v)).hexdigest() + '.p' if os.path.exists(fname): df = pd.read_pickle(fname) else: df = pd.DataFrame(columns=['beta', 'm_eigen', 'alpha']) cont = 0 for alpha in v_alpha: for j, beta in enumerate(tqdm(beta_v)): eigen_m = m_critico(c,n,alpha,beta) df.loc[cont] = [beta, eigen_m, alpha] cont += 1 df.to_pickle(fname) w, h = plt.figaspect(1) fig = plt.figure(figsize=(w,h),dpi=150) ax = fig.add_subplot(111) colors = ['blue', 'green', 'yellow', 'red', 'purple'] for i, alpha in enumerate(v_alpha): print alpha df_aux = df[df['alpha'] == alpha] vetor_m_eigen = df_aux['m_eigen'].tolist() vetor_beta = df_aux['beta'].tolist() ax.plot(vetor_beta, vetor_m_eigen, label=r'$\alpha$= %.2f'%alpha, color=colors[i]) # Label plt.xlabel(r"$\beta$") plt.ylabel(r"$m_c$") # Titulo titulo = ("c=%f" %c).rstrip('0') #plt.title(titulo) # Limite e intervalos do eixo x xlim([-0.005,1.005]) xticks(np.arange(0.0,1.1,0.1)) # Limite e intervalos do eixo y if c == 0.03: ylim([-0.005,1.005]) yticks(np.arange(0.0,1.1,0.1)) #plt.legend(loc='best') handles, labels = ax.get_legend_handles_labels() lgd = ax.legend(handles, labels, bbox_to_anchor=(1.05, 1),\ loc=2, borderaxespad=0.) #plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) ax.grid(c='#8b8b83') plt.tight_layout() if salva_fig: # Salva fig nome = "figuras_/Varios_alphas_n=%s_c=%s.png" %(str(n), str(c)) fig.savefig(nome, bbox_extra_artists=(lgd,), bbox_inches='tight') # Fecha fig plt.close() else: plt.show() return df
def plota_figura_curvas_m(c, alpha, n, salva_fig=True): beta_v = np.arange(0., 1.01, 0.01) params = '%f%f%d' %(c,alpha,n) fname = 'data/mxbeta_'+hashlib.md5(str(params)+\ str(beta_v)).hexdigest() + '.p' if os.path.exists(fname): df = pd.read_pickle(fname) else: df = pd.DataFrame(columns=['beta', 'm_eigen', 'm_aprox', 'm_int']) for i, beta in enumerate(tqdm(beta_v)): eigen_m = m_critico(c,n,alpha,beta) aprox_m = aprox_encontra_m_critico(c, alpha, beta, n) m = encontra_m_critico(c, alpha, beta, n) df.loc[i] = [beta, eigen_m, aprox_m, m] df.to_pickle(fname) vetor_m_eigen = df['m_eigen'].tolist() vetor_m_aprox = df['m_aprox'].tolist() vetor_m_int = df['m_int'].tolist() def mc_formula(c,alpha,beta,n): z = 1./(alpha*beta) quadrado = math.sqrt((1-c)*(1-c)+z*z*c*c+2*c*(1+c)*z) numerador = c*z+2*(1+c) return (numerador/(c-1+quadrado))/(2.*n) vetor_m_analitico = [mc_formula(c,alpha,beta,n) for beta in beta_v] w, h = plt.figaspect(1) fig = plt.figure(figsize=(w,h),dpi=100) ax = fig.add_subplot(111) # Mostra um grafico ax.plot(beta_v, vetor_m_int,label=u'approximation',color='blue') ax.plot(beta_v, vetor_m_aprox, label=ur'small $c$', color='red') ax.plot(beta_v, vetor_m_analitico, label=ur'calculado na mao', color='purple', marker='*') ax.plot(beta_v, vetor_m_eigen,linestyle='--', label=u'eigenvalue method', color='green') # Label plt.xlabel(r"$\beta$") plt.ylabel(r"$m$") # Titulo titulo = ("c=%f" %c).rstrip('0') #plt.title(titulo) # Limite e intervalos do eixo x xlim([-0.005,1.005]) xticks(np.arange(0.0,1.1,0.1)) #maximo = max(vetor_m_eigen) #inc = float(maximo)/200. #ylim([-inc, maximo+inc]) # Limite e intervalos do eixo y #ylim([-0.005,0.105]) #yticks(np.arange(0.0,0.1001,0.025)) # Limite e intervalos do eixo y a = -0.0005 b = 0.2 maximo = 0.25 inc = 0.05 if c == 0.03: b = 1.005 maximo = 1.1 inc = 0.1 elif c == 0.15: b = 0.2505 maximo = 0.3 inc = 0.05 elif c >= 0.5: b = 0.0105 maximo = 0.011 inc = 0.005 ylim([a,b]) yticks(np.arange(0.0,maximo, inc)) plt.legend(loc='best') plt.grid(c='#8b8b83') plt.tight_layout() handles, labels = ax.get_legend_handles_labels() lgd = ax.legend(loc="center", bbox_to_anchor=(0.5,-0.2), fancybox=True, ncol=3) if salva_fig: # Salva fig nome = "figuras_/new_Duas_curvas_viabilidade_alpha=%s_n=%s_c=%s.png" %(str(alpha), str(n), str(c)) plt.savefig(nome, bbox_extra_artists=(lgd,), bbox_inches='tight') # Fecha fig plt.close() else: plt.show() return df