Systèmes informatiques
Fermer ×

Logiciels mathématiques

Le tableur

Un tableur utilise des feuilles de calcul qui sont des tableaux où chaque cellule peut intégrer des valeurs numériques mais surtout des expressions de calcul à partir d'autres cellules individuelles ou ensemble de cellules. Il existe de nombreux logiciels tableurs, on présentera ici quelques logiciels tels que sc tableur en mode texte, gnumeric, calligra sheets de la suite Calligra ou encore libreoffice calc le tableur de la suite logicielle Libreoffice.

A B C D
1
2
3
4
5
6
7
8

Une feuille de calcul est composée de lignes identifiées par un numéro et de colonnes identifiées par une lettre de l'alphabet. Chaque élément, nommé cellule, est identifié par le couple lettre,chiffre, comme par exemple B2 pour la cellule de la deuxième ligne et de la deuxième colonne.

Chaque cellule peut contenir du texte, une valeur numérique, ou une expression de calcul numérique en fonctions d'autres cellules. Une expression de calcul peut être composée d'opérateurs d'addition, soustraction, multiplication, division ou de fonctions mathématiques comme la racine carrée, l'exponentielle, ... . Cette expression de calcul commence par le signe =.

Les références aux cellules, peuvent être une seule cellule, une liste de références séparées par un ; ou encore une suite de cellule séparées par : .

Exemples d'expression de calcul :

Il faut, bien évidement, que l'expression d'une cellule ne fasse pas référence à une cellule qui contient une référence à cette première cellule. On ne peut pas écrire dans la cellule C2 l'expression =B1+C1, et dans la cellule B1 l'expression =C2/C3, dans ce cas on a une expression circulaire qui génère une erreur.

On va utiliser une feuille de calcul pour effectuer le calcul du résultat d'une élection fictive présentée au chapitre sur la proportionnalité :

