Accueil > CmathOOoCAS > Présentation de CmathOOoCAS

Présentation de CmathOOoCAS

jeudi 20 juillet 2023, par Christophe Devalland

CmathOOoCAS en résumé

CmathOOoCAS est une extension écrite en C++ en 2009 pour la suite bureautique OpenOffice.org. C’est un logiciel libre développé par Christophe Devalland et publié sous Licence publique générale GNU version 3.
CmathOOoCAS s’appuie sur le moteur de calcul de XCAS (appelé Giac) pour étendre les capacités du tableur Calc de LibreOffice (mais pas seulement) et le rendre apte à manipuler des expressions mathématiques.
En effet, les fonctions mathématiques incluses dans 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 permettant de travailler sur des objets mathématiques formels et de calculer en multi-précision.
CmathOOoCAS utilise maintenant des fonctions disponibles uniquement dans LibreOffice ce qui la rend incompatible avec OpenOffice.org et nécessite au moins la version 7.1 de LibreOffice.

L’extension

Une fois l’extension installée (téléchargement de CmathOOoCAS) et LibreOffice redémarré, vous obtiendrez dans Calc un menu "CmathOOoCAS" et une barre d’outils supplémentaires :


 Le menu CmathOOoCAS donne accès, entre autres, à la liste des fonctions ajoutées à Calc, à la configuration de l’extension, à l’éditeur de fonctions et à la documentation.
 La barre d’outils donne des raccourcis vers, entre autres, la configuration de l’extension, l’éditeur de fonctions et la documentation.

Les fonctionnalités

Voici une utilisation simple de CmathOOoCAS :


Sur cet exemple, a et b prennent successivement des valeurs entières, rationnelles, complexes et polynomiales.
C’est la même formule qui sert pour tous les calculs de somme.
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 Calc (comme ici SOMME et PRODUIT) CmathOOoCAS ajoute la même fonction précédée de la lettre C comme "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 Calc, un nom explicite lui 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 puisqu’il est possible de programmer ses propres fonctions en langage Python et de les utiliser dans le tableur ou le traitement de texte, comme n’importe quelle fonction prédéfinie. Cela étend les capacités de LibreOffice au calcul formel et au calcul numérique en multi-précision.

Utilisation des nouvelles fonctions

Il est conseillé d’activer l’AutoSaisie de Calc, accessible grâce au menu Outils pour n’avoir qu’à saisir les premières lettres d’une fonction. Par exemple, sur l’écran suivant, pour calculer le produit des deux cellules A1 et B1, il suffit de taper dans la cellule C1 =cpr pour que les fonctions commençant par ces trois lettres s’affichent :

Valider avec la touche entrée pour confirmer la fonction CPRODUIT puis cliquer sur la cellule A1, appuyer sur la touche CTRL et cliquer sur la cellule A2 et enfin valider avec entrée :

L’éditeur de fonctions et la 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 le menu CmathOOoCAS ou l’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 :

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. Une fois compilées à l’aide du bouton ad-hoc, la ligne de commande peut servir à tester le bon fonctionnement de ces fonctions :

Voir l’article consacré à la Conjecture de Syracuse pour en savoir plus.


 Plusieurs langages de programmation sont utilisables dans CmathOOoCAS : Python, XCAS et « algorithmique ».
La fonction syracuse précédente est écrite en langage Python. Il était possible de l’écrire autrement :

Syntaxe Python Syntaxe XCAS Syntaxe Algorithmique
def syracuse(n):
  if n % 2 == 0:
      return (n//2)
    else:
      return (3*n+1)
syracuse(n):={
  if ((n mod 2)==0) {
    return(n/2);}
  else {
    return(3*n+1);}
}
fonction syracuse(n)
  si (n mod 2)==0 alors
    retourne n/2
  sinon
    retourne 3*n+1
  fsi
ffonction

Utilisation dans le tableur des fonctions définies par l’utilisateur

 Une fois compilées, les fonctions créées sont sauvegardées avec le document et sont immédiatement disponibles dans le tableur :

La fonction syracuse 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 aboutit au cycle 4-2-1, ce qui semble être le cas pour tous les entiers positifs (non démontré à 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 :

et son utilisation dans le tableur :


 Ces nouvelles fonctions exploitent les possibilités apportées par le moteur de calcul formel Giac et peuvent travailler dans $\mathbb{C}$. Grâce aux capacités de calculs de CmathOOoCAS sur des entiers longs, on peut répondre partiellement au défi lancé en l’an 2000 : « Quel est le plus petit entier $n$ dont la durée de vol est 2000 ? » :

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$, tel qu’il est défini en mathématiques

nbderive(mafonction,x,a):={
	local f:=x->mafonction;
	return(limite((f(x)-f(a))/(x-a),x,a));
}

permet d’obtenir avec une seule formule le tableau qui suit. Il peut servir à conjecturer l’expression des fonctions dérivées usuelles.


 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 formellement le nombre dérivé en $a$ :

Les fonctions vectorielles

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

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 Calc :

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.


 Si on préfère une écriture du vecteur en ligne plutôt qu’en colonne, la fonction TRANSPOSE pourra être utilisée. Reprenons l’exemple de la suite de Syracuse et définissons la fonction VOL(n) renvoyant pour un entier n, le vecteur (durée,altitude) du vol de cet entier.

def vol(n):
  d, a, u = 0, n, n
  while u > 1:
    if u % 2 == 0:
      u = u // 2
    else:
      u = 3 * u + 1
    d += 1
    a = max(a, u)
  return (d,a)


 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 :

identite(n):={
  return(idn(n))}

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) }$.

Accès au calcul formel dans le traitement de texte Writer

Avec l’extension CmathOOo qui permet de formater des expressions mathématiques, il est possible d’effectuer des calculs formels directement dans 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 calcul formel dans le module Basic

Les développeurs voulant utiliser les fonctions de CmathOOoCAS ou de XCAS peuvent le faire dans LibreOffice Basic de cette manière :

REM  *****  BASIC  *****

Sub Main
monCalcul=CmathOOoCAS("factor(x^2-1)")
End Sub

Function CmathOOoCAS(Expression as string) as string
	Dim mgr as Object, AddinCAS as Object
	mgr=getProcessServiceManager()
	AddinCAS=mgr.createInstance("com.sun.star.sheet.addin.CmathOOoCASAddin")
	CmathOOoCAS=AddinCAS.cas(Expression)
End Function

La fonction CmathOOoCAS accepte toute expression respectant la syntaxe Giac et renverra une chaîne de caractères contenant le résultat après évaluation. Dans cet exemple, la variable monCalcul contiendra (x-1)*(x+1).

Quelques exemples

En plus des exemples présentés sur cette page, des activités utilisant les fonctions formelles de CmathOOoCAS sont accessibles à cette page.

Portfolio