Aller au contenu

Jour 21 : emacs sait compter

·526 mots·3 mins·
eeame
Auteur
eeame

Aujourd'hui, c'est une belle journée pour faire des calculs avec emacs 😉.

Dans l’ étape 19 , on a vu que l’on pouvait utiliser des blocs de code. On va poursuivre cette approche et réaliser des calculs dans org-mode.

Calc
#

Expérience emacs
#

Emacs possède un mode pour faire des calculs; les possibilités sont énormes (cf. Emacs calculator). Il s’agit d’une calculatrice RPN avancée, qui requière une certaine pratique…

Pour faire \(12\times 56\), on effectue la séquence suivante:

12
56
*
Figure 1 : interface de calc

La notation RPN et la pile sont très pratiques : elles éliminent le besoin de parenthèses, mais la courbe d’apprentissage n’est pas facile… On peut aussi saisir des expressions usuelles…

Expérience casual
#

Récemment, un paquetage se propose de simplifier l’usage de calc, en proposant un menu.

Pour faire \(30\times \cos 45\)

  1. M-x calc
  2. 30
  3. 45
  4. C-o : menu casual
  5. t : (menu trigonométrie
  6. c : cosinus
  7. *
  8. q : pour sortir.

Expérience org-mode
#

exemple 1 : calculs simples
#

24
3
'/
30*cos(45)

exemple 2 : résoudre une équation
#

fsolve(x*2+x=4,x)
x = 1.33333333333

exemple 3 : résoudre un système linéaire d’équation de manière formelle
#

fsolve([x + y = a, x - y = b],[x,y])

Plus d’exemples
#

ici

Expérience math-at-point
#

Il s’agit d’une sur-couche à calc-mode.

Essentiellement deux commandes:

  1. M-x math-at-point-expression Permet de faire un calcul et de copier le résultat dans le kill-ring.
    1. M-x math-at-point-expression
    2. 30*cos(45)
    3. C-y pour coller le résultat dans le tampon.
  1. M-x math-at-point Permet de faire de petits calculs directement dans le tampon et fonctionne même avec les formules LaTeX! (Comme le mode embeded de calc).
    1. Sélectionne 12*13
    2. C-c q affiche le résultat dans la zone d’écho (en bas)
    3. Sélectionne 12*45
    4. C-u C-c q effectue le calcul dans le tampon

Les approches précédentes sont soit peu ergonomiques soit limitées…

Faire du calcul formel dans emacs
#

Avec xcas
#

Xcas est un logiciel de calcul formel écrit par Bernard Parisse de l’université de Grenoble. Les commandes sont en partie francisées et la documentation est exhaustive, en français et de grande qualité.

C’est mon préféré… et celui que je vais détailler.

J’ai écrit un module1 pour babel https://github.com/vincek59/ob-giac voici les exemples de la documentation. Le défaut: pour l’instant ne s’exporte pas très bien…

Exemple 1
#

  • Factorisation

    factoriser(x^2+2*x+1+(x+1)*(x-7))
    
  • Développement

    developper((x+3)^3)
    
  • Résoudre des équations ou des systèmes d’équation

    resoudre(3*x-7=2*(x+7),x)
    
    DelVar(a)
    resoudre(3*x-a=2*(x+7))
    
    resoudre([3x+y-8=7,x-2y=1],[x,y])
    
  • Afficher des graphes

    plot(sin(x))
    

    Je le reconnais c’est le point faible d’xcas. On obtient de meilleur résultat avec geogebra, maxima ou matplotlib….

Exemple 2
#

  • Avec plusieurs lignes

    f(x):=exp(x)*cos(x)+x^3
    g:=unapply(diff(f(x),x),x)
    g(x)
    

    Note que seul le résultat de la dernière ligne est affichée

  • Sortie en latex

    f(x):=exp(x)*cos(x)+x^3
    g:=unapply(diff(f(x),x),x)
    g(x)
    
  • Sortie latex combinée avec org-fragtog-mode

    f(x):=exp(x)*cos(x)+x^3
    g:=unapply(diff(f(x),x),x)
    g(x)
    

    \(\mathrm{e}^{x} \cos x-\mathrm{e}^{x} \sin x+3 x^{2}\)

Exemple 3
#

  • Avec des variables en entête.

    c:=integrer(b/(x^2+a),x,0,+infinity)
    
  • Réutilisation d’un bloc

    -3*pi*sqrt(5)/10
    
  • Avec des variables nommées dans org-mode

    3

    partfrac(x^n/(1+x^2)^3,x)
    

Exemple 4
#

 lancers(n):={
                local t=[0,0,0,0,0,0];
            local j,l;
            for (j:=1 ; j<=n ; j++) {
                l:=rand(6);
                                t[l]:=t[l]+1;
                }
            return t;
 }

lancers(12000)

Avec Sage
#

À installer https://github.com/sagemath/sage-shell-mode

M-x run-sage

Avec maxima
#

À installer https://github.com/emacsmirror/maxima

M-x maxima


  1. Nécessite une version récente d’xcas (>=1.9) ↩︎