Tableau affichant les résultats (ce que l'on voit dans un tableur)
A B C D
1 Inscrits 1190
2 Résultats institutionnels Représentativité
3 Votants 500
4 Blancs et nuls 100 8,40%
5 Candidat 1 201 50,25% 16,89%
6 Candidat 2 199 49,75% 16,72%
7 Suffrages exprimés 400 33,61%
8 Abstention 690 57,98% 57,98%
Tableau montrant les expressions de calcul
A B C D
1 Inscrits 1190
2 Résultats institutionnels Représentativité
3 Votants 500
4 Blancs et nuls 100 =B4/B1
5 Candidat 1 201 =B5/B7 =B5/B1
6 Candidat 2 199 =B6/B7 =B6/B1
7 Suffrages exprimés =B3-B4 =B7/B1
8 Abstention =B1-B3 =B8/B1 =B8/B1

L'affichage en pourcentage est un format d'affichage pas de calcul qui reste une division. La colonne "résultats institutionnels" montrent les résultats qui sont pris en compte. La colonne "représentativité" prend en compte l'ensemble les résultats tels qu'ils sont comptabilisés dans les bureaux de votes, à un détail près, le fait que les bulletins blancs et nuls sont comptabilisés séparément.

Un autre avantage du tableur est qu'il est possible de présenter les résultats sous la forme de divers graphiques.
Voir des exemples de représentations graphiques

L'affichage en pourcentage est un format d'affichage pas de calcul qui reste une division. La colonne "résultats institutionnels" montrent les résultats qui sont pris en compte. La colonne "représentativité" prend en compte l'ensemble les résultats tels qu'ils sont comptabilisés dans les bureaux de votes, à un détail près, le fait que les bulletins blancs et nuls sont comptabilisés séparément.

Un deuxième exemple du chapitre sur la proportionnalité avec la facture d'électricité
Voir la feuille de calculs et la répartition des dépenses
A B C D E F G H
1 Désignation Consommation annuelle (kWh) PUHT PTHT TVA 5,5 % TVA 20 % PTTC Répartition
2 Abonnement 112,45 € 6,18 € 118,63 € 34,01 %
3 Consommation 1232 0,11 € 135,52 € 27,10 € 162,62 € 46,62 %
4 Taxes et Contributions (TCFE et CSPE) 1232 0,03 € 36,96 € 7,39 € 44,35 € 12,71 %
5 Contribution (CTA) 22,00 € 1,21 € 23,21 € 6,65 %
6 Total 306,93 € 7,39 € 34,50 € 348,82 €

Tracer des courbes et de figures

Les tableurs permettent de tracer des courbes à partir d'une suite de données, on présente ici des logiciels dédiés au tracé de courbes, d'histogrammes. On continue de présenter des logiciels libres tels que geogebra ou gnuplot.

Figures et courbes avec Geogebra

Pour apprendre à utiliser ce logiciel il est conseillé de suivre les tutoriels disponibles ici.

On va utiliser le logiciel pour étudier le triangle et le théorème de Thalès et de Pythagore. On va également utiliser ce logiciel pour tracer les courbes représentatives des fonctions au chapitre plus de mathématiques.

Pour tous les graphiques de geogebra, la grille est au pas de 5mm, ce qui correspond à une feuille à petits carreaux.

On trace un exemple de triangle avec le logiciel. Après avoir placé tous les points, on ajoute la hauteur, les mesures des côtés et de la hauteur, les angles ainsi que la surface.

On peut vérifier la valeur de la surface : S=ch2=242=12 ou encore avec l'autre formule : S=p(p-a)(p-b)(p-c) avec p=a+b+c28,145 ce qui donne S≈11,99 en utilisant une suite de calculs approchés.

On peut vérifier la somme des angles qui vaut 68,9+41,6+69,4=179,9 ≈ 180, le théorème de Pythagore avec la relation b2=AH2+h2=4,52+42=36.25 et b2=6.022=36,2404

On peut également vérifier les règles de trigonométries :
AHb=cos(α)0,748
hb=sin(α)0,664
hAH=tan(α)0,888

Bien sûr, il est possible de faire d'autres calculs, avec l'autre triangle rectangle

En rappelant que la médiatrice d'un segment AB est la droite perpendiculaire à ce segment qui passe en son milieu, on va tracer les trois médiatrices des côtés du triangle.

On positionne maintenant le point (O) d'intersection de ces trois médiatrices, on peut vérifier que ce point O est le centre d'un cercle qui passe par les trois sommets du triangle, on parle de cercle circonscrit.

Les dimensions du triangle sont identiques à celle du triangle de la figure précédente qui n'est pas tout à fait isocèle, ce qui explique que la médiatrice du segment BC ne passe par par le point A.

On modifie le triangle afin qu'il soit rectangle en C, puis on trace à nouveau les médiatrices, on remarque que le point d'intersection est situé au milieu du segment AB. Ce segment est donc, dans ce cas, le diamètre du cercle circonscrit.

Cette figure vérifie le second théorème de Thalès, déjà présenté au chapitre sur la géométrie.

En rappelant que la bissectrice est une demi-droite qui partage un angle en deux angles égaux.

Sur le triangle, on va donc tracer les bissectrices des trois angles. Ces trois droites se croisent au même point O qui est le centre du cercle inscrit.

Sur cette figure, on trace une droite parallèle au côté BC, on va pouvoir ainsi vérifier le premier théorème de Thalès sur les triangles semblables.

Les relations du théorèmes de Thalès sont vérifiées : ADb=AEc=DEa0,68

On trace la courbe d'équation f(x)=x3+6x2+16x+15

Le point A(-2,-1) est le point d'inflexion de la courbe qui représente un changement de concavité de la courbe, c'est à dire un changement de sens de courbure de la courbe.

Ce point peut se calculer à partir de l'équation : f''(x)=0 avec f'' qui est la dérivée seconde.

  • f(x)=x3+6x2+16x+15
  • f'(x)=3x2+12x+16
  • f''(x)=6x+12

f''(x)=0 donne la solution x=-2 et f(-2)=-1 qui correspond au coordonnées du point A.

On trace la courbe d'équation f(x)=-x3-6x2-8x-1

Sur cette courbe on a une tangente horizontale aux points 1 et B ce qui correspond à un minimum et un maximum dans ce cas.

L'équation de la tangente à une courbe en un point x0 est une droite d'équation : y=f'(x0)(x-x0)-f(x0) . La pente de cette tangente est la valeur de la dérivée au point x0 : f(x0).

La tangente horizontale correspond donc à une pente nulle, c'est à dire là où la dérivée de la fonctions s'annule, on va donc chercher les racines de la dérivée : f'(x)=-3x2-12x-8=0

on calcule Δ'=36-24=12 qui donne deux racines réelles qui sont x1,2=-6±123, qui donne les valeurs x1≈-3,15 et x2≈-0.85

Ces deux valeurs de x correspondent respectivement aux abscisses des points A et B qui correspondent aux deux tangentes horizontales à la courbe.

On trace les fonctions trigonométriques f(x)=sin(x) et g(x)=cos(x)

On peut vérifier les propriétés des fonctions sinus et cosinus :

  • cos(x+π2)=-sin(x)
  • sin(x+π2)=cos(x)
  • cos(x+π)=-cos(x)
  • sin(x+π)=-sin(x)

En sachant que la fonction dérivée représente la pente en chaque point de la fonction, on également vérifier les dérivées des fonctions sinus et cosinus

  • sin'(x)=cos(x)
  • cos'(x)=-sin(x)

Courbes et histogrammes avec Gnuplot

Le logiciel gnuplot permet de tracer des courbes à partir d'une suite de commandes qui peut être saisie en ligne ou bien enregistrées dans un fichier. L'ensemble des commandes sont disponibles sur la documentation de gnuplot en version en ligne ou téléchargeable en PDF.

Les graphiques peuvent être affichés à l'écran ou bien enregistrés dans un fichier. Les principales commandes nécessaires au tracé d'une courbe sont :

On va tracer les fonctions présentées dans le paragraphe précédent sur geogebra.

reset
# définition de la fonction
a=1
b=6
c=16
d=15
f(x)=a*x**3 + b*x**2 + c*x + d
# valeurs maximales de l'axe x
xmin=-6.5
xmax=2.5
# initialisation de la sortie sur l'écran
set terminal X11 0
# ou bien dans un fichier
#set terminal png size 1200,1200
#set output "fonctiondegre3.png"
# titre du graphique (attention aux accents)
set title "Fonction degre 3"
# etiquette axe x et y
set xlabel "x"
set ylabel "f(x)"
# ajout d'une grille
set grid
# définition des maximum d'affichage de l'axe x
set xr [xmin:xmax]
# affichage de la fonction avec un trait
# de largeur 2 pixels et de couleur bleue
plot f(x) lw 2 lc "blue"
# dans un fichier script pour attendre
# la fermeture manuelle de la fenêtre
pause -1

La commande set, suivie de paramètres, permet de définir la configuration du graphique

  • terminal permet de déterminer le terminal pour l'affichage graphique :
    • X11 : ouvre une fenêtre graphique sous linux, 0 pour la première fenêtre, 1 pour la deuxième, ...
    • png : sauvegarde le graphique dans un fichier png e taille défini par les valeurs su paramètre size
  • output définit le nom du fichier pour le paramètre png
  • title : définit le titre du graphique
  • xlabel : définit le nom de l'axe x
  • ylabel : définit le nom de l'axe y
  • grid : affiche une grille
  • xr : définit les valeurs minimales et maximales de l'axe x (yr pour l'axe y)

