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
Randonnée Freinet Opinion Lycée Eure-et-Loire Seine-Maritime Perso Technique EV6 Pédagogie April Docimologie Terminale Amis Alsace BTS 6ième Notes Allier Seine et Marne Mathématiques Val d'Oise Val de Marne ISN AV Parinux Numérique Eure-et-Loir Courbes Circulation douce Vélo Orne vacance 4ème Côte d'Or Préparation Gestion Bretagne Morvan Mobilité Paris Voile Maintenance industrielle Coup de gueule Nièvre Avenue Verte EV15 Terminale S Seine-Saint-Denis Hauts-de-Seine Opinions LaTeX 4ième Seconde Interopérabilité Vocabulaire JavaScript V40 Ville Probabilités Citations Loire RSA LV Windows V51 Tutoriel VV11 Python