def racines_degre2(P): """renvoie les racines d'un polynôme de degré 2""" delta=int(P[1]**2-4*P[2]*P[0]) if delta==0: x0=Fractions(-1,2)*P[1]/P[2] liste_racines=[x0.simplifie()] liste_str_racines=["\\dfrac{-%s}{2\\times %s}"%(pTeX(P[1]),pTeX(P[2]))] simplrac=[False] elif delta>0: simplrac,strx1,x1,strx2,x2=listeracines(P[2],P[1],delta,parentheses=False) liste_racines=[x1,x2] liste_str_racines=[strx1,strx2] else: simplrac=[False] liste_racines=liste_str_racines=[] return delta,simplrac,liste_racines,liste_str_racines
def redaction_racines(P,nomP,var,cor=[]): delta,simpl_delta,liste_racines,liste_str_racines=racines_degre2(P) ligne_delta=u"Je calcule $\\Delta=%s^2-4\\times %s\\times %s=%s$"%(pTeX(P[1]),pTeX(P[2]),pTeX(P[0]),TeX(delta)) if simpl_delta[0]: ligne_delta+=" et $%s=%s$.\\par"%(radicalTeX(delta),simpl_delta[1]) else: ligne_delta+=".\\par" cor.append(ligne_delta) if delta<0: cor.append("Comme $\\Delta <0$, $%s(%s)$ n'a pas de racines."%(nomP,var)) elif delta==0: cor.append("Comme $\\Delta=0$, $%s(%s)$ a une seule racine $%s_0=%s=%s$.\\par"%(nomP,var,var,liste_str_racines[0],TeX(liste_racines[0]))) else:#delta>0 [x1,x2]=liste_racines cor.append("Comme $\\Delta>0$, $%s(%s)$ a deux racines :"%(nomP,var)) if isinstance(x1,RacineDegre2): simplification1=simplification2="" x1,detail1=x1.simplifie(True) x2,detail2=x2.simplifie(True) max_len=max(len(detail1),len(detail2)) cor.append("\\begin{align*}") cor.append("%s =&%s &%s =&%s"%\ (liste_str_racines[0],liste_racines[0],liste_str_racines[1],liste_racines[1])) cor.append("\\\\") for i in range(0,max_len): if i <len(detail1): cor.append("=&%s&"%(detail1[i])) else: cor.append("&&") if i <len(detail2): cor.append("=&%s"%(detail2[i])) else: cor.append("& ") cor.append("\\\\") cor.pop(-1) cor.append("\\end{align*}") cor.append("Les racines de $%s$ sont $%s_1=%s$ et $%s_2=%s$.\\par"%(nomP,var,x1,var,x2)) else: [strx1,strx2]=liste_str_racines cor.append("Les racines de $%s$ sont $%s_1=%s=%s$ et $%s_2=%s=%s$."%(nomP,var,strx1,x1,var,strx2,x2)) return cor
def factorisation_degre2(P,factorisation=True): #x1=x2=0 var=P.var X=Polynome({1:1},var) delta=int(P[1]**2-4*P[2]*P[0]) if delta<0: factorisation=[] str_racines=[] racines=[] simplrac=[False] elif delta==0: x0=Fractions(-1,2)*P[1]/P[2] simplrac=[False] racines=[x0.simplifie()] str_racines=["\\dfrac{-%s}{2\\times %s}"%(pTeX(P[1]),pTeX(P[2]))] P0="%s-%s"%(var,pTeX(racines[0])) factorisation=[[P0,P0]]#non simplifiée if 0>racines[0]: P0=X-racines[0] factorisation.append([P0,P0]) else:#delta>0 simplrac,strx1,x1,strx2,x2=listeracines(P[2],P[1],delta) if isinstance(x1,RacineDegre2): x1=x1.simplifie() x2=x2.simplifie() racines=[x1,x2] str_racines=[strx1,strx2] P1="%s-%s"%(var,pTeX(x1)) P2="%s-%s"%(var,pTeX(x2)) factorisation=[[P1,P2]]#non simplifiée #Peut-on simplifier les parenthèses ? if x1.radicande==0 and (x1.numerateur<0 or x2.numerateur<0): P1=(X-x1)(var) P2=(X-x2)(var) factorisation.append([P1,P2]) return delta,simplrac,racines,str_racines,factorisation
def listeracines(a,b,delta,parentheses=False): '''renvoie racsimple,simplifie,formule_x1,x_1,formule_x2,x2''' '''avec x_1<x_2 si parenthese=True, renvoie deux booleens parenthesex1=True signifie qu'il faut mettre des parenthese autour de x1 On suppose delta >0 simplrac est True si racine de delta se simplifie''' a=int(a) b=int(b) parenthesex1=parenthesex2=True #par défaut #simplrac=True strx1="\\dfrac{-%s-\\sqrt{%s}}{2\\times %s}"%(pTeX(b),TeX(delta),pTeX(a)) strx2="\\dfrac{-%s+\\sqrt{%s}}{2\\times %s}"%(pTeX(b),TeX(delta),pTeX(a)) ##on a strx1<strx2 coeff,radicande=simplifie_racine(delta) #x1,x2 simplifiés ont une écriture fractionnaire donc parenthesex1=parenthesex2=False if coeff==1:#delta n'a pas de facteur carré, on ne peut rien simplifier rac_delta=radicalTeX(delta) simplrac=[False] else: if radicande==1: rac_delta=TeX(coeff) else: rac_delta=TeX(coeff)+radicalTeX(radicande) simplrac=[True,rac_delta] x1=RacineDegre2(-b,2*a,-1,delta) x2=RacineDegre2(-b,2*a,1,delta) if b==0: parenthesex1=(coeff*a>0) parenthesex2=(coeff*a<0) if a<0: strx1,strx2,x1,x2,parenthesex1,parenthesex2=strx2,strx1,x2,x1,parenthesex2,parenthesex1 if parentheses: return simplrac,strx1,x1,strx2,x2,parenthesex1,parenthesex2 else: return simplrac,strx1,x1,strx2,x2