La commande plot permet d'afficher une ou plusieurs corube

  • f(x) : nom de la fonction à afficher
  • lw suivi de la valeur de l'épaisseur du tracé de la courbe
  • lc
  • suivi de la chaîne qui définit la couleur ou bien de la valeur de la couleur au format "#RRVVBB" en hexadécimal

La commande pause suivi d'un temps en secondes, définit le temps d'affichage de la fenêtre graphique, -1 correspond à un temps infini.

Voir le tracé de la deuxième fonction
reset

a=-1
b=-6
c=-8
d=-1
f(x)=a*x**3 + b*x**2 + c*x + d
xmin=-8
xmax=3.5

set terminal X11 0
set title "Fonction degre 3"
set xlabel "x"
set ylabel "f(x)"
set grid
set xr [xmin:xmax]

plot f(x) lw 2 lc "blue"

pause -1
Voir le tracé des fonctions sinus et cosinus
reset
f(x)=sin(x)
g(x)=cos(x)

xmin=0
xmax=2*pi

set terminal X11 0
set title "fonctions cosinus et sinus"
set xlabel "x"
set ylabel "f(x)"
set grid

set xr [xmin:xmax]
plot f(x) lw 2 lc "blue",g(x) lw 2 lc "red"

pause -1
Voir l'histogramme des résultats des élections présentés dans le paragraphe tableur
reset

set terminal X11 0
set title "Resultats d'elections en %"

set grid
set style fill pattern 1
set style histogram clustered
set style data histograms
set ylabel "%"

plot "elections.txt" using 3:xtic(1) lw 3 lc "#008000" t "%" axes x1y1

pause -1

Calcul mathématique formel

Ce type de logiciel permet de faire des calculs mathématiques littéral comme le calcul de dérivée de fonction, de résoudre des équations ou des systèmes d'équations. On va s'intéresser ici au logiciel libre maxima. Il est possible de télécharger maxima pour les différentes plateformes.

Les possibilités de maxima sont importantes, on va donc présenter quelques exemples.

Opérations sur les polynômes

On va calculer les exemples du chapitre qui traite des opérations sur les polynômes.

On vérifie les multiplications des polynômes avec la commande expand(expression); avec expression qui est le produit de polynômes

(%i5) expand((3*x^3-x^2+4*x+5)*(x+1));
          4      3      2
(%o5)  3 x  + 2 x  + 3 x  + 9 x + 5		
				
(%i8) expand((2*x^3-x^2+3*x+4)*(2*x+1));
          4      2
(%o8)  4 x  + 5 x  + 11 x + 4	
				

On vérifie les divisions des polynômes

(%i13) divide(x^5-x^4-x^3+3*x^2-2*x,x^2-x+1);
          3
(%o13)  [x  - 2 x + 1, x - 1]
				
(%i14) divide(x^4+4*x^3+6*x^2+4*x+1,x+1);
          3      2
(%o14)  [x  + 3 x  + 3 x + 1, 0]
				

Racines des polynômes

On va calculer les exemples du chapitre qui traite du calcul des racines des polynômes. On utilise la commande allroots(expression); où expression représente le polynôme. Les résultats numériques peuvent être approchés.

(%i15) allroots(x^3+6*x^2+11*x+6);
(%o15) [x = - 0.9999999999999995, x = - 2.0, x = - 3.000000000000001]
				
(%i16) allroots(x^3+3*x^2+3*x+1);
(%o16) [x = 1.260920966343442E-5 %i - 0.9999874799859038, 
        x = (- 1.260920966343442E-5 %i) - 0.9999874799859038, 
        x = - 1.000025040028192]
				

Les racines permettent d'obtenir la factorisation que l'on peut également obtenir avec la commande factor(expression); où expression représente le polynôme à factoriser.

(%i11) factor(x^3+6*x^2+11*x+6);
(%o11)   (x + 1) (x + 2) (x + 3)
				
(%i12) factor(2*x^3+10*x^2+16*x+8);
                        2
(%o12) 2 (x + 1) (x + 2)
				

