LaTeX et calcul formel

Dans le but de créer des planches d’exercices relativement basiques (niveau Terminale) avec un corrigé pour des problèmes relativement simple, je vous propose une méthode, qui peut encore être améliorée.

L’essentiel se passe dans le fichier donné ici en exemple, Demonstration_avancee_Pythontex.pdf qui permet de produire Exercices_sur_les_limites.pdf

Le code Python présent dans le document, que vous pouvez exécuter avec isympy est

from __future__ import division
from sympy import *var('x')
funcslims = [('x**2 - 2*x - 3','+oo'),('-x**2 + 2*x + 3','-oo')]
print(r'\\begin{Exercise}[number=1,title={Vrai-faux}]')
for func,lim in funcslims:
  question = "Calculer la limite de ${}$ en ${}$".format(
    latex(eval(func)),latex(eval(lim)))
  print(r'\\Question')
  print(question)
  print(r'\\end{Exercise}')
  print(r'\\begin{Answer}')
  for func,lim in funcslims:
    print(r'\\Question')
# Décomposition en somme : on initialise une liste vide dans
#laquelle on ajoute les éléments de la somme
    funcn = []
    for k,v in enumerate(eval(func).as_coefficients_dict()):
      funcn.append(eval('{}*{}'.format(eval(func).as_coefficients_dict()[v],v)))
      print(r"L'expression se décompose comme la somme de", end=' ')
# On affiche les différents termes de cette somme.
      for i in range(len(funcn) - 1):
        print(r"${}$,".format(latex(funcn[i])), end=' ')
        print(r"et ${}$.".format(latex(funcn[-1])))
        limits_mon =  map(lambda x: Limit(x,'x',lim).doit(), funcn)
# On passe à la limite pour chacun des termes (dans la liste) Voir
# les effets de 'map' et 'lambda: '
# Si la somme des limites n'est pas indéterminée, alors on a le
# résultat et on l'affiche
        if sum(limits_mon) != nan:
          print(r'La somme des limites donne ici le résultat :')
          limit = Limit(func,'x',lim)
          reponse = "${} = {}$".format(latex(limit),latex(limit.doit()))
          print(reponse)
# Sinon on factorise
        else:
          print(r'La somme des limites ici conduit à une forme \\
              indéterminée. On ne peut conclure ainsi.')
          print(r'Factorisons, si cela est possible.')
# Si la factorisation «échoue», on «factorise par x != 0
          if factor(func) != func:
            print(r'Ici, on ne peut pas factoriser. Pour $x\eq 0$, on a :')
            x = Symbol('x',nonzero = true)
            funcx = expand(eval(func)/x)
            print(r'${} = x\\times\\left({}\\right)$.'.format(
                  latex(eval(func)),latex(funcx)))
            print(r'Le deuxième facteur de ce produit a pour limite')
            funcxn = []
            for k,v in enumerate(funcx.as_coefficients_dict()):
              funcxn.append(eval('{}*{}'.format(
                      funcx.as_coefficients_dict()[v],v)))
              limits_monx =  map(lambda f: Limit(f,'x',lim).doit(), funcxn)
              print(r'${}$.'.format(latex(Limit(funcx,x,lim).doit())))
              limit = Limit(func,'x',lim)
              reponse = "${} = {}$".format(latex(limit),latex(limit.doit()))
              print("Le produit nous donne donc", reponse)
print(r'\\end{Answer}')
Tagcloud
Mobilité Vocabulaire Terminale Randonnée Lycée Gestion 4ème LV Eure-et-Loir Parinux Citations AV Côte d'Or Bretagne Opinion Paris April Pédagogie LaTeX Val d'Oise Eure-et-Loire Windows Maintenance industrielle ISN V40 Alsace Opinions EV6 Mathématiques V51 BTS Seconde Coup de gueule Seine-Maritime Morvan Numérique Avenue Verte Courbes Ville Allier Loire Seine-Saint-Denis JavaScript Notes Val de Marne Terminale S Technique Perso Préparation VV11 RSA Docimologie 6ième Orne Vélo Probabilités Hauts-de-Seine 4ième Tutoriel Amis Voile Freinet Interopérabilité Python Circulation douce EV15 vacance Nièvre Seine et Marne