Home Page
|
CoCoA System
Computations in
Commutative
Algebra
¿Qué es CoCoA?
|
|
This pages counts
visits
by
visitors
- CoCoA es un programa para calcular con números y con polinomios.
- Es gratuito.
- Funciona en varios sistemas operativos.
- Lo usan muchos investigadores, aunque también puede ser útil para
cálculos más "simples".
¿Qué podemos calcular con CoCoA?
Enteros muy grandes
El mayor "entero de máquina" que es posible
calcular en un ordenador de 32 bits es 2^32-1. Pero CoCoA, gracias a la
utilización de la potente librería GMP, puede calcular
números mayores, como 2^300000: ¡pruébalo!
2^32-1;
4294967295
2^64-1;
18446744073709551615
Números Racionales
CoCoA es muy preciso con las fracciones: ¡nunca
las aproxima! Así 1/3 es realmente distinto de 0.3333333333333.
(1/3) * 3;
1
0.3333333333333 * 3;
9999999999999/10000000000000
Polinomios
CoCoA está especializado en cálculos con
polinomios: puede multiplicar, dividir, factorizar, ...
(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]]
]
Sistemas de equaciones lineales
CoCoA puede resolver sistemas lineales. Sólo hay que
escribir cada ecuación
f = c
como el polinomio f -
c. Además CoCoA también puede resolver sistemas de
polinomios, aunque ésto es un poco más difícil y
lo veremos más adelante. Ahora resolvemos:
System := ideal(x-y+z-2, 3*x-z+6, x+y-1);
ReducedGBasis(System);
[x +3/5, y -8/5, z -21/5]
Así la solución es (z=21/5, x=-3/5,
y=8/5)
Soluciones entereas no negativas
¿Es posible encontrar tríadas de soluciones
enteras no negativas del
siguiente 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]]
Ésto significa que existen exactamente cuatro soluciones:
(0, 10, 6), (6, 11, 4), (12, 12, 2), (18, 13, 0).
Un ejemplo de lógica
A dice: "B miente."
B dice: "C miente."
C dice: "A y B mienten."
Entonces, ¿quién está mintiendo?
Para responder a esta pregunta codificamos VERDADERO como 1 y FALSO como 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]
La única posibilidad es que A y C mienten,
y que B dice la verdad.
Coloreando un mapa geográfico
¿Es posible pintar los países en un mapa con
sólo tres colores de modo que si dos países comparten frontera
no estén pintados del mismo 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 resultado puede interpretarse como sigue:
las variables x[1],...,x[6] representan a los países y los enteros
-1, 0 y 1 a los colores. CoCoA encuentra una coloración posible:
el color 0 para el país 2, el 1 para el país 1, ... y el
color -1 para el país 5.
Fórmula de Herón
¿Es posible expresar el área de un triángulo
en función de las longitudes de sus lados?
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]
]
Obenemos la fórmula
s^2 = -(1/16)(a+b+c)(a+b-c)(a-b+c)(a-b-c).
Ésto significa que el cuadrado del área de un triángulo
de lados a,b,c es p(p-a)(p-b)(p-c), donde p = 1/2(a+b+c) representa el
semiperímetro del triángulo.
¡Ésta es la fórmula de Herón! Así pues, la
respuesta es: ¡Sí!
Written by Montserrat Manubens
Please send comments or suggestions to cocoa(at)dima.unige.it
Last Update: 20 November 2018