Dans le cas de racines complexes conjuguées, la commande allroots fournit les valeurs des racines complexes tandis que la commande factor donne le polynôme de degré 2 qui correspond à ces racines complexes.

(%i18) allroots(x^3+2*x^2+2*x+1);
(%o18) [x = 0.8660254037844405 %i - 0.5000000000000003, 
        x = (- 0.8660254037844405 %i) - 0.5000000000000003, 
        x = - 0.9999999999999993]
				
(%i17) factor(x^3+2*x^2+2*x+1);
                  2
(%o17)  (x + 1) (x  + x + 1)
				

Remarque : la commande factor permet également d'effectuer une décomposition d'un nombre en produit de facteurs premiers.

(%i3) factor(333);
                  2
(%o3)            3  37
(%i4) factor(242);
                 2
(%o4)        2 11
				
(%i1) factor(490);
                      2
(%o1)            2 5 7
(%i2) factor(2520);
                  3  2
(%o2)            2  3  5 7
				

Calcul de dérivée de fonction

On peut calculer la dérivée d'une fonction exprimée sous sa littérale sans valeur numérique avec la commande diff(expression,variable); où expression représente la fonction et variable le symbole de la variable dans l'expression de la fonction.

(%i1) diff(a*x^2+b*x+c,x);
(%o1)            2 a x + b
(%i4) diff((x+a)*(x+b),x);
(%o4)            2 x + b + a
				
(%i2) diff(sin(x),x);
(%o2)             cos(x)
(%i3) diff(sin(2*x+1),x);
(%o3)             2 cos(2 x + 1)
				

Etudes de fonctions

On utilise ici un exemple du chapitre qui traite du tracé des fonctions. On étudie la fonction polynomiale : f(x)=-x3-6x2-8x-1

On calcule les limites avec la commande limit(expression,variable,limite); où expression représente la fonction, variable le nom utilisé pour représenter la variable dans l'expression et limite la valeur de la limite à calculer qui vaut minf pour -∞ et inf pour +∞.

On calcule la dérivée avec la commande diff(expression,variable); présentée auparavant.

On calcule les racines de la dérivée pour le tableau de variation avec la commande allroots déjà étudiée auparavant.

On évalue la fonction aux racines de la dérivée, en définissant une fonction f(x):=expression; pour ensuite l'utiliser calculer les valeurs particulières de x.

On utilise plot2d(nom de la fonction,intervale x); où le nom de la fonction est celui déjà défini pour calculer les valeurs et l'intervalle les valeurs minimales et maximales de la variable de la fonction.

Calcul des limites, de la dérivée, des racines de la dérivée, de la valeur de la fonction pour ces points, puis tracé de la courbe.

(%i2) limit(-x^3-6*x^2-8*x-1,x,minf);
(%o2)                               inf
(%i1) limit(-x^3-6*x^2-8*x-1,x,inf);
(%o1)                               minf
(%i3) diff(-x^3-6*x^2-8*x-1,x);
             2
(%o3)  (- 3 x ) - 12 x - 8
(%i4) allroots(-3*x^2-12*x-8);
(%o4)   [x = - 0.8452994616207484, x = - 3.154700538379252]
(%i5) f(x):=-x^3-6*x^2-8*x-1;
                    3       2
(%o5)   f(x) := (- x ) - 6 x  + (- 8) x - 1
(%i6) f(-0.845);
(%o6)     2.079201125
(%i7) f(-3.15);
(%o7)     - 4.079125000000001
(%i11)  plot2d(f(x),[x,-7,3]);
(%o11)    [/tmp/maxout24094.gnuplot_pipes]
				

Courbe tracée avec la fonction plot2d de maxima.

Résolution de systèmes d'équations

On propose de résoudre les systèmes du chapitre système d'équations. Pour cela on utilise la commande solve([liste equations],[liste variables]) ou liste equations représente la liste des équations séparées par des virgules et liste des variables est la liste des variables séparées par des virgules

(%i1) solve([5*x-2*y-z=8,-4*x+y-2*z=-8,x+2*y-z=-4],[x,y,z]);
(%o1)                                   [[x = 1, y = - 2, z = 1]] 
				
(%i2) solve([-3*x-5*y+2*z=-3,4*x+4*y-4*z=-4,-x+y+2*z=7],[x,y,z]);
solve: dependent equations eliminated: (3)
                                      3 %r1 - 8        %r1 - 6
(%o2)                           [[x = ---------, y = - -------, z = %r1]]
                                          2               2
				

Calcul matriciel

On propose d'effectuer les inversions de matrices du chapitre sur les matrices. On va commencer par définir une matrice avec la commande nom:matrix([ligne],[ligne],...) où les coefficients de chaque ligne sont représentés entre crochets. En suite on inverse la matrice en utilisant la notation puissance qui est composés de deux symboles ^^ suivi de la puissance -1. Il faut noter que le logiciel est capable de calculer une expression littérale composée uniquement de symboles.

(%i3) A:matrix([a,b],[c,d]);
                                                 [ a  b ]
(%o3)                                            [      ]
                                                 [ c  d ]
(%i4) A^^-1;
                                       [      d             b     ]
                                       [  ---------   - --------- ]
                                       [  a d - b c     a d - b c ]
