Home Page
|
CoCoA System
Computations in
Commutative
Algebra
Hvad er CoCoA?
|
|
This pages counts
visits
by
visitors
- CoCoA er et program til at foretage beregninger med tal og polynomier.
- Det er gratis.
- Det virker på mange operativsystemer.
- Det benyttes af mange forskere, men det kan være nyttigt selv
ved "simple" beregninger.
Hvad kan vi beregne med CoCoA?
Meget store heltal
Det største heltal man kan repræsentere
på en 32-bit computer er 2^32-1, men CoCoA kan, takket være
det kraftfulde GMP bibliotek, regne med tal så store som
2^300000: Prøv det!
2^32-1;
4294967295
2^64-1;
18446744073709551615
Rationale tal
CoCoA er meget præcis med hensyn til
brøker: Den approksimerer dem aldrig! Så 1/3 er ganske
forskellig fra 0.3333333333333 .
(1/3) * 3;
1
0.3333333333333 * 3;
9999999999999/10000000000000
Polynomier
CoCoA er specialiceret til at foretage beregninger
med polynomier: Den kan gange, dividere, faktorisere, ...
(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]]
]
Lineære ligningssystemer
CoCoA kan løse lineære ligningssystemer.
Du skal blot skrive hver ligning
f = c
som polynomiet
f - c
. CoCoA kan også løse polynomielle
ligningssystemer, men dette er lidt mere vanskeligt, som vi senere
skal se. Vi løser nu
System := ideal(x-y+z-2, 3*x-z+6, x+y-1);
ReducedGBasis(System);
[x +3/5, y -8/5, z -21/5]
Løsningen er dermed (z=21/5, x=-3/5, y=8/5)
Ikke-negative heltalsløsninger
Kan du finde de ikke-negative heltalsløsninger til det følgende ligningssystem?
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]]
Fortolkningen er, at der netop fire løsninger:
(0, 10, 6), (6, 11, 4), (12, 12, 2), (18, 13, 0).
Et eksempel på logik
A siger: "B lyver."
B siger: "C lyver."
C siger: "A og B lyver."
Hvem er det egentlig der lyver?
For at svare på dette spørgsmål koder vi SAND med 1
og FALSK med 0 i 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]
Den entydige løsning er, at A og C
løj, og B talte sandt.
Kortfarvning
Kan landene på et kort farvelægges med
tre farver på en sådan måde, at ingen nabolande
har samme farve?
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]
Fortolkningen er, at der rent faktisk er en
farvelægning i dette tilfælde. For eksempel, hvis 0 betyder
blå, 1 betyder rød og -1 betyder grøn, får vi
[land 1 = rød; land 2 = blå; land 3 = grøn; land 4 =
rød; land 5 = grøn; land 6 = blå]
Herons formel
Er det muligt at udtrykke arealet af en trekant som
en funktion af længden af dens sider?
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]
]
Fortolkningen er, at vi har
s^2 = -(1/16)(a+b+c)(a+b-c)(a-b+c)(a-b-c).
Dette betyder, at kvadratet af arealet af en trekant med siderne a, b,
c er p(p-a)(p-b)(p-c), hvor p = 1/2(a+b+c) er det halve af trekantens
omkreds. Svaret er således JA.
Written by Troels Windfeldt
Please send comments or suggestions to cocoa(at)dima.unige.it
Last Update: 20 November 2018