Home Page
|
CoCoA System
Computations in
Commutative
Algebra
Was ist CoCoA?
|
|
This pages counts
visits
by
visitors
- CoCoA ist ein Programm, dass mit Zahlen und Polynomen rechnen
kann.
- Es ist kostenlos.
- Es existiert für viele Betriebssysteme.
- Es wird von vielen Forschern verwendet, aber es kann auch
bei "einfachen" Berechnungen eingesetzt werden.
Was kann man mit CoCoA berechnen?
Sehr große ganze Zahlen
Die größte ganze Zahl, die ein
32-Bit-Computer üblicherweise verwenden kann, ist 2^32-1. CoCoA
hingegen kann dank der leistungsfähigen GMP-Bibliothek sogar
Zahlen wie 2^300000 berechnen - Probieren Sie es aus!
2^32-1;
4294967295
2^64-1;
18446744073709551615
Rationale Zahlen
CoCoA rechnet exakt mit Brüchen - es verwendet
niemals Näherungen! Also ist auch für CoCoA 1/3 wesentlich
verschieden von 0.3333333333333
(1/3) * 3;
1
0.3333333333333 * 3;
9999999999999/10000000000000
Polynome
CoCoA ist spezialisiert auf Rechnungen mit
Polynomen:
Es kann diese multiplizieren, dividieren, faktorisieren, ...
(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]]
]
Lineare Gleichungssysteme
CoCoA kann lineare Gleichungssysteme lösen.
Dazu muss man lediglich jede Gleichung
f = c
als ein
Polynom
f - c
schreiben. CoCoA kann auch polynomiale
Gleichungssysteme lö.
Allerdings ist das etwas schwieriger und wir werden es erst
später betrachten. Jetzt lösen wir
System := ideal(x-y+z-2, 3*x-z+6, x+y-1);
ReducedGBasis(System);
[x +3/5, y -8/5, z -21/5]
Damit lautet die Lösung (z=21/5, x=-3/5,
y=8/5)
Nicht-negative ganzzahlige Lösungen
Können Sie die nicht-negativen ganzzahligen
Lösungen des folgenden Gleichungssystems angeben?
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]]
Das bedeutet, die Lösungen sind:
(0, 10, 6), (6, 11, 4), (12, 12, 2), (18, 13, 0).
Ein Logik-Rätsel
A sagt: "B lügt."
B sagt: "C lügt."
C sagt: "A und B lügen."
Wer lügt denn nun wirklich?
Um diese Frage zu beantworten, repräsentieren wir WAHR durch 1
und FALSCH durch 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]
Die einzige Lösung lautet: A und C haben
gelogen, während B die Wahrheit sagte.
Färben von Landkarten
Kann man die Länder einer Landkarte so mit drei
Farben färben, dass je zwei Nachbarländer verschieden
gefärbt sind?
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]
Das bedeutet, dass es im vorliegenden
Beispiel tatsächlich eine Färbung gibt. Zum Beispiel, stehe
0 für blau, 1 für rot,
und -1 für grün; dann erhält man die Färbung [Land
1 = rot; Land 2 = blau; Land
3 = grün; Land 4 = rot; Land 5 = grün; Land 6 = blau]
Die Formel von Heron
Kann man den Flächeninhalt eines Dreiecks als
Formel in Abhängigkeit von den Seitenlängen angeben?
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]
]
Das liefert
s^2 = -(1/16)(a+b+c)(a+b-c)(a-b+c)(a-b-c).
Also ist das Quadrat des Flächeninhalts eines Dreiecks
mit Seitenlängen a,b und c gegeben durch
p(p-a)(p-b)(p-c), wobei p = 1/2(a+b+c) den halben Umfang des Dreiecks
bezeichne.
Die Antwort lautet: JA
Written by Achim Kehrein
Please send comments or suggestions to cocoa(at)dima.unige.it
Last Update: 20 November 2018