(%o4)                                  [                          ]
                                       [       c           a      ]
                                       [ - ---------   ---------  ]
                                       [   a d - b c   a d - b c  ]
				
(%i5) A:matrix([0,-1,4],[0,5,-3],[-3,-3,-3]);
                                            [  0   - 1   4  ]
                                            [               ]
(%o5)                                       [  0    5   - 3 ]
                                            [               ]
                                            [ - 3  - 3  - 3 ]
(%i6) A^^-1;
                                           [   8     5     1 ]
                                           [ - --  - --  - - ]
                                           [   17    17    3 ]
                                           [                 ]
                                           [  3     4        ]
(%o6)                                      [  --    --    0  ]
                                           [  17    17       ]
                                           [                 ]
                                           [  5     1        ]
                                           [  --    --    0  ]
                                           [  17    17       ]
				

Calcul scientifique

Les logiciels de calcul scientifique permettent de faire des calculs numériques très complexes. On présente ici le logiciel libre octave et aussi scilab créé par l'INRIA.

Opérations sur les polynômes

On propose d'effectuer les opérations sur les polynômes. En général les polynômes sont représentés par des vecteurs lignes.

Addition

Avec Scilab les coefficients sont représentés par puissances croissantes. La fonction poly(vecteur,variable,type) permet de créer un objet polynôme où le vecteur correspond aux coefficients ou bien aux racines du polynôme, la variable est le nom donné à la variable (ex 'x') et enfin la lettre 'c' pour préciser que les valeurs du vecteur correspondent aux coefficients du polynôme. Enfin disp() permet d'afficher le polynôme.

Le code du fichier poly_addition.sce est :

p1=poly([5 4 -1 3],'x','c');
disp(p1);
p2=poly([1 1 2],'x','c');
disp(p2);
S=p1+p2;
disp(S);
				
Après exécution, on obtient :
exec('poly_addition.sce',-1)

  5 +4x -x² +3x³

  1 +x +2x²

  6 +5x +x² +3x³ 
				
Un point virgule en fin de ligne n'a pas de forcément de signification.

Avec Octave les coefficients sont représentés par puissances décroissantes. Les vecteurs doivent avoir la même taille, il faut donc compléter avec des 0. La fonction polyout(vecteur) permet d'afficher le vecteur sous la forme d'un polynôme. Le code du fichier poly_addition.m est :

p1=[3 -1 4 5];
p2=[0 2 1 1];
polyout(p1,'x')
polyout(p2,'x')
S=p1+p2;
polyout(S,'x')
				
Après exécution, on obtient :
>> poly_addition

3*x^3 - 1*x^2 + 4*x^1 + 5
0*x^3 + 2*x^2 + 1*x^1 + 1
3*x^3 + 1*x^2 + 5*x^1 + 6
>>
				
Un point virgule en fin de ligne évite que le résultat soit affiché.

Multiplication

Avec Scilab, le ficier poly_multiplication.sce est :

p1=poly([5 4 -1 3],'x','c');
disp(p1);
p2=poly([1 1],'x','c');
disp(p2);
S=p1*p2;
disp(S);
				
Après exécution, on obtient :
exec('poly_multiplication.sce', -1)

  5 +4x -x² +3x³

  1 +x

  5 +9x +3x² +2x³ +3x⁴
				

Avec Octave, pour effectuer, il faut utilise la commande conv qui effectue le produit de convolution des coefficients. Le code du fichier poly_multiplication.m est :

p1=[3 -1 4 5];
p2=[1 1];
polyout(p1,'x')
polyout(p2,'x')
P=conv(p1,p2);
polyout(P,'x')
				
Après exécution, on obtient :
>> poly_multiplication

3*x^3 - 1*x^2 + 4*x^1 + 5
1*x^1 + 1
3*x^4 + 2*x^3 + 3*x^2 + 9*x^1 + 5
>>
				

racines des polynômes

On propose d'effectuer les calculs des racines sur les polynômes.

Avec Scilab, les racines s'obtiennent avec la commande roots(polynome) appliquée directement au polynôme. Le code du fichier poly_racines.sce est :

p=poly([6 11 6 1],'x','c');
disp(p1);
r=roots(p);
disp(r);
				
Après exécution, on obtient :
exec('poly_racines.sce', -1)

  5 +4x -x² +3x³

  -3. + 0.i
  -2. + 0.i
  -1. + 0.i
				

Avec Octave, les racines s'obtiennent avec la fonction roots(vecteur) où vecteur représente toujours les coefficients du polynôme. Le code du fichier poly_racines.m est :

p=[1 6 11 6];
polyout(p,'x')
r=roots(p)
				
Après exécution, on obtient :
>> poly_racines

1*x^3 + 6*x^2 + 11*x^1 + 6
r =

  -3.0000
  -2.0000
  -1.0000

>>
				

Calcul matriciel

On propose d'effectuer les inversions de matrices du chapitre sur les matrices.

Produit matriciel

Avec Scilab. Le code du fichier matrice_produit.sce est :

A=[1 5 -1 0;-1 -1 -3 5;5 0 -1 5]
B=[2 4;-5 -3;-3 0;-5 1]
P=A*B
disp('A=',A)
disp('B=',B)
disp('P=AB=',P)					
				
