Home Page
|
CoCoA System
Computations in
Commutative
Algebra
Qu'est ce que CoCoA?
|
|
This pages counts
visits
by
visitors
- CoCoA est un programme pour faire des calculs avec des nombres ou
des polynômes.
- C'est un logiciel libre.
- Il fonctionne sous divers systèmes d'exploitation.
- Il est utilisé par de nombreux chercheurs, mais est aussi
utile pour de "simples" calculs.
Que peut on calculer avec CoCoA?
Très grands entiers
Le plus grand "entier machine" gérable par un
ordinateur 32-bit est 2^32-1, mais CoCoA, grâce à
la puissante librairie GMP, peut également calculer des nombres
aussi grands que 2^300000 : vous n'avez qu'à essayer!
2^32-1;
4294967295
2^64-1;
18446744073709551615
Nombres rationnels
CoCoA est très précis avec les
fractions : il ne les approxime jamais! Ainsi 1/3 est vraiment
différent de 0.3333333333333
(1/3) * 3;
1
0.3333333333333 * 3;
9999999999999/10000000000000
Polynômes
CoCoA est un spécialiste des calculs avec
les
polynômes : il peut les multiplier, diviser, factoriser, ...
(x-y)^2 * (x^4-4*z^4) / (x^2+2*z^2);
x^4 -2*x^3*y +x^2*y^2 -2*x^2*z^2 +4*x*y*z^2 -2*y^2*z^2
Factor(x^4 -2*x^3*y +x^2*y^2 -2*x^2*z^2 +4*x*y*z^2 -2*y^2*z^2);
record[
RemainingFactor := 1,
factors := [x^2 -2*z^2, x -y],
multiplicities := [1, 2]]
]
Systèmes linéaires
CoCoA peut résoudre des systèmes
linéaires. Il suffit d'écrire chaque équation
f = c
sous la forme
f - c
. CoCoA peut aussi
résoudre des systèmes polynomiaux, mais c'est un peu
plus compliqué et nous le verrons plus tard. Résolvons
maintenant
System := ideal(x-y+z-2, 3*x-z+6, x+y-1);
ReducedGBasis(System);
[x +3/5, y -8/5, z -21/5]
Donc la solution est (z=21/5, x=-3/5, y=8/5)
Solutions entières positives
Est-il possible de trouver les triplets d'entiers
positifs solutions du système suivant?
3x - 4y + 7z | =2 |
2x - 2y + 5z | =10 |
M := mat([[3, -4, 7, -2], [2, -2, 5, -10]]);
H := HilbertBasisKer(M);
L := [h In H | h[4] <= 1];
L;
[[0, 10, 6, 1], [6, 11, 4, 1], [12, 12, 2, 1], [18, 13, 0, 1]]
Il y a donc quatre solutions :
(0, 10, 6), (6, 11, 4), (12, 12, 2), (18, 13, 0).
Qui dit la verité?
A dit : "B ment."
B dit : "C ment."
C dit : "A et B mentent."
Qui ment?
Pour répondre à cette question on code VRAI par 1 et
FAUX par 0 dans ZZ/(2):
use ZZ/(2)[a,b,c];
I1 := ideal(a, b-1);
I2 := ideal(a-1, b);
A := intersect(I1, I2);
I3 := ideal(b, c-1);
I4 := ideal(b-1, c);
B := intersect(I3, I4);
I5 := ideal(a, b, c-1);
I6 := ideal(b-1, a, c);
I7 := ideal(b, a-1, c);
I8 := ideal(b-1, a-1, c);
C := IntersectList([I5, I6, I7, I8]);
ReducedGBasis(A + B + C);
[b +1, a, c]
La seule possibilité est que A et C
mentent tandis que B dit vrai.
Coloriage d'une carte géographique
Peut-on colorier la carte de sorte que deux pays
frontaliers aient une teinte différente en utilisant seulement
trois couleurs?
use P ::= ZZ/(3)[x[1..6]];
define F(X) return X*(X-1)*(X+1); enddefine;
VerticesEq := [ F(x[i]) | i in 1..6 ];
edges := [[1,2],[1,3], [2,3],[2,4],[2,5], [3,4],[3,6],
[4,5],[4,6], [5,6]];
EdgesEq := [ (F(x[edge[1]])-F(x[edge[2]]))/(x[edge[1]]-x[edge[2]])
| edge in edges ];
I := ideal(VerticesEq) + ideal(EdgesEq) + ideal(x[1]-1, x[2]);
ReducedGBasis(I);
[x[2], x[1] -1, x[3] +1, x[4] -1, x[6], x[5] +1]
Le résultat s'interprète comme
suit. Les variables x[1],...,x[6] représentent les pays, les
entiers -1, 0 et 1 les couleurs. CoCoA donne un coloriage possible :
couleur 0 pour le pays 2, 1 pour le pays 1, ..., couleur -1 pour le
pays 5.
La Formule d'Hèron
Peut-on exprimer l'aire d'un triangle en fonction
des longueurs de ses côtés?
use QQ[x[1..2],y,a,b,c,s];
A := [x[1], 0];
B := [x[2], 0];
C := [ 0, y];
Hp := ideal(a^2 - (x[2]^2+y^2), b^2 - (x[1]^2+y^2),
c - (x[2]-x[1]), 2*s - c*y);
E := elim(x[1]..y, Hp);
f := monic(gens(E)[1]);
f;
a^4 -2*a^2*b^2 +b^4 -2*a^2*c^2 -2*b^2*c^2 +c^4 +16*s^2
factor(f - 16*s^2);
record[
RemainingFactor := 1,
factors := [a +b -c, a -b +c, a +b +c, a -b -c],
multiplicities := [1, 1, 1, 1]
]
On obtient la formule :
s^2 = -(1/16)(a+b+c)(a+b-c)(a-b+c)(a-b-c).
Cela signifie que le carré de l'aire d'un
triangle de côtés a,b et c est p(p-a)(p-b)(p-c) o`
p = 1/2(a+b+c) dénote le demi-périmètre, c'est la
formule d'Hèron! L'aire d'un triangle s'exprime donc en
fonction des longueurs de ses côtés.
Written by Sébastien Guffroy
Please send comments or suggestions to cocoa(at)dima.unige.it
Last Update: 20 November 2018