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

CoCoA là gì?


This pages counts visits by visitors



Những cái gì chúng ta có thể tính toán được với CoCoA

  • Những số nguyên rất lớn
  • Các số hữu tỷ
  • Các đa thức
  • Các hệ phương trình tuyến tính
  •  
  • Các nghiệm nguyên không âm
  • Ví dụ về Logic
  • Tô màu bản đồ địa lý
  • Công thức Heron

  • Những số nguyên rất lớn

    Số nguyên lớn nhất bạn có thể sử dụng trên một máy tính 32-bit là 2^32-1, nhưng dựa vào thư viện GMP lớn mạnh, CoCoA thậm chí có thể tính các số lớn chừng 2^300000: Hay thử xem!
    2^32-1; 
    4294967295
    2^64-1; 
    18446744073709551615

    Các số hữu tỷ

    CoCoA rất chính xác với các phân số: nó không bao giờ xấp xỉ chúng. Do vậy, 1/3 là hoàn toàn khác với 0.3333333333333.
    (1/3) * 3;
    1
    0.3333333333333 * 3;
    9999999999999/10000000000000

    Các đa thức

    CoCoA đặc biệt dành cho tính toán với đa thức: nó có thể nhân, chia, nhân tử hóa,…
    (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]]
    ]

    Các hệ phương trình tuyến tính

    CoCoA có thể giải các hệ phương trình tuyến tính. Bạn chỉ cần viết mọi phương trình f =c như là đa thức f-c. CoCoA cũng có thể giải hệ phương trình đa thức, nhưng điều này là phức tạp hơn và chúng ta có thể thấy sau này. Bây giờ chúng ta giải
    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]
    Như vậy, nghiệm của hệ phương trình là (z=21/5, x=-3/5, y=8/5)

    Các nghiệm nguyên không âm

    Bạn có thể tìm các bộ nghiệm nguyên không âm của hệ phương trình sau không?
    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]]
    Cách hiểu ở tính toán trên là chỉ có 4 bộ nghiệm: (0, 10, 6), (6, 11, 4), (12, 12, 2), (18, 13, 0).

    Ví dụ về Logic

    A nói : "B nói dối." B nói: "C nói dối." C nói: "A và B nói dối." Người nào nói dối ở tình huống này? Để trả lời câu hỏi này chúng ta mã hóa TRUE bằng 1 và FALSE bằng 0 trong 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]
    Nghiệm duy nhất ở trên chỉ ra rằng A và C nói dối và B nói sự thật.

    Tô màu bản đồ địa lý

    Các quốc gia trên một bản đồ có thể được tô màu bằng ba màu sao cho không có hai quốc gia kề cận nào có cùng màu không?

    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]
    Cách giải thích ở đây là có một cách tô màu trong trường hợp cụ thể này. Ví dụ: nếu 0 có nghĩa là màu xanh, 1 có nghĩa là màu đỏ, và -1 có nghĩa là màu lục, thì chúng ta nhận được [Quốc gia 1 = màu đỏ, Quốc gia 2 = màu xanh, Quốc gia 3 = màu lục, Quốc gia 4 = màu đỏ, Quốc gia 5 = màu lục, Quốc gia 6 = màu xanh]


    Công thức Heron

    Có thể biểu diễn diện tích của một tam giác như là một hàm của các chiều dài của các cạnh của nó không?

    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]
    ]
    Điều này có nghĩa là bình phương của diện tích hình tam giác với các cạnh a, b, c là p(p-a)(p-b)(p-c), trong đó p = 1/2(a+b+c) là nửa chu vi của tam giác này. Như vậy, câu trả lời là CÓ.

    Written by Ngoc Long
    Please send comments or suggestions to cocoa(at)dima.unige.it
    Last Update: 20 November 2018