Après exécution, on obtient
exec('matrice_produit.sce', -1)

  "A="

   1.   5.  -1.   0.
  -1.  -1.  -3.   5.
   5.   0.  -1.   5.

  "B="

   2.   4.
  -5.  -3.
  -3.   0.
  -5.   1.

  "P=AB="

  -20.  -11.
  -13.   4. 
  -12.   25.
				

Avec Octave. Le code du fichier matrice_produit.m est :

A=[1 5 -1 0;-1 -1 -3 5;5 0 -1 5]
B=[2 4;-5 -3;-3 0;-5 1]
P=A*B
				
Après exécution, on obtient
>> matrice_produit

A =

   1   5  -1   0
  -1  -1  -3   5
   5   0  -1   5

B =

   2   4
  -5  -3
  -3   0
  -5   1

P =

  -20  -11
  -13    4
  -12   25

>>
				

Déterminant de matrices

Avec Scilab, on utilise la fonction det(matrice). Le code du fichier matrice_determinant.sce est :

A=[-5 0 -4;-5 4 -1;1 -5 -5]
d=det(A)
disp('A=',A)
disp('d=',d)
				
Après exécution, on obtient
exec('matrice_determinant.sce', -1)

  "A="

  -5.   0.  -4.
  -5.   4.  -1.
   1.  -5.  -5.

  "d="

   41.000000
				

Avec Octave, on utilise également la fonction det(matrice). Le code du fichier matrice_determinant.m est :

A=[-5 0 -4;-5 4 -1;1 -5 -5]
d=det(A)
				
Après exécution, on obtient
>> matrice_determinant

A =

  -5   0  -4
  -5   4  -1
   1  -5  -5

d =  41.000
				

Inversion de matrices

Avec Scilab. Ici on utilise la fonction inv(matrice), mais il également possible d'utiliser la puissance A^-1. Le code du fichier matrice_inversion.sce est :

A=[0 5 2;2 -2 5;-3 -3 1]
B=inv(A)
disp('A=',A)
disp('B=',B)
				
Après exécution, on obtient
exec('matrice_inversion.sce', -1)

  "A="

   0.   5.   2.
   2.  -2.   5.
  -3.  -3.   1.

  "B="

  -0.1192661   0.1009174  -0.266055 
   0.1559633  -0.0550459  -0.0366972
   0.1100917   0.1376147   0.0917431
				
On peut remarquer que l'on obtient des valeurs numériques approchées.

Avec Octave. La fonction inv(matrice) peut être également remplacée par la puissance A^-1. Le code du fichier matrice_inverse.m est :

A=[0 5 2;2 -2 5;-3 -3 1]
B=inv(A)
				
Après exécution, on obtient
>> matrice_inversion

A =

   0   5   2
   2  -2   5
  -3  -3   1

B =

  -0.119266   0.100917  -0.266055
   0.155963  -0.055046  -0.036697
   0.110092   0.137615   0.091743
				

Résolution de systèmes d'équations

On propose de résoudre les systèmes du chapitre système d'équations. La résolution d'un système d'équation de la forme Ax=b se résout avec une division à gauche de la forme A\b, cette écriture est équivalente à x=A-1b qui est l'expression de la solution du système.

Avec Scilab. Le code du fichier systeme_equations.sce est :

A=[5 -2 -1;-4 1 -2;1 2 -1]
b=[8;-8;-4]
x=A\b
disp('A=',A)
disp('b=',b)
disp('x=',x)
				
Après exécution, on obtient
>> exec('systeme_equations.sce', -1)

  "A="

   5.  -2.  -1.
  -4.   1.  -2.
   1.   2.  -1.

  "b="

   8.
  -8.
  -4.

  "x="

   1.
  -2.
   1.
				

Avec Octave. Le code du fichier systeme_equations.m est :

A=[5 -2 -1;-4 1 -2;1 2 -1]
b=[8;-8;-4]
x=A\b
				
Après exécution, on obtient
>> systeme_equations

A =

   5  -2  -1
  -4   1  -2
   1   2  -1

b =

   8
  -8
  -4

x =

   1
  -2
   1
				

Précision dans les calculs

On présente le calcul du réel et de l'entier présenté dans le chapitre sur le langage C. Les réels sont représentés en double précision, Le nombre utilisé n'a pas de représentation finie en binaire, ce qui explique les résultats obtenus.

Avec Scilab le résultat est

-->a=8.62
 a  = 
   8.62
-->y=int(a*100)
 y  = 
   861.				
				

Avec Octave le résultat est

>> a=8.62
a =  8.6200
>> y=fix(a*100)
y =  861	
				

Les calculatrices en ligne de commande

La calculatrice dc

Présentation

La calculatrice dc est une calculatrice RPN (Notation polonaise inverse). Elle utilise une pile pour enchaîner les calculs, elle permet de bien comrendre ce type de calculatrice. La syntaxe est donc une expression qui exécute une suite d'empilage et dépilage :

L'ensemble de la syntaxe est disponible sur le site computerhope.

Exemples

On reprend les calcul présentés dans le chapitre sur le fonctionnement de la calculatrice :

