Home Page
|
CoCoA System
Computations in
Commutative
Algebra
Што е CoCoA?
|
|
This pages counts
visits
by
visitors
- CoCoA е програма за извршување на пресметки со броеви и полиноми.
- Бесплатна е.
- Работи на многу оперативни системи.
- Ја користат многу истражувачи, но може да биде корисна и за „едноставни“ пресметки.
Што можеме да пресметуваме со CoCoA?
Многу големи цели броеви
Најголемиот „мaшински“ природен број кој можете да го користите на 32-битен компјутер е 2^32-1, но CoCoA, благодарение на моќната GMP библиотека, може да врши пресметки со броеви големи дури колку бројот 2^300000: обидете се да го направите тоа!
2^32-1;
4294967295
2^64-1;
18446744073709551615
Рационални броеви
CoCoA е многу точна при работа со дропки: никогаш не ги апроксимира! Така, 1/3 е прилично различно од 0.3333333333333
(1/3) * 3;
1
0.3333333333333 * 3;
9999999999999/10000000000000
Полиноми
CoCoA е специјализирана за пресметки со полиноми: способна е за множење, делење, факторизирање, ...
(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]]
]
Линеарни системи
CoCoA може да решава линеарни системи. Доволно е само да ја запишете секоја равенка
f = c како полином f - c. CoCoA истотака може да решава и полиномни
системи, но ова е малку потешко и ќе го разгледаме подоцна. Сега го
решаваме:
System := ideal(x-y+z-2, 3*x-z+6, x+y-1);
ReducedGBasis(System);
[x +3/5, y -8/5, z -21/5]
Според тоа решението е (z=21/5, x=-3/5, y=8/5).
Решенија кои што се ненегативни цели броеви
Можете ли да ги најдете тројките ненегативни цели броеви кои се решенија на следниот систем?
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]]
Интерпретацијата е дека постојат само четири решенија
(0, 10, 6), (6, 11, 4), (12, 12, 2), (18, 13, 0).
Логички пример
А вели: "Б лаже."
Б вели: "В лаже."
В вели: "А и Б лажат."
Сега, кој од нив лаже?
За да го одговориме ова прашање, го кодираме ТОЧНО со 1 и ПОГРЕШНО со 0 во 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]
Единственото решение е дека А и В лажат, а Б ја кажува вистината.
Обојување на географски мапи
Може ли земјите на една мапа да се обојат со три бои на таков начин што нема да има две соседни земји кои ќе бидат обоени со иста боја?
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]
Интерпретацијата е дека навистина постои такво обојување за овој случај. На пример, ако 0 означува сино, 1 означува црвено, и -1 означува зелено, добиваме [земја 1 = црвено; земја 2 = сино; земја 3 = зелено; земја 4 = црвено; земја 5 = зелено; земја 6 = сино]
Хероновата формула
Возможно ли е да се изрази плоштината на еден триаголник како функција од должините на неговите страни?
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]
]
Интерпретацијата е дека имаме:
s^2 =
-(1/16)(a+b+c)(a+b-c)(a-b+c)(a-b-c).
Ова значи дека квадратот од плоштината на триаголникот со страни a, b и c е p(p-a)(p-b)(p-c) каде p = 1/2(a+b+c) е полупериметарот. Според тоа, одговорот е ДА.
Written by Marjan Rizinski
Please send comments or suggestions to cocoa(at)dima.unige.it
Last Update: 20 November 2018