Home Page
|
CoCoA System
Computations in
Commutative
Algebra
Cosa è CoCoA?
|
|
This pages counts
visits
by
visitors
- CoCoA è un programma che calcola con numeri e polinomi.
- È gratis.
- Funziona su diversi sistemi operativi.
- È usato da molti ricercatori in tutto il mondo, ma
può
essere utile anche a chi vuole fare "semplici" calcoli di Algebra.
Cosa si può calcolare con CoCoA?
Interi molto grandi
Il più grande "intero macchina" che un
computer a 32 bit può calcolare è 2^32-1, ma CoCoA,
sfruttando la potente libreria di calcolo a precisione illimitata
GMP, può calcolare anche 2^300000: provate!
2^32-1;
4294967295
2^64-1;
18446744073709551615
Numeri Razionali
CoCoA è molto preciso con le frazioni: non
le approssima mai! Quindi 1/3 è proprio diverso da
0.3333333333333
(1/3) * 3;
1
0.3333333333333 * 3;
9999999999999/10000000000000
Polinomi
CoCoA è specializzato in polinomi: li
può moltiplicare, dividere, fattorizzare, ....
(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]]
]
Sistemi di equazioni lineari
CoCoA può risolvere sistemi di equazioni
lineari. È sufficiente codificare ogni equazione del tipo
f = c
con il polinomio
f - c
. Può
anche risolvere sistemi di equazioni non lineari, ma questo è
un po' più difficile e ne parleremo dopo. Risolviamo ora
System := ideal(x-y+z-2, 3*x-z+6, x+y-1);
ReducedGBasis(System);
[x +3/5, y -8/5, z -21/5]
Quindi la soluzione è
(z=21/5, x=-3/5, y=8/5)
Soluzioni intere non-negative
È possibile trovare le triple di interi
non-negativi soluzioni del seguente sistema?
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]]
Quindi ci sono soltanto quattro soluzioni:
(0, 10, 6), (6, 11, 4), (12, 12, 2), (18, 13, 0).
Chi è il mentitore?
A dice: "B mente."
B dice: "C mente."
C dice: "A e B mentono."
Ora, chi è il mentitore?
Per rispondere a questa domanda codifichiamo VERO con 1 e FALSO con 0
in
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'unica possibilità è che A e
C mentano, mentre B dica la verità
Coloriamo la carta geografica
È possibile colorare gli stati di una cartina
usando solo tre colori in modo tale che i paesi confinanti non abbiano
lo stesso colore?
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]
Il risultato si interpreta nel modo
seguente: le variabili x[1], x[2],..., x[6] rappresentano gli stati
mentre i numeri -1, 0, 1 identificano i colori. CoCoA trova una
colorazione possibile: colore 0 per lo stato 2, colore 1 per lo stato
1,..., colore -1 per lo stato 5. Ad esempio, se associamo a 0 il
colore blu, a 1 il colore rosso e a -1 il verde, otteniamo
Formula di Erone
È possibile esprimere l'area di un triangolo
in funzione della lunghezza dei suoi lati?
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]
]
Il risultato si traduce nella relazione:
s^2 = -(1/16)(a+b+c)(a+b-c)(a-b+c)(a-b-c).
Questo significa che il quadrato dell'area di un triangolo di lati
a,b,c è p(p-a)(p-b)(p-c) dove p = 1/2(a+b+c) rappresenta il
semiperimetro. Questa è la formula di Erone! Quindi l'area di
un triangolo si può esprimere in funzione della lunghezza dei
suoi lati.
Written by Laura Bazzotti
Please send comments or suggestions to cocoa(at)dima.unige.it
Last Update: 20 November 2018