def quest_fonctions_rationnelles_sur_R(): nomf=['f','g','h','k'][randrange(4)] var=['t','x'][randrange(2)] X=Polynome({1:1},var) #intervalle pour les racines entières ou fractionnaire rac_min=-9 rac_max=9 b1=b2=a1=a2=0 while b1==0 or b2==0 or a1==0 or a2==0 or a1*(-float(b2)/a1)+b1==0 or (a1*b2/a2 - b1)==0: #(a1*b2/a2 - b1)==0 on teste que la racine de Q n'annule pas P donc on ne peut pas simplifier b1=randint(rac_min,rac_max) b2=randint(rac_min,rac_max) a1=randint(-5,5) a2=randint(-5,5) P=a1*X+b1 Q=a2*X+b2 borneinf=float("-inf") bornesup=float("+inf") Intervalle=[borneinf,bornesup] TeXintervalle="\\mathbb R" #dérivée numerateur="%s\\times%s-%s\\times%s"%(P.derive().TeX(parenthese=True),Q.TeX(parenthese=True), P.TeX(parenthese=True),Q.derive().TeX(parenthese=True)) numerateur_simplifie=(P.derive()*Q-P*Q.derive()).simplifie() VI=(-Q[0]*Fractions(1)/Q[1]).simplifie() denominateur=u"%s^2"%(Q.TeX(parenthese=True)) f_derivee="\\dfrac{%s}{%s}"%(numerateur,denominateur) f_derivee_simplifiee="\\dfrac{%s}{%s}"%(numerateur_simplifie,denominateur) exo=[u"\\item On considère la fonction $%s$ définie par $%s(%s)=\\dfrac{%s}{%s}$."%(nomf,nomf,var,P,Q), "\\begin{enumerate}"] cor=[u"\\item On considère la fonction $%s$ définie par $%s(%s)=\\dfrac{%s}{%s}$."%(nomf,nomf,var,P,Q), "\\begin{enumerate}"] exo.append(u"\\item Déterminer l'ensemble de définition $\\mathcal{D}_{%s}$ de $%s$."%(nomf,nomf)) cor.append(u"\\item Déterminer l'ensemble de définition $\\mathcal{D}_{%s}$ de $%s$.\par"%(nomf,nomf)) cor.append(u" La fonction rationnelle $%s$ est définie et dérivable en $%s$ si $%s\\neq0$."%(nomf,var,Q(var))) cor.append("\\begin{align*}\n\ %s&=0\\\\\n\ %s&=%s\\\\\n\ %s&=%s\\\\\n\ %s&=%s\n\ \\end{align*}"%(Q,(Q-Q[0]),TeX(-Q[0]),var,TeX(-Q[0]*Fractions(1)/Q[1]),var,TeX(VI))) cor.append(u"On en déduit que $\\mathcal{D}_{%s}=\\mathcal{D'}_{%s}=]-\\infty~;~%s[\cup]%s~;~+\\infty[$."%\ (nomf,nomf,TeX(VI),TeX(VI))) exo.append(u"\\item Déterminer $%s'(%s)$ pour tout $%s\in\\mathcal{D'}_{%s}$."%\ (nomf,var,var,nomf)) cor.append(u"\\item Déterminer $%s'(%s)$ pour tout $%s\in\\mathcal{D'}_{%s}$."%\ (nomf,var,var,nomf)) cor.append(u"$$%s'(%s)=%s=%s$$"%(nomf,var,f_derivee,f_derivee_simplifiee)) exo.append(u"\\item Déterminer les limites de $%s$ aux bornes de $\\mathcal{D}_{%s}$."%(nomf,nomf)) cor.append(u"\\item Déterminer les limites de $%s$ aux bornes de $\\mathcal{D}_{%s}$."%(nomf,nomf)) limite = P[1]/Q[1] limite_simple = limite.simplifie() cor.append("$$\\lim_{%s\\to -\\infty}\\dfrac{%s}{%s}= "%(var,P,Q)) cor.append("\\lim_{%s\\to -\\infty}\\dfrac{%s%s}{%s%s} = %s" %(var,coeffTeX(P[1]),var,coeffTeX(Q[1]),var,limite)) if limite.n == limite_simple.n: cor.append("$$") else: cor.append("= %s $$"%(TeX(limite_simple))) cor.append("$$\\lim_{%s\\to +\\infty}\\dfrac{%s}{%s}= "%(var,P,Q)) cor.append("\\lim_{%s\\to +\\infty}\\dfrac{%s%s}{%s%s} = %s" %(var,coeffTeX(P[1]),var,coeffTeX(Q[1]),var,limite)) if limite.n == limite_simple.n: cor.append("$$") else: 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))) 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])) 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 = TeX((P[1]/Q[1]).simplifie()) f_xmax = f_xmin if numerateur_simplifie[0]<0: cor.append(u" De plus, $%s<0$ donc pour tout $%s$ de $I$, $%s'(%s)<0$. Ainsi, on obtient "%\ (numerateur_simplifie[0],var,nomf,var)) cor.append("$$\\tabvar{") cor.append("\\tx{%s}&\\tx{%s}&&&\\tx{%s}&&&\\tx{%s}\\cr"%(var,TeX(Intervalle[0]),TeX(VI),TeX(Intervalle[1]))) cor.append("\\tx{%s'(%s)}&&\\tx{-}&&\\dbt &&\\tx{-}&\\cr"%(nomf,var)) cor.append("\\tx{%s}&\\txh{%s}&\\fd&\\txb{-\\infty}&\\dbt&\\txh{+\\infty}&\\fd&\\txb{%s}\\cr"%(nomf,f_xmin,f_xmax)) cor.append("}$$") else: cor.append(u" De plus, $%s>0$ donc pour tout $%s$ de $I$, $%s'(%s)>0$."%\ (numerateur_simplifie[0],var,nomf,var)) cor.append("$$\\tabvar{") cor.append("\\tx{%s}&\\tx{%s}&&&\\tx{%s}&&&\\tx{%s}\\cr"%(var,TeX(Intervalle[0]),TeX(VI),TeX(Intervalle[1]))) cor.append("\\tx{%s'(%s)}&&\\tx{+}&&\\dbt&&\\tx{+}&\\cr"%(nomf,var)) cor.append("\\tx{%s}&\\txb{%s}&\\fm&\\txh{+\\infty}&\\dbt&\\txb{-\\infty}&\\fm&\\txh{%s}\\cr"%(nomf,f_xmin,f_xmax)) cor.append("}$$") else: cor.append(u" Je ne sais pas faire avec un tel numérateur $%s$."%(numerateur_simplifie)) exo.append("\\end{enumerate}") cor.append("\\end{enumerate}") return exo,cor
def quest_variation_degre3(borneinf=float("-inf"),bornesup=float("+inf")): '''Question qui propose l'étude du sens de variation d'un polynôme de degré 3''' Intervalle=[borneinf,bornesup] if borneinf==float("-inf") and bornesup==float("+inf"): TeX_intervalle="\\mathbb R" else: TeX_intervalle="\\left[%s~;~%s\\right]"%(TeX(borneinf),TeX(bornesup)) #intervalle pour les racines entières ou fractionnaire a=3*randint(1,3) rac_min=-9 rac_max=9 #denominateur maximmum pour les racines fractionnaires denom_max=denom1=12 #Valeurs absolues maximales des coefficients d'un polynôme quelconque abs_a=6 abs_b=10 abs_c=10 #X est le polynome P=x pour faciliter la construction des polynômes, inconnues=['x','y','z','t'] nom_poly=['P','Q','R','S'] var="x" X=Polynome({1:1},var=var) nomP=["f","g","h","k","p","q"][randrange(6)] Pprime=poly_racines_entieres(rac_min,rac_max,X,a1=a) P=Pprime.primitive()+randint(-abs_c,abs_c) P=P.simplifie() exo=[u"\\item Étudier le sens de variations de $%s$ définie par $%s(x)=%s$ sur $%s$." % (nomP,nomP,P(var),TeX_intervalle)] cor=[u"\\item Étudier le sens de variations de $%s$ définie par $%s(x)=%s$ sur $%s$." % (nomP,nomP,P(var),TeX_intervalle)] cor.append("\\par $%s'(x)=%s$\\\\" % (nomP,Pprime(var))) cor.append(u"Je dois étudier le signe de $%s'(%s)$ qui est un polynôme du second degré.\\par"%(nomP,var)) delta,simplrac,racines,str_racines,factorisation=factorisation_degre2(Pprime,factorisation=False) #cor=redaction_factorisation(Pprime,nomP+"'",exo=[],cor=cor)[1] #cor.pop(-5) redaction_racines(Pprime,nomP+"'",var,cor) str_signe,str_valeurs,signes,ligne_valeurs=tableau_de_signe(Pprime,nomP+"'",delta,racines,cor,borneinf,bornesup,detail=True) #cor.append(tab_signe) if (delta<=0 and P[3]<0): cor+=u"Donc la fonction polynômiale $%s$ est décroissante sur $%s$." %(nomP,TeX_intervalle) elif (delta<=0 and P[3]>0): cor.append(u"Donc la fonction polynômiale $%s$ est croissante sur $%s$."%(nomP,TeX_intervalle)) else: cor.append("On obtient ainsi le tableau de variation de $%s$."%nomP) [x1,x2]=racines #macro=[["txb","txh"],["fm","fd"]] 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+="\\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+="\\txb{\\rnode{neu%s}{%s}}&&"%(compteur,TeX(P(ligne_valeurs[i+1]))) compteur+=1 if signes[-1]=="+": var_de_P+="\\txh{\\rnode{neu%s}{%s}}\\cr"%(compteur,TeX(P(ligne_valeurs[-1]))) else: var_de_P+="\\txb{\\rnode{neu%s}{%s}}\\cr"%(compteur,TeX(P(ligne_valeurs[-1]))) cor.append("$$ \\tabvar{\n %s\n %s\n %s}$$"%\ (str_valeurs,str_signe,var_de_P)) for i in range(1,compteur+1): cor.append("\\ncline[nodesep=0.15,linewidth=0.5pt]{->}{neu%s}{neu%s}"%(i-1,i)) if borneinf==float("-inf"): cor.append(u"$$\\lim_{%s\\to %s} %s= \\lim_{%s\\to %s} %s%s^3=%s $$ "%(var,"-\\infty",P,var,"-\\infty",P[3],var,TeX(P(float("-inf"))))) if bornesup==float("+inf"): cor.append(u"$$\\lim_{%s\\to %s} %s= \\lim_{%s\\to %s} %s%s^3=%s $$ "%(var,"+\\infty",P,var,"+\\infty",P[3],var,TeX(P(float("inf"))))) return exo,cor
def quest_fonctions_rationnelles(): nomf=['f','g','h','k'][randrange(4)] var=['t','x'][randrange(2)] X=Polynome({1:1},var) #intervalle pour les racines entières ou fractionnaire rac_min=-9 rac_max=9 b1=b2=a1=a2=0 while b1==0 or b2==0 or a1==0 or a2==0: b1=randint(rac_min,rac_max) b2=randint(rac_min,rac_max) a1=randint(-5,5) a2=randint(-5,5) P=a1*X+b1 Q=a2*X+b2 borneinf=-10 bornesup=10 #Je veux que f soit définie et dérivable sur I=Intervalle if (-Q[0]/Q[1])>=borneinf and (-Q[0]/Q[1])<=bornesup: if ((-Q[0]/Q[1])-borneinf)<(bornesup-(-Q[0]/Q[1])): Intervalle=[int(round(-Q[0]/Q[1]))+1,bornesup] else: Intervalle=[borneinf,int(round(-Q[0]/Q[1]))-1] #dérivée numerateur="%s\\times%s-%s\\times%s"%(P.derive().TeX(parenthese=True),Q.TeX(parenthese=True), P.TeX(parenthese=True),Q.derive().TeX(parenthese=True)) numerateur_simplifie=(P.derive()*Q-P*Q.derive()).simplifie() denominateur=u"%s^2"%(Q.TeX(parenthese=True)) f_derivee="\\dfrac{%s}{%s}"%(numerateur,denominateur) f_derivee_simplifiee="\\dfrac{%s}{%s}"%(numerateur_simplifie,denominateur) VI=(-Q[0]*Fractions(1)/Q[1]).simplifie() exo=[u"\\item On considère la fonction $%s$ définie sur $I=[%s~;~%s]$ par $%s(%s)=\dfrac{%s}{%s}$."%(nomf,Intervalle[0],Intervalle[1],nomf,var,P,Q), "\\begin{enumerate}"] cor=[u"\\item On considère la fonction $%s$ définie sur $I=[%s~;~%s]$ par $%s(%s)=\dfrac{%s}{%s}$."%(nomf,Intervalle[0],Intervalle[1],nomf,var,P,Q), "\\begin{enumerate}"] exo.append(u"\\item Justifier que $%s$ est définie et dérivable sur $I$."%(nomf)) cor.append(u"\\item Justifier que $%s$ est définie et dérivable sur $I$."%(nomf)) cor.append(u" Pour déterminer la valeur interdite, on doit résoudre $%s=0$."%(Q(var))) cor.append("\\begin{align*}") cor.append("%s&=0\\\\"% Q) cor.append("%s&=%s"%((Q-Q[0]),TeX(-Q[0]))) cor.append("\\\\") if Q[1]!=1: x0=-Q[0]*Fractions(1)/Q[1] x1=x0.simplifie() cor.append("%s&=%s"%(var,TeX(-Q[0]*Fractions(1)/Q[1]))) cor.append("\\\\") if x0.denominateur!=x1.denominateur: 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=TeX((Fractions(1)*P(Intervalle[0])/Q(Intervalle[0])).simplifie()) f_xmax=TeX((Fractions(1)*P(Intervalle[1])/Q(Intervalle[1])).simplifie()) if numerateur_simplifie[0]<0: cor.append(u" De plus, $%s<0$ donc pour tout $%s$ de $I$, $%s'(%s)<0$. Ainsi, on obtient "%\ (numerateur_simplifie[0],var,nomf,var)) cor.append("$$\\tabvar{") cor.append("\\tx{%s}&\\tx{%s}&&\\tx{%s}\\cr"%(var,TeX(Intervalle[0]),TeX(Intervalle[1]))) cor.append("\\tx{%s'(%s)}&&\\tx{-}&&\\cr"%(nomf,var)) cor.append("\\tx{%s}&\\txh{%s}&\\fd&\\txb{%s}\\cr"%(nomf,f_xmin,f_xmax)) cor.append("}$$") else: cor.append(u" De plus, $%s>0$ donc pour tout $%s$ de $I$, $%s'(%s)>0$."%\ (numerateur_simplifie[0],var,nomf,var)) cor.append("$$\\tabvar{") cor.append("\\tx{%s}&\\tx{%s}&&\\tx{%s}\\cr"%(var,TeX(Intervalle[0]),TeX(Intervalle[1]))) cor.append("\\tx{%s'(%s)}&&\\tx{+}&&\\cr"%(nomf,var)) cor.append("\\tx{%s}&\\txb{%s}&\\fm&\\txh{%s}\\cr"%(nomf,f_xmin,f_xmax)) cor.append("}$$") else: cor.append(u" Je ne sais pas faire avec un tel numérateur $%s$."%(numerateur_simplifie)) exo.append("\\end{enumerate}") cor.append("\\end{enumerate}") return exo,cor