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
def delta(funcao): return discriminant(funcao)