Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
x_x2 = "$%s$," % (TeX(x2))
ligne_valeurs += [x2]
sign_x2 = ",0,%s" % (signe_a)
signes += [signe_a]
ligne_valeurs += [bornesup]
# Ne rien dire si une racine est égale à une borne
compare = [compare[0] - (x1 == borneinf) - (x2 == borneinf), compare[1] - (x1 == bornesup) - (x2 == bornesup)]
if sum(compare) == 2 :
# les deux racines sont à supprimer
cor.append(_("\\par Or $%s$ et $%s$ ne sont pas dans $%s$.") % (TeX(x1), TeX(x2), intervalle))
elif compare[0] == 1:
cor.append(_("\\par Or $%s$ n'est pas dans $%s$.") % (TeX(x1), intervalle))
elif compare[1] == 1:
cor.append(_("\\par Or $%s$ n'est pas dans $%s$.") % (TeX(x2), intervalle))
cor.append("Ainsi \\par")
str_valeurs = "{$%s$, %s %s $%s$}" % (TeX(borneinf), x_x1, x_x2, TeX(bornesup))
str_signes = "\\tkzTabLine{%s%s%s}" % (sign_x1, entreracines, sign_x2)
#===============================================================================
# str_valeurs = "\\tx{%s}& \\tx{%s}& %s %s & \\tx{%s}\\cr" % (var, TeX(borneinf), x_x1, x_x2, TeX(bornesup))
#
# str_signe = "\\tx{%s(%s)}&%s %s %s&\\cr" % (nomP, var, sign_x1, entreracines, sign_x2)
#===============================================================================
cor.append("\\begin{tikzpicture}\n\\tkzTabInit[espcl=2.5]")
cor.append(str_variables)
cor.append(str_valeurs)
cor.append(str_signes)
cor.append(r'\end{tikzpicture}\par')
cor.append("\\\\")
if Q[1] != 1:
x0 = eval(priorites('-%r*Fraction(1)/%r' % (Q[0], Q[1]))[-1][0])
if isinstance(x0, (Fraction, RacineDegre2)):
x1 = x0.simplifie()
else:
x1 = x0
cor.append("%s&=%s" % (var, Fraction(-Q[0], Q[1])))
cor.append("\\\\")
if isinstance(x0, (Fraction, RacineDegre2)) and (not isinstance(x1, (Fraction, RacineDegre2)) or x0.d != x1.d):
cor.append("%s&=%s" % (var, TeX(x1)))
cor.append("\\\\")
cor.pop(-1)
cor.append("\\end{align*}")
cor.append(_(u"Or $%s$ n'est pas dans l'intervalle $[%s~;~%s]$ et comme $%s$ est un quotient de polynômes, alors $%s$ est définie et dérivable sur $I$.") % \
(TeX(VI), Intervalle[0], Intervalle[1], nomf, nomf))
exo.append(_(u"\\item Déterminer $%s'(%s)$ pour tout $%s\in[%s~;~%s]$.") % \
(nomf, var, var, Intervalle[0], Intervalle[1]))
cor.append(_(u"\\item Déterminer $%s'(%s)$ pour tout $%s\in[%s~;~%s]$.") % \
(nomf, var, var, Intervalle[0], Intervalle[1]))
cor.append(u"$$%s'(%s)=%s=%s$$" % (nomf, var, f_derivee, f_derivee_simplifiee))
exo.append(_(u"\\item En déduire le sens de variations de $%s$ sur $I$.") % (nomf))
cor.append(_(u"\\item En déduire le sens de variations de $%s$ sur $I$.\\par") % (nomf))
if numerateur_simplifie.degre_max == 0:
cor.append(_(u" Comme $%s$ est un carré, il est toujours positif.\\\\") % (denominateur))
f_xmin = eval(priorites('%r*Fraction(1)/%r' % (P(Intervalle[0]), Q(Intervalle[0])))[-1][0])
f_xmax = eval(priorites('%r*Fraction(1)/%r' % (P(Intervalle[1]), Q(Intervalle[1])))[-1][0])
if isinstance(f_xmin, (Fraction, RacineDegre2)): f_xmin = f_xmin.simplifie()
if isinstance(f_xmax, (Fraction, RacineDegre2)): f_xmax = f_xmax.simplifie()
f_xmin = TeX(f_xmin)
f_xmax = TeX(f_xmax)
if numerateur_simplifie[0] < 0:
cor.append("= %s $$" % (TeX(limite_simple)))
cor.append("Pour $%s=%s$, on a $%s=%s" % (var, TeX(VI), P, TeX(P(VI))))
if P(VI) < 0:
limites = ["-\\infty", "+\\infty"]
cor.append("<0$.\\\\")
elif P(VI) > 0:
limites = ["+\\infty", "-\\infty"]
cor.append(">0$.\\\\")
else:cor.append("$.\\\\")
# Impossible car on test (a1*b2/a2 - b1)!=0
VIplus = "\\substack{%s\\to %s\\\\%s>%s}" % (var, fTeX(VI), var, fTeX(VI))
VImoins = "\\substack{%s\\to %s\\\\%s<%s}" % (var, fTeX(VI), var, fTeX(VI))
if Q[1] < 0:
cor.append(_("De plus, $%s>0$ si $%s<%s$") % (Q, var, TeX(VI)))
cor.append(_("et $%s<0$ si $%s>%s$.\\\\") % (Q, var, TeX(VI)))
else:
cor.append(_("De plus, $%s<0$ si $%s<%s$") % (Q, var, TeX(VI)))
cor.append(_("et $%s>0$ si $%s>%s$.\\\\") % (Q, var, TeX(VI)))
cor.append(u"$$\\lim_{%s}\\dfrac{%s}{%s}=%s $$" % (VImoins, P, Q, limites[0]))
cor.append(u"$$\\lim_{%s}\\dfrac{%s}{%s}=%s $$" % (VIplus, P, Q, limites[1]))
exo.append(_(u"\\item Dresser le tableau de variations de $%s$ sur $\\mathcal{D}_{%s}$.") % (nomf, nomf))
cor.append(_(u"\\item Dresser le tableau de variations de $%s$ sur $\\mathcal{D}_{%s}$.\\par") % (nomf, nomf))
if numerateur_simplifie.degre_max == 0:
cor.append(_(u" Comme $%s$ est un carré, il est toujours positif.\\\\") % (denominateur))
f_xmin = eval(priorites('-%r*Fraction(1)/%r' % (P[1], Q[1]))[-1][0])
if isinstance(f_xmin, (Fraction, RacineDegre2)):
f_xmin = f_xmin.simplifie()
exo = ["\\exercice",
"\\begin{enumerate}"]
cor = ["\\exercice*",
"\\begin{enumerate}"]
nomP = "P"
for i in range(len(Poly)):
P = Poly[i]
borneinf, bornesup = intervalles[i]
if borneinf == float("-inf") and bornesup == float("inf"):
TeXintervalle = "\\mathbb R"
else:
if borneinf != float("-inf"):
TeXintervalle = "["
else:
TeXintervalle = "]"
TeXintervalle += "%s~;~%s" % (TeX(borneinf), TeX(bornesup))
if bornesup == float("inf"):
TeXintervalle += "["
else:
TeXintervalle += "]"
exo.append(_(u"\\item Étudier le signe du polynôme $%s=%s$ sur $I=%s$.") % (nomP, P, TeXintervalle))
cor.append(_(u"\\item Étudier le signe du polynôme $%s=%s$ sur $I=%s$.\\par") % (nomP, P, TeXintervalle))
delta, dummy, racines, dummy, dummy = factorisation_degre2(P, factorisation=False)
redaction_racines(P, nomP, var, cor)
tableau_de_signe(P, nomP, delta, racines, cor, borneinf, bornesup, detail=False)
exo.append("\\end{enumerate}")
cor.append("\\end{enumerate}")
return exo, cor
def tableau_de_signe(P, nomP, delta, racines, cor, borneinf=float("-inf"), bornesup=float("+inf"), detail=False):
'''Étudie le signe d'un polynôme de degré2'''
''' ne fonctionne pas si on a pas borneinf < x1< x2 0] # Ca donne bien ce qu'on veut...
signes = []
str_variables = "{$%s$/1, $%s\\,(x)$/1}" % (var, nomP)
if delta < 0:
cor.append(_("Comme $\\Delta <0$, $%s(%s)$ ne s'annule pas et est toujours du signe de $a$") % (nomP, var))
cor.append(_("Ainsi "))
str_valeurs = "{$%s$,$%s$}" % (TeX(borneinf), TeX(bornesup))
str_signes = "\\tkzTabLine{,%s}" % signe_a
# str_valeurs = "\\tx{%s}&\\tx{%s}&& \\tx{%s}\\cr" % (var, TeX(borneinf), TeX(bornesup))
# str_signe = "\\tx{%s(%s)}&&\\tx{%s}&\\cr" % (nomP, var, signe_a)
signes = [signe_a]
ligne_valeurs = [borneinf, bornesup]
elif delta == 0:
cor.append(_("Comme $\\Delta =0$, $%s(%s)$ s'annule une seule fois pour $%s_0=%s$ et est toujours du signe de $a$.\\par") % (nomP, var, var, racines[0]))
if racines[0] < borneinf or racines[0] > bornesup:
if borneinf != float("-inf"):
intervalle = "["
else:
intervalle = "]"
intervalle += "%s~;~%s" % (TeX(borneinf), TeX(bornesup))
if bornesup == float("inf"):
intervalle += "["
else:
cor.append(TeX_division(E, (X - x0)) + "")
E2, reste = E / (X - x0)
cor.append(_("\\item On doit maintenant factoriser le polynome $%s_2=%s$\\\\") % (nomE, E2))
delta, simplrac, racines, str_racines, factorisation = factorisation_degre2(E2, factorisation=True)
cor = redaction_factorisation(E2, nomP=nomE + "_2", exo=[], cor=cor)[1]
cor.append("\\par")
cor.append(_("On en conclue donc que $%s=") % (nomE))
# final = 0
if x0 == 0:
P0 = E.var
else:
P0 = "\\left(%s\\right)" % (X - x0)
if E[3] == -1:
cor.append("-")
elif E[3] != 1:
cor.append(TeX(E[3]))
if delta < 0:
# P1 = factorisation[-1][0]
E_factorise = "%s\\times%s$" % (P0, E2)
elif delta == 0:
P1 = factorisation[-1][0]
E_factorise = "%s\\times{\\left(%s\\right)}^2$" % (P0, P1)
else:
P1 = factorisation[-1][0]
P2 = factorisation[-1][1]
E_factorise = "%s\\left(%s\\right)\\left(%s\\right)$" % (P0, P1, P2)
cor.append(E_factorise)
exo.append("\\end{enumerate}")
cor.append("\\end{enumerate}")
return exo, cor
x_x1 = "$%s$," % (TeX(x1))
ligne_valeurs += [x1]
sign_x1 = ",%s,0" % (signe_a)
signes += [signe_a]
if 2 in compare:
entreracines = ",%s" % (signe_a)
signes += [signe_a]
else:
entreracines = ",%s" % (signe_moinsa)
signes += [signe_moinsa]
if compare[1] >= 1 or compare[0] == 2:
x_x2 = sign_x2 = ""
else:
x_x2 = "$%s$," % (TeX(x2))
ligne_valeurs += [x2]
sign_x2 = ",0,%s" % (signe_a)
signes += [signe_a]
ligne_valeurs += [bornesup]
# Ne rien dire si une racine est égale à une borne
compare = [compare[0] - (x1 == borneinf) - (x2 == borneinf), compare[1] - (x1 == bornesup) - (x2 == bornesup)]
if sum(compare) == 2 :
# les deux racines sont à supprimer
cor.append(_("\\par Or $%s$ et $%s$ ne sont pas dans $%s$.") % (TeX(x1), TeX(x2), intervalle))
elif compare[0] == 1:
cor.append(_("\\par Or $%s$ n'est pas dans $%s$.") % (TeX(x1), intervalle))
elif compare[1] == 1:
cor.append(_("\\par Or $%s$ n'est pas dans $%s$.") % (TeX(x2), intervalle))
cor.append("Ainsi \\par")
ligne_factorisation = "$$%s(%s)" % (nomP, var)
for etape in factorisation:
ligne_factorisation += " = "
if P[2] != 1:
ligne_factorisation += "%s \\times " % (TeX(P[2]))
ligne_factorisation += "{\\left(%s\\right)}^2" % (etape[0])
ligne_factorisation += "$$"
cor.append(ligne_factorisation)
else:
cor.append(_(u"On peut donc écrire "))
ligne_factorisation = "$$%s(%s)" % (nomP, var)
for etape in factorisation:
ligne_factorisation += " = "
if P[2] != 1:
ligne_factorisation += "%s \\times " % (TeX(P[2]))
if len(etape) == 1:
ligne_factorisation += etape[0]
else:
ligne_factorisation += "\\left(%s\\right)\left(%s\\right)" % (etape[0], etape[1])
ligne_factorisation += "$$"
cor.append(ligne_factorisation)
return exo, cor
cor.append("\\begin{tikzpicture}\n\\tkzTabInit[espcl=2.5]")
cor.append(str_variables[:-1] + ', $%s\\,(x)$/1.5}' % nomP)
cor.append(str_valeurs)
cor.append(str_signes)
var_de_P = "\\tkzTabVar{%s/$%s$, " % (["-", "+"]["-" == signes[0]], TeX(P(ligne_valeurs[0]))) # +/$%s$/, -/$%s$/}" % (f_xmin, f_xmax))
#=======================================================================
# var_de_P = "\\tx{%s}& \\%s{\\rnode{neu0}{%s}}&&" % (nomP, ["txb", "txh"]["-" == signes[0]], TeX(P(ligne_valeurs[0])))
#=======================================================================
compteur = 0
for i in range(0, len(signes) - 1):
if signes[i] == '+':
if 0 and signes[i + 1] == "+":
var_de_P += "&&"
else:
compteur += 1
var_de_P += "+/$%s$/, " % TeX(P(ligne_valeurs[i + 1]))
#===========================================================
# var_de_P += "\\txh{\\rnode{neu%s}{%s}}&&" % (compteur, TeX(P(ligne_valeurs[i + 1])))
#===========================================================
else:
if 0 and signes[i + 1] == "-":
var_de_P += "&&"
else:
compteur += 1
var_de_P += "-/$%s$/, " % TeX(P(ligne_valeurs[i + 1]))
#===========================================================
# var_de_P += "\\txb{\\rnode{neu%s}{%s}}&&" % (compteur, TeX(P(ligne_valeurs[i + 1])))
#===========================================================
compteur += 1
if signes[-1] == "+":
var_de_P += "+/$%s$/} " % TeX(P(ligne_valeurs[-1]))
#===================================================================
facteur2 += var
else:
facteur2 += TeX(c) + var
b = int(sqrt(pol2[0]))
facteur2 += " \\times %s +" % (TeX(b))
else:
# a²-b²
facteur2 += "-"
b = int(sqrt(-(pol2[0])))
facteur2 += u"%s^2" % (TeX(b))
if a1 != 1:
facteur2 += "\\big]"
factorisation.append(facteur2)
facteur3 = ""
if a1 != 1:
facteur3 += TeX(a1)
sgns = sgns / 2
if sgns: # (cx-b)² ou (cx+b)²
liste_racines = [Fraction(-(sgns)) * b / c]
facteur3 += "{(%s)}^2" % (c * X + sgns * b)
else: # (cx-b)(cx+b)
liste_racines = [Fraction(-1) * b / c, Fraction(1) * b / c]
facteur3 += "(%s)(%s)" % (c * X + b, c * X - b)
factorisation.append(facteur3)
if racines:
return factorisation, liste_racines
return factorisation