[CoCoA logo]
Home Page
CoCoA System
Computations in Commutative Algebra

Што е CoCoA?


This pages counts visits by visitors



Што можеме да пресметуваме со 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 истотака може да решава и полиномни системи, но ова е малку потешко и ќе го разгледаме подоцна. Сега го решаваме:
    x-y+z=2
    3x-z=-6
    x+y=1
    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