def real_field_reducible(expr):
    '''Determines if the polynomial is reducible over the real field.
    According to the fundamental theorem of algebra, a polynomial is reducible
    if and only if the following criterion are met:
        1: Degree of polynomial is less than 3.
        2: If degree of polynomial is 2, at least one of the roots are in
            the complex field.
    However, for this library, we won't count monomials, such as x^4,
        as being reducible.
    Args:
        expr: a standard Sympy expression
    Returns:
        a tuple containing:
            [0] - boolean result of the function
            [1] - string describing the result
    '''
    result = is_monomial_form(expr)
    if result[0]:
        return False, PolynomialOutput.strout("IS_MONOMIAL")

    if isinstance(expr, Mul):
        for i in expr.args:
            result = real_field_reducible(i)
            if result[0]:
                return result
        return False, PolynomialOutput.strout("REAL_FACTORED")

    if isinstance(expr, Pow):
        return real_field_reducible(expr.args[0])

    if degree(expr) > 2:
        return True, PolynomialOutput.strout("REAL_HIGH_DEGREE")

    if degree(expr) == 2 and discriminant(expr) >= 0:
        return True, PolynomialOutput.strout("REAL_FACTORABLE_QUAD")

    return False, PolynomialOutput.strout("REAL_FACTORED")
#                [0,0,0,0,0,1,0,1,0],
#                [0,0,0,0,0,I,0,-I,0]
#               ])
# CtoR=CtoR/2
# Lreal = sym.simplify(CtoR*L*CtoR.inv())
# #ar,ai,br,bi,gmr,gmi,gor,goi=sym.symbols('a_r a_i b_r b_i g_mu_r g_mu_i g_o_r g_o_i')
# #agor,agoi, bgmr, bgmi,Wr,Wi=sym.symbols('ag_or ag_oi bg_mu_r bg_mu_i Omega_r Omega_i')
# ar,ai,br,bi=sym.symbols('a_r a_i b_r b_i ')
# #Lreal.subs({agor:(a*go+sym.conjugate(a)*sym.conjugate(go))/2,I*(sym.conjugate(a)*sym.conjugate(go)-a*go)/2:agoi})
# #Lreal=Lreal.subs({(a+sym.conjugate(a)):2*ar,(sym.conjugate(a)-a):2*I*ai,(b+sym.conjugate(b)):2*br,(sym.conjugate(b)-b):2*I*bi})
# #Lreal = Lreal.subs(a,ar+I*ai)
#
# #Lrealfunc = sym.lambdify((ar,ai,br,bi,delo, delm,delao, delam, gamma13, gamma23, gamma2d, gamma3d, nbath,gammamu,Omega,go,gm),Lreal)


H_disc_diff=sym.diff(sym.discriminant(sym.det(H_sys.subs({a:0,delao-delo:delta3,delam-delm:delta2})-lam*sym.eye(3)),lam),delta3)
H_disc_diff_symfun=sym.lambdify((delta2,delta3,b,gm,Omega),H_disc_diff)
H_disc_diff_fun=lambda delta2,delta3,b,gm,Omega: np.array(H_disc_diff_symfun(delta2,delta3,b,gm,Omega).real,dtype=float)
def find_dressed_states_m(delaoval, deloval,delmval,bval,p):
    try:
        deltam_ds_val=scipy.optimize.fsolve((H_disc_diff_fun),np.array(delmval),args=(delaoval-deloval,bval,p['gm'],p['Omega']))+delmval
    except ValueError:
        deltam_ds_val=np.nan
    except TypeError:
        deltam_ds_val=np.nan
    #except NameError:
    #    deltam_ds_val=np.nan

    return deltam_ds_val

Exemplo n.º 3
0
def delta(funcao):
    return discriminant(funcao)