3 ↵ 4 + 2 ×
dc -e '3 4 + 2 * p'
14
2 ↵ 3 + 4 ↵ 5 + ×
dc -e '2 3 + 4 5 + * p'
45
3 ↵ 1 ↵ 2 / ^
dc -e '5 k 3 v p'
1.73205
3 ↵ 2 + 2 ^ 2 ↵ 1 + 2 ^ + 1 ↵ 2 / ^
dc -e '5 k 3 2 + 2 ^ 2 1 + 2 ^ + v p'
5.83095
dc -e '5 k 3 2 + d * 2 1 + d * + v p'
5.83095
La deuxième solution utilise la duplication suivi de la multiplication pour calculer le carré.

Registres et traitement conditionnel

Les expressions conditionnelles comparent les deux dernières valeurs contenues dans la pile après les avoir dépilées, et exécute le contenu d'un registre avant de continuer le calcul. La syntaxe est l'opérateur de comparaison suivi du caractère qui identifie le registre. Les symbole de comparaison sont >, <, =, !> pour inférieur ou égal, < pour supérieur ou égal, != pour différent de.

Exemple avec la calcul de la valeur absolue

On utilise l'algorithme classique :
Fonction abs
Paramètres en entrée : x
Paramètres en sortie : y
Debut traitement
Si x < 0 Alors
  z = -x
 Sinon
  y = x
FinSi
Retourner z
Fin traitement

Avec dc, pour calculer la négation du nombre on utilise la soustraction z=0-x.

On va stocker cette expression de calcul dans un registre. Donc suivant le signe de la valeur on appliquera ou non l'expression du registre

Il ne faut oublier que pour différencier l'opérateur de soustraction du signe moins d'un nombre négatif, la négation d'un nombre est le symbole _

Afin de transformer le symbole - en _, on utilise la commande linux tr

Contenu du fichier absolu.dc
?
d
sx
[0 lx - ]
sa
0
lx<a
p
echo "-3" | tr "-" "_" | dc -f absolu.dc
3
echo "3" | tr "-" "_" | dc -f absolu.dc
3

Registres et traitement itératif

En réalité le traitement itératif utilise la récursivité, c'est à dire que l'expression de calcul dans le registre contient la syntaxe d'exécution de cette expression.

Pour k de 1 à n Faire
  Afficher k
FinPour

L'expression du calcul enregistrée dans le registre contient l'incrémentation de k, la comparaison avec la valeur finale, et l'exécution de l'expression à nouveau si la valeur finale n'est pas atteinte. Cela impose d'utiliser trois registres : un pour l'expression de calcul F, un pour la commande de sortie du calcul Q et un pour le nombre d'itération n.

Contenu de boucle.dc
[q]
sQ
5
sn
1
p
[1 + p d ln !>Q lF x]
d
sF
x
Exécution de boucle.dc
dc -f boucle.dc
1
2
3
4
5

Calcul de suites et séries

Voir le calcul d'une suite particulière
Calcul de la suite Un+1=10×Un-6.3 avec U0=0.7
  • 5k pour 5 chiffres après la virgule
  • [10*6.3-plFx] : macro, sommet pile ×10-6.3, p affichage, lF empilage de F, x exécution du sommet de la pile
  • d : duplication du sommet de la pile
  • sF : dépilage le sommet dans le registre F
  • x : exécution de l'expression au sommet de la pile
5k
0.7
[10*6.3-plFx]
d
sF
x
Le calcul boucle à l'infini, il faut interrompre le programme avec ctrl-C
0.7
0.7
0.7
0.7
...
La calculatrice dc est une calculatrice à précision arbitraire, il n'y a pas d'erreur de calcul dans ce cas.
Voir le calcul de la série des inverses des puissances de 2
S = k = 1 n 1 2 k avec n = 10
  • 10k pour 10 chiffres après la virgule
  • [q] : macro, sommet pile qui contient l'instruction q pour quitter
  • sQ : dépilage le sommet dans le registre Q
  • 2 sk : 2 dans le registre k via la pile
  • 0.5 : empilage de 0.5
  • p : affichage du sommet de la pile sans dépiler (0.5)
  • sr : dépilage dans le registre r
  • [ lr 1 2 lk ^ / + p sr lk 10 !>Q lk 1 + sk lF x] : macro de calcul
    • lr 1 2 lk ^ / + p sr : somme du résultat (r) avec 1/2^k, affichage, dépilage dans le registre r
    • lk 10 !> Q : test si supérieur ou égal à 10 et quitte si vrai
    • lk 1 + sk lF x : continue en incrémentant k, empilage de la macro puis exécution
  • d : duplication de la macro au sommet de la pile
  • sF : dépilage de la macro dans le registre F
  • x : exécution de la macro au sommet de la pile
