Home Page
|
CoCoA System
Computations in
Commutative
Algebra
Què és CoCoA?
|
|
This pages counts
visits
by
visitors
- CoCoA és un programa per a calcular tant amb números com amb polinomis.
- És gratuït.
- Funciona sota varis sistemes operatius diferents.
- És usat per molts investigadors, tot i que també pot ser útil per
a fer càlculs més "simples".
Què podem calcular amb CoCoA?
Enters molt grans
L'"enter de màquina" més gran que es pot
calcular en un ordinador de 32 bits és 2^32-1. CoCoA, però,
gràcies a
l'ús de la potent llibreria GMP, pot arribar a calcular nombres com
2^300000: prova-ho!
2^32-1;
4294967295
2^64-1;
18446744073709551615
Nombres Racionals
CoCoA és molt precís amb les fraccions: mai
les aproxima! Així doncs, 1/3 és realment diferent de
0.3333333333333.
(1/3) * 3;
1
0.3333333333333 * 3;
9999999999999/10000000000000
Polinomis
CoCoA està especialitzat per a càlculs amb
polinomis: pot multiplicar, dividir, factoritzar, ...
(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]]
]
Sistemes d'equacions lineals
CoCoA pot resoldre sitemes lineals. Només cal
escriure cada equació
f = c
com el polinomi
f -
c
. A més, CoCoA també pot resoldre sistemes
polinomials, tot i que és una mica més difícil i
ho veurem més endavant. Ara resolem:
System := ideal(x-y+z-2, 3*x-z+6, x+y-1);
ReducedGBasis(System);
[x +3/5, y -8/5, z -21/5]
Per tant, la solució és
(z=21/5, x=-3/5, y=8/5)
Solucions enteres no negatives
És possible trobar tríades de solucions
enteres no negatives
del sistema següent?
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]]
Hi ha, doncs, exactament quatre solucions:
(0, 10, 6), (6, 11, 4), (12, 12, 2), (18, 13, 0).
Un exemple de lògica
A diu: "B menteix."
B diu: "C menteix."
C diu: "A i B menteixen."
Qui menteix doncs?
Per a respondre a aquesta pregunta codifiquem VERITABLE com 1 i FALS com 0
en 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]
L'única solució és que A i C
menteixen, i que B diu la veritat.
Pintem un mapa geogràfic
És possible pintar els països d'un mapa amb
només tres colors de tal manera que si dos països comparteixen
frontera no puguin ser del mateix color?
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]
El resultat s'interpreta com segueix:
les variables x[1],...,x[6] representen els països i els enters
-1, 0 i 1 representen els colors. CoCoA dóna una coloració
possible:
el color 0 per al païs 2, el color 1 per al païs 1, ... i el color
-1 per al païs 5.
Fórmula d'Heró
És possible expressar l'àrea d'un triangle
en funció de les longituds dels seus costats?
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]
]
Obtenim la fórmula
s^2 = -(1/16)(a+b+c)(a+b-c)(a-b+c)(a-b-c).
Això significa que el quadrat de l'àrea d'un triangle amb
costats a,b i c
és precisament p(p-a)(p-b)(p-c), on p = 1/2(a+b+c) representa el
semiperímetre del triangle.
Aquesta és la fórmula d'Heró! Així doncs, la
resposta és: SI!
s^2 = -(1/16)(a+b+c)(a+b-c)(a-b+c)(a-b-c).
Written by Montserrat Manubens
Please send comments or suggestions to cocoa(at)dima.unige.it
Last Update: 20 November 2018