Cmath

Accueil > CmathOOoCAS > Présentation de CmathOOoCAS

Présentation de CmathOOoCAS

dimanche 14 août 2016, par Christophe Devalland

Introduction :

CmathOOoCAS=CmathOOo+CAS.
CAS est l’acronyme de « Computer Algebra System ». On peut le traduire par « système de calcul formel ». La définition qu’en donne Wikipédia est :
« Un système de calcul formel (computer algebra system ou CAS en anglais) est un logiciel qui facilite le calcul symbolique. La partie principale de ce système est la manipulation des expressions mathématiques sous leur forme symbolique. »

Présentation :

CmathOOoCAS est une extension développée en C++ qui s’appuie sur la librairie de calcul formel Giac pour étendre les capacités du tableur OOo-Calc afin de le rendre plus ouvert aux objets mathématiques que nous voulons manipuler.

En effet, les fonctions mathématiques incluses dans OOo-Calc ne savent travailler que sur des nombres décimaux et comme les calculatrices courantes, les limites du logiciel sont vite atteintes. Impossible par exemple de manipuler des nombres réels tels que
${\sqrt{2}}$
ou des expressions polynomiales.

CmathOOoCAS définit donc de nouvelles fonctions qui permettent de travailler sur des objets mathématiques formels. Comme un dessin vaut mieux qu’un long discours, voici une copie d’écran montrant une utilisation simple de CmathOOoCAS :

Sur cet exemple, a et b prennent successivement des valeurs entières, rationnelles, complexes et polynomiales. Pourtant, c’est la même formule qui sert pour tous les calculs de somme. Idem pour les produits. La première somme, par exemple, a été définie en tapant la formule =csomme(A2 ;B2). Les suivantes ont été obtenues en « recopiant » cette formule jusqu’en C5 grâce au petit carré noir visible dans le coin inférieur droit de la cellule.

On procède de même pour les produits en tapant =cproduit(A2 ;B2) dans D2 puis en « recopiant ».

De façon générale, lorsqu’une fonction existait dans OOo-Calc (comme ici SOMME et PRODUIT) CmathOOoCAS ajoute la même fonction précédée de la lettre C pour signifier "CAS". Ces nouvelles fonctions opèrent sur des objets formels. Ainsi, on trouvera, par exemple, dans CmathOOoCAS les fonctions : CLN, CEXP, CPUISSANCE, CSIN, CRACINE, etc...
Lorsqu’une fonction n’existait pas dans OOo-Calc, un nom explicite est attribué : SIMPLIFIER, FACTORISER, RESOUDRE, DERIVER, INTEGRER, etc... Plus de 80 fonctions de calculs formels sont disponibles grâce à CmathOOoCAS et il est possible d’en créer de nouvelles très facilement, comme décrit plus bas dans cette page.

Des activités utilisant les fonctions formelles de CmathOOoCAS sont présentes dans la documentation (accessible par le menu CmathOOoCAS une fois l’extension installée) et à cette page.

Éditeur de fonctions, ligne de commande

Une boîte de dialogue contenant un éditeur de fonctions ainsi qu’une ligne de commandes de calculs formels est accessible via un menu ou une icône de la barre de menu CmathOOoCAS.
- La ligne de commande est disponible dans la partie droite de cette boîte pour y taper des instructions comme dans Xcas :

PNG - 54 ko
La ligne de commande donne accès au calcul formel.

- La partie gauche est composée d’un éditeur permettant de créer ses propres fonctions, tel qu’on pourrait le faire dans Xcas. Une fois compilées à l’aide du bouton ad-hoc, la ligne de commande peut servir à tester le bon fonctionnement de ces fonctions :

PNG - 59.6 ko
Définition de la fonction syracuse(n) renvoyant l’entier qui suit n selon la règle suivante : si n est pair, l’entier suivant sera n/2, sinon ce sera 3n+1. Voir l’article consacré à la Conjecture de Syracuse pour en savoir plus.

- Plusieurs langages de programmation sont utilisables dans CmathOOoCAS :
Xcas, Maple, TI89, Mupad et « algorithmique » (proche du langage naturel). On sélectionne le langage de programmation grâce à la boite de dialogue « configuration du moteur de calcul formel ».
La fonction "syracuse" précédente est écrite en langage Xcas. On aurait pu aussi l’écrire ainsi :

Syntaxe Algorithmique Syntaxe MapleV Syntaxe TI89
fonction syracuse(n)
 si floor(n)<>n alors
   retourne "Entrez un entier"
 fsi
 si (n mod 2)==0 alors
   retourne n/2
 sinon
   retourne 3*n+1
 fsi
ffonction
syracuse:= proc(n)
if floor(n)!=n then
 RETURN("Entrez un entier")
fi;
if (n mod 2)==0 then
 RETURN(n/2)
else
 RETURN(3*n+1)
fi;
end
:syracuse(n)
:Func
:If floor(n)<>n Then
:  Return "Entrez un entier"
:EndIf
:If mod(n,2)=0 Then
:        Return n/2
:Else
:        Return 3*n+1
:EndIf
:EndFunc

Remarque : une fois compilées avec succès, les fonctions créées sont sauvegardées avec le document et seront disponibles pour une utilisation ultérieure.

- Ces nouvelles fonctions sont immédiatement disponibles dans le tableur :

