Exemplo n.º 1
0
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
Exemplo n.º 2
0
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