10k
[q]
sQ
2
sk
0.5
p
sr
[ lr 1 2 lk ^ / + p sr lk 10 !>Q lk 1 + sk lF x]
d
sF
x
.5
.7500000000
.8750000000
.9375000000
.9687500000
.9843750000
.9921875000
.9960937500
.9980468750
.9990234375
Voir le calcul de la série des inverses des entiers
S = k = 2 n 1 k avec n=10
  • 10k pour 10 chiffres après la virgule
  • [q] : macro, sommet pile qui contient l'instruction q pour quitter
  • sQ : dépilage le sommet dans le registre Q
  • 3 sk : 3 dans le registre k via la pile
  • 0.5 : empilage de 0.5
  • p : affichage du sommet de la pile sans dépiler (0.5)
  • sr : dépilage dans le registre r
  • [ lr 1 lk / + p sr lk 11 !>Q lk 1 + sk lF x ] : macro de calcul
    • lr 1 lk / + p sr : somme du résultat (r) avec 1/2^k, affichage, dépilage dans le registre r
    • 11 !> Q : test si supérieur ou égal à 11 et quitte si vrai
    • lk 1 + sk lF x : continue en incrémentant k, empilage de la macro puis exécution
  • d : duplication de la macro au sommet de la pile
  • sF : dépilage de la macro dans le registre F
  • x : exécution de la macro au sommet de la pile
10k
[q]
sQ
3
sk
0.5
p
sr
[ lr 1 lk / + p sr lk 10 !>Q lk 1 + sk lF x ]
d
sF
x
.5
.8333333333
1.0833333333
1.2833333333
1.4499999999
1.5928571427
1.7178571427
1.8289682538
1.9289682538

La calculatrice bc

Présentation

La calculatrice bc est une calculatrice à précision arbitraire, qui fonctionne avec des expressions parenthésées et qui supporte des fonctions mathématiques.

Les opérateurs et fonctions sont :
  • + - / * % pour le modulo, ^ pour la puissance
  • = pour l'affectation du résultat du calcul d'une expression à une variable
  • obase=n : définit la base n pour l'affichage (défaut 10)
  • ibase=n : définit la base n pour les valeurs d'entrée (défaut 10)
  • print pour l'affichage sur la sortie standard, les données et chaînes sont séparées par des virgules
  • quit : pour terminer le script, utilisé dans un fichier de script
  • scale(s) : s chiffres après la virgule, 0 par défaut
Les fonctions mathématiques disponibles sont
  • sqrt(x) : pour le calcul de la racine carrée de x
  • l(x) : pour le calcul du logarithme naturel de x
  • e(x) : pour le calcul de l'exponentielle de x
  • c(x) : pour le cosinus de x avec x en radians
  • s(x) : pour le sinus de x avec x en radians
  • a(x) : pour l'arc tangente de x

Les structures de contrôle sont :

L'ensemble des commandes est disponible sur le site computerhope.

Exemples

On reprend les calcul présentés dans le chapitre sur le fonctionnement de la calculatrice :

(3+4)*2=14
echo "(3+4)*2" | bc
14
(2+3)*(4+5)=45
echo "(2+3)*(4+5)" | bc
45
31.732
echo "scale=5;sqrt(3)" | bc
1.73205
(3+2)2+(2+1)2=345.83
echo "scale=5;sqrt((3+2)^2+(2+1)^2)" | bc
5.83095

Calcul de π avec deux méthodes différentes :

Voir le calcul de π
En utilisant l'arc tangente
echo "scale=20;4*a(1)" | bc -l
3.14159265358979323844

Il faut comparer le résultat avec la valeur donnée par le calcul du chapitre sur pi

3.141592653589793238462643383279502884197169399375
En utilisant la méthode de Viète présentée avec la programmation de la calculatrice
scale=20;
un=2;
den=sqrt(2);
for(i=0;i<=100;i=i+1) {
  un=un*2/den;
  den=sqrt(2+den);
}
print un,"\n";
quit;
bc -l viete_pi.bc
3.14159265358979323935

Calcule de suites et séries

Voir le calcul d'une suite particulière
Calcul de la suite Un+1=10×Un-6.3 avec U0=0.7
scale=10;
un=0.7;
for(i=1;i<30;i=i+1) {
  un=10*un-6.3;
  print un,"\n"
}
quit;
.7
.7
.7
.7
.7
.7
.7
.7
.7
.7
.7
...
Voir le calcul de la série des inverses des puissances de 2
S = k = 1 n 1 2 k avec n = 10
scale=10;
s=0;
for(i=1;i<=10;i=i+1) {
  s += 1/(2^i) ;
  print s,"\n"
}
quit;
.5000000000
.7500000000
.8750000000
.9375000000
.9687500000
.9843750000
.9921875000
.9960937500
.9980468750
.9990234375
Voir le calcul de la série des inverses des entiers
S = k = 2 n 1 k avec n=10
scale=10;
s=0;
for(i=2;i<=10;i+=1) {
  s += 1/i ;
  print s,"\n"
}
quit;
.5000000000
.8333333333
1.0833333333
1.2833333333
1.4499999999
1.5928571427
1.7178571427
1.8289682538
1.9289682538

Calcul de la multifactorielle

Voir le calcul de la multifactorielle
Le calcul de la multifactorielle est définie par n ! k = { 1 s i n = 0 n s i 1 n k n ( n - k ) ! k s i n > k
define fk(n,k) {
if (n <= 1) return (1);
  return (fk(n-k,k) * n);
}

for(n=1;n<=10;n=n+1) {
  f=fk(n,2);
  print n,":",f,"\n"
}
quit;
1:1
2:2
3:3
4:8
5:15
6:48
7:105
8:384
9:945
10:3840