PNG - 53.7 ko
La fonction syracuse, après compilation, est disponible pour le tableur. Elle sert ici à calculer le vol d’un entier défini en B2 (le vol d’un entier est la suite obtenue en partant de cet entier). On constate qu’on aboutit au cycle 4-2-1. Il semble que ce soit le cas pour tous les entiers positifs mais personne n’a réussi à le démontrer à ce jour.

- Les fonctions créées par l’utilisateur sont réutilisables dans toute autre fonction créée ultérieurement. Par exemple la fonction DureeVol renvoie le nombre d’étapes nécessaires à un vol pour atterrir à 1 :

PNG - 50.9 ko

et son utilisation dans le tableur :

PNG - 78 ko

- Ces nouvelles fonctions exploitent bien sûr toutes les possibilités apportées par le moteur de calcul formel et peuvent travailler dans $\mathbb{C}$, dans la limite des capacités de l’ordinateur.
On vérifie ci-dessous la réponse partielle donnée au défi lancé en l’an 2000 : « quel est le plus petit entier $n$ dont la durée de vol est 2000 ? » :

PNG - 53.1 ko
377060271667498687 a bien une durée de vol égale à 2000 mais on ne sait pas si ce nombre est le plus petit possible.

- Toutes les fonctions formelles de Xcas sont utilisables dans CmathOOoCAS. Par exemple la fonction calculant le nombre dérivé en $a$ :

permet d’obtenir avec une seule formule le tableau qui suit. On pourra alors conjecturer l’expression des fonctions dérivées usuelles :

PNG - 68.2 ko
Le calcul formel apporte un plus indéniable au tableur numérique mais ne réduit pas pour autant la place de la réflexion pendant une activité mathématique. Au contraire, on est souvent amené à se poser des questions différentes voire plus enrichissantes qu’auparavant. Avec un tableur numérique, cette activité classique nécessiterait le calcul dans chaque cellule du nombre $\textstyle{{m}={{ \frac{f{\left( a+h\right) }-f{\left( a\right) }}{h}}}}$ avec, par exemple, $\textstyle{{h}={{10}^{\textrm{-}12}}}$ pour approcher la valeur limite. Le tableur formel fait apparaître plusieurs avantages :
- on obtient des valeurs exactes, ce qui permet de conjecturer plus facilement l’expression de certaines fonctions dérivées (notamment celles de $\textstyle{{x}\mapsto{{ \frac{1}{x}}}}$, ${x}\mapsto{{\sqrt{x}}}$).
- du fait de certaines simplifications effectuées par le moteur de calcul formel ($- \sin {\left( -x\right) }$ est transformé en $ \sin {\left( x\right) }$), on est amené à réfléchir pour trouver une expression unique de la fonction dérivée de ${x}\mapsto{ \cos {\left( x\right) }}$. De même, les nombres dérivés de ${x}\mapsto{{\sqrt{x}}}$ ne sont pas écrits sous la forme habituelle.
- on est amené à utiliser ses connaissances des fonctions $\textstyle{{x}\mapsto{{ \frac{1}{x}}}}$ , ${x}\mapsto{{\sqrt{x}}}$ et ${x}\mapsto{ \ln x}$ pour justifier les "infinity" qui apparaissent en 0.

- Enfin, contrairement au tableur numérique, le tableur formel permet de valider les conjectures émises ; ici, en ajoutant simplement une colonne, la même formule calcule le nombre dérivé en $a$ :

PNG - 71.9 ko
un peu de calcul algébrique sera nécessaire pour retrouver l’expression usuelle de la fonction dérivée de ${x}\mapsto{{\sqrt{x}}}$

- Il est également possible de créer des fonctions renvoyant plusieurs objets, sous la forme d’une liste, nommée aussi vecteur :

PNG - 55.8 ko
Cette fonction « dichotomie » recherche un encadrement d’amplitude inférieur à epsilon d’une solution de l’équation ${f{\left( x\right) }}={0}$. La fonction renvoie un vecteur formé des bornes inférieures et supérieures de l’encadrement.

- Dans le tableur, CmathOOoCAS répartit les objets de cette liste en colonne, dans des cellules contiguës. Pour bénéficier de cette fonctionnalité, il faut valider la formule avec Control + Majuscule + Entrée, comme pour toutes les fonctions matricielles de OOo-Calc :

PNG - 55.1 ko
On obtient ici des encadrements de plus en plus fins du nombre $\pi$. En validant avec Control+Majuscule+Entrée, la fonction "dichotomie" remplit en même temps les lignes 3 et 4.

- Une fonction peut également renvoyer une matrice. CmathOOoCAS transformera cette matrice en tableau dans le tableur, à condition de valider la formule avec Control + Majuscule + Entrée. Par exemple, la fonction :

une fois compilée et suivie dans le tableur de la formule "=identite(4)" renverra la matrice identité de ${{{ \mathrm{M}}}_{4}}{\left( {\mathbb{R}}\right) }$.

Des activités utilisant l’éditeur de fonctions sont présentes dans la documentation (accessible par le menu CmathOOoCAS une fois l’extension installée). Voir aussi les activités "Le problème de Monty Hall" et "Somme de 3 entiers consécutifs" à cette page.

Accès aux fonctions de calcul formel dans le traitement de texte Writer :

Si vous utilisez l’extension CmathOOo, il est possible d’effectuer des calculs formel directement dans OOo-Writer.
Consultez cette page pour voir cette fonctionnalité en vidéo.
Voir aussi la documentation disponible dans le menu CmathOOoCAS après installation de l’extension.

Accès au téléchargement de CmathOOoCAS