Tải bản đầy đủ (.doc) (51 trang)

Ứng dụng phần mềm Maple và cơ sở Groebner trong giải toán hình học phẳng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.23 MB, 51 trang )

MỤC LỤC
MỞ ĐẦU
1. TÍNH CẤP THIẾT CỦA ĐỀ TÀI
Ngày nay, nhờ sự phát triển như vũ bão của công nghệ thông tin, máy tính
đã thâm nhập vào hầu hết các lĩnh vực khoa học và đời sống. Nhiều chương trình
ứng dụng đã được phát triển liên quan tới quản lý dữ liệu, in ấn, đồ họa, xử lý
ảnh… Riêng đối với ngành Toán đã có những sản phẩm mang tính phổ dụng như
Mathematica, Matlab, Maple … và nhiều chương trình chuyên dụng cho từng bộ
môn Toán học. Những phần mềm trên giúp ích rất nhiều cho việc giảng dạy môn
Toán, học Toán cũng như việc ứng dụng Toán trong các ngành kĩ thuật, kinh tế và
vì thế tại các nước phát triển chúng đã trở thành cẩm nang của nhiều sinh viên và
các nhà khoa học.
Khả năng của các phần mềm Toán học là rất lớn và có thể khai thác chúng ở
nhiều góc độ khác nhau. Do đó, việc nghiên cứu và giảng dạy cho sinh viên cách
sử dụng công cụ phần mềm Toán thông dụng như Maple là cần thiết và đem lại
hiệu quả thực sự.
Một nét nổi bật của các phần mềm tính toán là chúng không chỉ giúp chúng
ta tính toán mà còn hỗ trợ cho tư duy, suy luận và do đó nó rất hữu ích trong giảng
dạy và nghiên cứu Toán học. Kể từ khi phần mềm tính toán Maple ra đời, nhiều
trường Đại học trên thế giới đã thay đổi cách dạy và học môn Toán. Cùng với cách
giảng dạy giải toán truyền thống, người học được hướng dẫn để giải toán bằng
Maple. Phương pháp này tạo ra cho Toán học một cách tiếp cận mới sinh động và
sáng tạo hơn, tạo ra cho con người có thể khai thác tối đa khả năng sáng tạo. Theo
tác giả Phạm Huy Điển: “Nếu như với Đại số, Số học, Giải tích … Maple có khả
năng đầy đủ để giảng dạy và học tập (từ phổ thông lên đại học) thì trong Hình học
phẳng nó chỉ đưa ra những công cụ mang tính cơ sở chưa đáp ứng được nội dung
giảng dạy bộ môn Hình học hiện nay ở Việt Nam”. Tuy nhiên Maple là một hệ
thống mở, nó cho phép chúng ta tạo lập được những công cụ mới bổ sung. Do đó,
chúng ta có thể làm phong phú hơn gói công cụ Hình học phẳng của Maple.
1
Theo phương pháp trên, bằng cách ứng dụng lý thuyết Toán học Cơ sở


Groebner kết hợp với phần mềm Maple chúng ta có thể giải các bài toán Hình học
phẳng.
Với mong muốn đóng góp một phần nhỏ công sức để giảm bớt những khó
khăn cho học sinh, sinh viên trong việc giải các bài toán hình học phẳng thường
gặp mà không mất quá nhiều thời gian khi tính toàn bằng tay mà áp dụng thành tựu
khoa học công nghệ hiện đại để giải quyết một bài toán nhanh, gọn qua đó hỗ trợ
cho đội ngũ giáo viên các trường phổ thông trong công tác giảng dạy của mình.
Bởi vậy, chúng em mạnh dạn nghiên cứu đề tài: “Ứng dụng phần mềm Maple và
cơ sở Groebner trong giải toán hình học phẳng”.
2. Ý NGHĨA CỦA ĐỀ TÀI
2.1. Ý nghĩa khoa học: Đề tài nghiên cứu các thuật toán trong phần mềm Maple và
ứng dụng Cơ sở Groebner để giải các bài toán Hình học phẳng.
2.2. Ý nghĩa thực tiễn: Đề tài nghiên cứu là tài liệu tham khảo cho sinh viên ngành
Đại học sư phạm Toán và giáo viên các trường trung học phổ thông. Sau khi đề tài
hoàn thành, chúng em hi vọng đây sẽ là một tài liệu bổ ích cho học sinh, sinh viên
trong học tập và nghiên cứu về cách sử dụng phần mềm Maple để giảng dạy hình
học.
3. MỤC TIÊU ĐỀ TÀI
3.1. Đề tài nghiên cứu khoa học hệ thống một cách chi tiết các thuật toán sử dụng
trong phần mềm Maple và ứng dụng của nó trong việc giải các bài toán hình học
phẳng, đưa ra cách giải một cách nhanh và chính xác nhất cho một số dạng bài
toán hình học phẳng.
3.2. Nêu ra quy trình đại số hóa một số bài toán hình học phẳng dựa trên Cơ sở
Groebner.
3.3. Nêu ra các bài tập vận dụng là tài liệu tham khảo cho học sinh, sinh viên.
4. ĐỐI TƯỢNG, PHẠM VI NGHIÊN CỨU
4.1. Đối tương nghiên cứu: Các thuật toán trong phần mềm Maple, cơ sở Groebner
và các ứng dụng trong giải toán hình học phẳng.
4.2. Phạm vi nghiên cứu: Phần mềm Maple, cơ sở Groebner ứng dụng trong giải
các bài toán Hình học phẳng.

5. NỘI DUNG NGHIÊN CỨU
Chương 1: Phần mềm Maple và cơ sở Groebner
1.1. Giới thiệu về phần mềm Maple
1.1.1. Giao diện và môi trường làm việc của Maple
1.1.2. Các khái niệm và hàm cơ bản trong lập trình trên Maple
1.1.3. Lập trình toán học trên Maple
1.1.4. Lệnh và kết quả của Maple
1.1.5. Ứng dụng của Maple trong hình học
1.2. Cơ sở Groebner
1.2.1. Định nghĩa cơ sở Groebner
1.2.2. Đại số hóa định lý hình học trên Maple
1.2.3. Quy trình chứng minh định lý hình học trên Maple
1.2.4 Cơ sở Groebner trong Maple
Chương 2: Bài tập vận dụng
2.1. Bài tập hình học phẳng với gói Groebner
2.2. Bài tập hình học phẳng với gói Geometry
2.3. Bài tập
6. PHƯƠNG PHÁP NGHIÊN CỨU
6.1. Phương pháp nghiên cứu lý luận: Đọc và nghiên cứu các tài liệu, giáo trình về
phần mềm Maple, Cơ sở Groebner. Nghiên cứu các thuật toán và ứng dụng Cơ sở
Groebner trong giải các bài toán Hình học phẳng trên Maple.
6.2. Phương pháp tổng kết kinh nghiệm: Qua việc nghiên cứu tài liệu, giáo trình
thông qua các thuật toán, các chương trình giải toán Hình học phẳng trên Maple.
2
CHƯƠNG 1
GIỚI THIỆU PHẦM MỀM MAPLE VÀ CƠ SƠ GROEBNER
1.1. Giới thiệu về phần mềm Maple
1.1.1. Giao diện và môi trường làm việc của Maple
1.1.1.1. Giới thiệu về phần mềm Maple
* Lịch sử phát triển:

Khái niệm đầu tiên về Maple xuất phát từ một cuộc họp vào tháng 11 năm
1980 tại Đại học Waterloo Canada ở Waterloo, Ontarrio, Canada. Những nhà
nghiên cứu tại đại học muốn mua một máy tính đủ mạnh để chạy Macsyma. Thay
vào đó, người ta quyết định sẽ phát triển hệ thống đại số máy tính riêng để có thể
chạy được những máy tính có giá thành hợp lý hơn. Do đó, dự án bắt đầu với mục
tiêu là tạo ra một hệ thống đại số hình thức mà các nhà nghiên cứu và sinh viên có
thể truy cập được.
Sự phát triển đầu tiên của Maple được tiến hành rất nhanh, với phiên bản
hạn chế đầu tiên xuất hiện vào tháng 12 năm 1980. Những nhà nghiên cứu đã thử
nghiệm và loại bỏ rất nhiều ý tưởng khác nhau để tạo ra một hệ thống liên tục cải
tiến. Maple được trình diễn đầu tiên tại hội nghị bắt đầu vào năm 1982.
Đến cuối năm 1983, trên 50 trường đại học đã cài Maple trên máy tính của
họ. Do số lượng hỗ trợ và yêu cầu giấy phép lớn, vào năm 1984, nhóm nghiên cứu
đã sắp xếp với WATCOM Products Inc để cấp phép và phân phối Maple.
Vào năm 1988, do số lượng ngày càng tăng, Waterloo Maple Inc được thành
lập. Mục tiêu đầu tiên của công ty là quản lý những bản phân phối phần mềm. Cuối
cùng, công ty cũng phải mở ra phòng R&D, ở đó khá nhiều sự phát triển cho Maple
được thực hiện tới ngày nay. Sự phát triển đáng kể của Maple tiếp tục diễn ra tại
phòng thí nghiệm trường đại học, bao gồm: Phòng thí nghiệm Tính toán hình thức tại
Đại học Waterloo, Trung tâm nghiên cứu Tính toán hình thức Ontario tại Đại học Tây
Ontario và những phòng thí nghiệm khắp nơi trên thế giới.
3
Vào năm 1989, giao diện đồ họa người dùng đầu tiên của Maple được phát
triển và bao gồm trong bản 4.3 dành cho Macintosh. Những phiên bản trước của
Maple chỉ gồm giao diện dòng lệnh với ngõ ra hai chiều. Bản X11 và Windows với
giao diện mới tiếp bước năm 1980 với Maple V.
Vào năm 1999, với việc phát hành Maple 6, Maple đã đưa vào một số Thư
viện Số học NAG, được mở rộng độ chính xác ngẫu nhiên.
Năm 1995, Maple đã mất khá nhiều thị phần vào tay đối thủ do có giao diện
người dùng yếu hơn.

Vào năm 2003, giao diện “chuẩn” hiện nay được giới thiệu trong Maple 9.
Giao diện này được viết chủ yếu bằng Java (mặc dù có nhiều phần, nhưng luật cho
việc gõ công thức toán học được viết bằng ngôn ngữ Maple). Giao diện Java bị phê
phán là chậm, nhưng sự phát triển được thực hiện trong các bản sau này của
Maple.
Nhưng vào năm 2005, Maple 10 giới thiệu một “chế độ văn bản” mới như
một phần của giao diện chuẩn. Tính năng chính của chế độ này là phép toán được
đưa vào ngõ nhập hai chiều, do đó nó xuất hiện tương tự như công thức trong sách.
Vào năm 2008, Maple 12 đã thêm những tính năng giao diện người dùng giống như
Mathematica, gồm có những kiểu trình bày theo mục đích đặc biệt, quản lý phần đầu
và cuối trang, vùng thực hiện tự động, mẫu hoàn thành lệnh, kiểm tra cú pháp và
vùng tự động khởi tạo. Những tính năng khác được thêm vào để làm cho Maple dễ
dùng hơn như một hộp công cụ Maple. Phiên bản mới nhất hiện nay là Maple 16 ra
đời ngày 3 tháng 3 năm 2012 với các tính năng và gói công cụ vượt trội hơn hẳn
mang bước đột phá của Maple.
* Chức năng cốt lõi:
Người dùng có thể nhập biểu thức toán học theo các ký hiệu toán học truyền
thống. Có thể dễ dàng tạo ra những giao diện người dùng tùy chọn. Phần lớn chức
năng toán học của Maple được viết bằng ngôn ngữ Maple và được thông dịch bởi
nhân Maple. Nhân Maple được viết bằng C. Maple chạy trên tất cả các hệ điều hành
chính.
5
Maple là phần mềm có một môi trường tính toán khá phong phú, hỗ trợ hầu
hết các lĩnh vực của toán học như: Giải tích số, đồ thị, đại số hình thức,… Do đó ta
dễ dàng tính được các giá trị gần đúng, rút gọn biểu thức, giải phương trình, bất
đẳng thức, hệ phương trình, tính giới hạn, đạo hàm, tích phân của hàm số, vẽ đồ thị,
tính diện tích, thể tích, biến đổi ma trận, khai triển các chuỗi, tính toán thống kê, xử
lý số liệu, số phức, phương trình vi phân, phương trình đạo hàm riêng… và lập trình
giải các bài toán với cấu trúc chương trình đơn giản. Ngoài ra với phần mềm này ta
dễ dàng biên soạn các sách giáo khoa điện tử với chức năng Hyperlink tạo các siêu

văn bản rất đơn giản mà không cần đến sự hỗ trợ của bất kỳ phần mềm nào khác
(chẳng hạn PageText, Word, FontPage…). Với các chức năng trên, Maple là công
cụ đắc lực hỗ trợ cho những người làm toán.
* Nguồn gốc tên gọi:
Tên “Maple” không phải là tên viết tắt hoặc từ cấu tạo bằng chữ đầu, mà chỉ
đơn giản là biểu tượng để chỉ hình tượng Lá phong (tiếng Anh là: maple) trên Quốc
kỳ Canada.
1.1.1.2. Giao diện và môi trường làm việc của Maple.
* Khởi động Maple:
Nếu Maple được cài đặt đúng quy trình, để làm việc với Maple ta chọn:
Start -> Programs -> Maple 12 -> Classic Worksheet Maple
Hoặc bấm vào biểu tượng Maple trên màn hình:
* Thoát khỏi Maple:
Ma ple 12.lnk
Để thoát khỏi Maple ta vào File -> Exit hoặc nhấn Alt + F4. Nếu chương
trình chưa được lưu trữ, Maple sẽ nhắc ta cần lưu trữ hay không. Ta chọn Yes để
lưu lại, No là không lưu, Cancel để tiếp tục làm việc.
* Giao diện của cửa sổ làm việc của Maple:
Giao diện làm việc của Maple cũng giống như giao diện của các chương
trình ứng dụng khác trên môi trường Windows, tức là cũng gồm các thanh menu
lệnh. Maple có 2 môi trường làm việc là toán và văn bản. Sau khi khởi động,
Maple tự động bật môi trường toán. Muốn chuyển sang môi trường văn bản, kích
chuột vào biểu tượng “T” trên thanh công cụ. Ngược lại, từ môi trường văn bản,
muốn chuyển sang môi trường toán thì kích chuột vào dấu “[>” trên thanh công cụ.

* Menu Bar (Thực đơn ngang):
Dòng chứa các chức năng, ứng với mỗi chức năng là một thực đơn dọc
tương ứng.
\
* Tool Bar (Thanh công cụ):

Chứa một số biểu tượng (Icon) thể hiện một số lệnh thông dụng để người sử
dụng thao tác nhanh.
1.1.2. Các khái niệm và hàm cơ bản trong lập trình trên Maple.
- Tên (name) và xâu kí tự:
Tên là mộ: xâu hình tự (string of letters) được dùng như một chỉ mục hay
một nhãn để đại diện cho các đối tượng trong Maple có thể thay đổi được (như
biến, kí hiệu toán học, các biểu thức nói chung, …) mà ta có thể gán cho nó. Tên là
một trong các thành phần không thể thiếu của Maple trong việc tạo ra các biểu
thức. Chiều dài tối đa của tên phụ thuộc vào hệ máy tính mà Maple chạy trên đó
(với máy 32-bit thì chiều dài tối đa của tên là 524275).
Bất cứ biểu thức nào đều có thể được gán cho một cái tên. Nếu không có giá trị
nào được gán cho một tên thì nó sẽ nhận chính tên nó làm giá trị mặc định.
Chương trình Maple sử dụng tên bắt đầu với một dấu gạch dưới ( _ ) làm các biến
toàn cục và vì thế chúng ta nên tránh sử dụng chúng.
- Một xâu kí tự bất kỳ (string of characters) có thể không phải là xâu hình tự
(vì có thể chứa các kí tự đặc biệt như: khoảng trống, dấu chấm than, …) và do đó
không thể là một tên hợp lệ. Tuy nhiên, Maple cho phép tạo một tên từ một xâu kí
tự bất kỳ bằng cách cho nó vào trong cặp dấu nháy đơn (`) (backquote), thí dụ như
xâu kí tự `a variable!` là một tên biến hợp lệ và người ta có thể gán cho nó giá trị
10 bằng lệnh `a variable`:=10.
Một xâu hình tự thường là một tên hợp lệ và được xem là trùng với tên được tạo
bằng cách bao xung quanh xâu này bằng các cặp dấu nháy (vì thế mà x và `x` đều
chỉ đến một tên). Tuy nhiên, nếu xâu hình tự mà trùng với từ khóa của Maple thì
không phải là một tên hợp lệ và muốn cho nó trở thành một tên ta lại phải cho nó
vào trong cặp dấu nháy.
Hai dấu nháy liên tiếp trong một xâu kí tự sẽ được hiểu như là một dấu. Ví dụ như
khi ta viết: print (`I’m a student`);  kết quả sẽ cho ta xâu: I’m a student.
1.1.3. Lập trình toán học trên Maple.
Một chương trình tính toán thường có ba phần:
- Dữ liệu vào

- Phương pháp
- Kết quả
Cấu trúc của một chương trình cơ bản trong Maple thường có dạng:
Tên_chương_trình := proc(các đối số);
local các biến;
Thuật toán xử lý;
End;
Sau đây là một số các lệnh lập trình cơ bản:
* Vòng lặp while:
+ Cấu trúc cú pháp: while
condition
do
sequence expressions
od;
+ Chức năng:
Vòng lặp while cho phép lặp chuỗi các lệnh nằm giữa do và od khi mà điều
kiện condition vẫn còn đúng (tức là biểu thức điều kiện cho giá trị true). Điều kiện
condition được kiểm tra ngay tại đầu mỗi vòng lặp, nếu nó thỏa mãn (giá trị của nó
là đúng) thì các câu lệnh bên trong được thực hiện, sau đó lại tiếp tục kiểm tra điều
kiện condition cho đến khi điều kiện không còn thỏa mãn nữa. Vòng lặp while
thường được sử dụng khi số lần lặp một hay một chuỗi biểu thức là không xác định
rõ, đồng thời ta muốn các biểu thức đó còn cần được lặp trong khi một điều kiện
nào đó còn được thỏa mãn.
Điều kiện condition trong vòng lặp phải là một biểu thức boolean, tức là giá
trị của nó có thể đúng hoặc sai, nếu không thì sẽ sinh ra lỗi.
Trong trường hợp muốn thoát ra khỏi vòng lặp ngay từ trong giữa vòng lặp,
ta có thể thực hiện bằng cách dùng câu lệnh return, quit hoặc break. Chú ý rằng
vòng lặp while-do-od, không bắt buộc phải nằm trên nhiều dòng lệnh nhưng người
ta thường viết trên nhiều dòng để câu lệnh dễ đọc và dễ hiểu hơn.
* Vòng lặp for :

+ Cấu trúc cú pháp:
For name from start by change to finish
Do
Atatement aequence
Od;
+ Chức năng:
Vòng lặp for được dùng để lặp một chuỗi các biểu thức được đặt giữa do và
od, mỗi lần lặp tương ứng với một giá trị phân biệt của biến chỉ số name đứng sau
từ khóa for. Ban đầu, giá trị strart được gán cho biến chỉ số. Nếu giá trị của biến
name nhỏ hơn hay bằng giá trị finish thì chuỗi lệnh nằm giữa do và od được thực
hiện, sau đó biến name được gán giá trị tiếp theo bằng cách cộng thêm vào nó giá
trị change (name:= name + change). Sau đó, biến name được so sánh với finish để
quyết định xem việc thực hiện chuỗi lệnh có được tiếp tục nữa không. Quá trình so
sánh biến chỉ số name và thực hiện chuỗi lệnh được lặp lại liên tiếp cho đến khi giá
trị của biến name lớn hơn giá trị finish. Giá trị cuối cùng của biến name sẽ là giá trị
vượt quá finish đầu tiên.
* Lệnh điều kiện if
+ Cấu trúc cú pháp:
If condition then
Statement sequence
[ elif condition then statement sequence ]
[ else statement sequence ]
Fi;
+ Chức năng:
Nếu bạn muốn một dãy biểu thức được thực hiện khi điều kiện nào đó được
thỏa mãn và một dãy biểu thức khác được thực hiện nếu trái lại thì có thể dùng câu
lệnh if - then - else - fi. Trong câu lệnh trên, nếu điều kiện condition là đúng thì
chuỗi biểu thức đứng sau then sẽ được thực hiện, nếu trái lại thì điều kiện
condition sau từ khóa elif sẽ được kiểm tra, nếu nó đúng thì chuỗi lệnh tương ứng
sau then được thực hiện, cứ tiếp tục cho đến khi các điều kiện condition đều không

thỏa mãn, thì các biểu thức sau lệnh else được thực hiện.
Lưu ý rằng cấu trúc lệnh (tùy chọn) elif … then … được lặp lại với số lần tùy ý. Từ
khóa elif là dạng viết tắt của else if.
Các biểu thức điều kiện (codition) được sử dụng trong câu lệnh if phải được
tạo thành từ các bất đẳng thức, các đẳng thức (các phép toán quan hệ), các biến số,
các phép toán logic, các hàm có giá trị trả lại là giá trị logic. Nếu trái lại thì sẽ gây
ra lỗi.
* Lệnh break:
Cấu trúc và một số lưu ý
Cú pháp: break
+ Chức năng:
Trong vòng lặp while/for đang được thực hiện, nếu lệnh break được gọi thì
chương trình sẽ thoát ngay lập tức ra khỏi vòng lặp while/for tận trong cùng nhất
mà có chứa lệnh break (vì cũng có thể có nhiều vòng lặp while/for được lồng
nhau). Một số ví dụ khá điển hình trong việc sử dụng lệnh break là trong quá trình
tìm kiếm (search), rõ ràng là bạn sẽ muốn dừng quá trình quét lại ngay khi bạn tìm
5
thấy đối tượng cần tìm. Khi đó, ngay tại thời điểm tìm thấy, bạn dùng lệnh break
để nhảy ra khỏi vòng tìm kiếm. Trước lệnh break thường có một câu lệnh điều kiện
if … then …
Nếu lệnh break dùng ngoài các vòng lặp while/for thì sẽ sinh ra lỗi.
Chú ý:
Từ break không phải là từ khóa (từ dành riêng cho Maple), vì vậy ta có gán
giá trị cho biến có tên là break, mà không hề sinh ra lỗi (mặc dù điều này là không
nên).
* Lệnh next:
+ Cấu trúc và chức năng:
Cũng giống như câu lệnh break, lệnh next được thực hiện trong vòng lặp
while/for với mục đích bỏ qua một số lệnh bên trong vòng lặp để nhảy qua lần lặp
tiếp theo. Khi lặp lệnh next trong vòng lặp, chương trình bỏ qua các lệnh tiếp theo

của vòng lặp tận cùng nhất chứa next cho đến khi gặp từ khóa xác định kết thúc
vòng lặp (ở đây là lệnh od). Đến đây vòng lặp tiếp tục nhảy qua lần lặp tiếp theo
(nếu có thể) bằng cách tăng chỉ số hoặc kiểm tra điều kiện để quyết định xem có
nên thực hiện vòng lặp tiếp theo.
Lệnh next sinh ra lỗi nếu nó được gọi ngoài vòng lặp while/for. Tương tự
như break, next cũng không phải là từ khóa, do đó ta hoàn toàn có thể gán cho next
một giá trị (xem như next là một biến). Ngay trước lệnh next cũng thường là một
câu lệnh điều kiện if … then …
1.1.4. Lệnh và kết quả của Maple
* Lệnh và kết quả của Maple (Maple Input and Output).
+ Lệnh của Maple (Maple Input) là những từ tựa tiếng Anh được sử dụng
theo một nghĩa nhất định và phải tuân theo cú pháp của Maple. Lệnh được nhập
sau dấu nhắc lệnh “ [> ” và kết thúc bởi dấu “ : ” hoặc “ ; ”,
Ví dụ 1.1.
[> solve(5*x^2 + 3*x-,{x}); 
Mỗi câu lệnh của Maple nếu kết thúc lệnh bằng dấu “ ; ” kết quả sẽ hiển thị ngay ra
màn hình, nếu kết thúc lệnh bằng dấu “:” kết quả sẽ không hiển thị ra màn hình.
6
Lệnh được thực hiện khi con trỏ ở trong hoặc ở cuối dòng lệnh mà ta nhấn Enter
().
Lệnh của Maple có hai loại lệnh là lệnh trơ và lệnh trực tiếp. Lệnh trơ và
lệnh trực tiếp chỉ khác nhau ở chữ cái đầu tiên của lệnh trơ viết chữ in hoa chỉ cho
ta biểu thức đặc trưng, lệnh trực tiếp cho ra chữ thường cho ra kết quả ngay.
Ví dụ 1.2.
Tính
x
xx
Lim
x
3

0
6442
−−+
>−
(Đề thi tuyển sinh khối D- năm 1999).
- Nếu ta sử dụng lệnh trơ Limit, kết quả như sau:
[> Limit((2*sqrt(x+4)-(64-x)^(1/3))/x,x=0); 

lim
→ x 0

2
+
x 4 ( )

64 x
( )/1 3
x
- Nếu ta sử dụng lệnh trực tiếp limit, kết quả như sau:
[> limit((2*sqrt(x+4)-(64-x)^(1/3))/x,x=0); 

+
1
2
1
192
64
( )/1 3
Tuy nhiên kết quả trên chưa gọn, ta có thể sử dụng lệnh sau:
[> simplify(limit((2*sqrt(x+4)-(64-x)^(1/3))/x,x=0)); 


25
48

như vậy kết quả
+
1
2
1
192
64
( )/1 3

sau khi rút gọn là
25
48
+ Kết quả của Maple (Maple Output) sẽ được đưa ra màn hình, thường là
màu xanh cô ban sau khi nhấn phím Enter “” để thực hiện câu lệnh.
1.1.5. Ứng dụng của Maple trong hình học.
Maple cung cấp hai gói công cụ để xử lý các bài toán trong hình học, đó là
các gói geometry cho hình học phẳng và gói geom3d cho hình học không gian.
Các hàm xử lý trong các gói công cụ này thực hiện các thao tác cơ bản để giải các
bài toán hình học như viết phương trình đường thẳng, mặt phẳng, mặt cầu, …, tính
diện tích tam giác, tứ giác, hình tròn, …, tính khoảng cách từ một điểm tới một
7
đường thẳng hoặc một mặt phẳng … Nhìn chung, để giải được một bài toán hình
học trong Maple, trong phần lớn các trường hợp, ta phải kết hợp các hàm xử lý cơ
bản lại với nhau để giải quyết yêu cầu của bài toán. Trong phần dưới đây, chúng
tôi không trình bày về cách thức sử dụng các hàm trong các gói công cụ trên mà
chỉ đưa ra một số ví dụ để chúng ta thấy được khái quát về ứng dụng của Maple

trong hình học.
Ví dụ 1.3.
Kiến thức về các đường côníc được trang bị cho học sinh cuối cấp ở bậc
trung học phổ thông, để giúp cho học sinh và các thầy cô giáo có được công cụ học
tập cũng như giảng dạy học phần này, Maple cung cấp gói công cụ
Student[Precalculus][ConicsTutor].
[>with(Student[Precalculus]):
[>ConicsTutor(x^2+4*y^2=1);
8
Ví dụ 1.4.
Trong chương trình Toán ở bậc trung học cơ sở, rất nhiều bài toán có đề cập
tới tam giác và các yếu tố liên quan tới tam giác như đường trung tuyến, đường
cao, đường trung trực, đường tròn nội tiếp, ngoại tiếp, bàng tiếp tam giác, …Vấn
đề đặt ra ở đây là làm thế nào để xác định được các yếu tố đó một cách nhanh
chóng khi chỉ biết được tọa độ 3 đỉnh của tam giác. Trong ví dụ sau muốn minh
họa việc tổng hợp các hàm cơ sở mà Maple cung cấp để giải bài toán tìm một số
yếu tố của tam giác khi biết tọa độ 3 đỉnh của tam giác đó.
Quan sát mã chương trình dưới đây:
- Dựng đường tròn ngoại tiếp một tam giác: circumcircle()
T
9
- Dựng đường tròn nội tiếp một tam giác: incircle()
T
- Dựng đường tròn bàng tiếp tam giác: excircle()
10
- Dựng giao điểm giữa đường thẳng và đường tròn khi biết các phương
trình của chúng:
Đối với đường thẳng x +y = 1 và đường tròn
2 2
1x y

+ =
[> line(l, x + y = 1, [x,y]); circle(c, x^2 + y^2 = 1, [x,y]);
intersection(P, l, c,[M,N]); detail(P);
draw({l,c});
- Dựng giao điểm của hai đường tròn khi biết phương trình của chúng:
Với hai đường tròn c1có tâm (0,0) bán kính 1; và c2 có tâm O(2,0) bán
kính 1.5
[> circle(c1, x^2 + y^2 = 1, [x,y]);
circle(c2,[point(O,2,0),1.5],[x,y]);
intersection(H,c2,c1,[U,V]);
detail(H);
- Vẽ hai đường tròn cắt nhau ở trên như sau:
[> draw({c1,c2});
- Tìm toạ độ trung điểm M của đoạn thẳng AB: midpoint()
Với A(1,2), B(3,6)
11
[>point(A,1,2);point(B,3,6);
- Tìm toạ độ trọng tâm G của tam giác ABC: centroid()
Tam giác ABC có 3 đỉnh A(1,7), B(2,8), C(9,12)
[>tamgiac:=[point(A,1,7),point(B,2,8),point(C,9,12)];
centroid(tamgiac,G); coordinates(G);
- Tìm toạ độ trực tâm H của tam giác ABC: orthocenter()
Tam giác ABC có 3 đỉnh A(3,4), B(2,5), C(9,1)
[>tamgiac:=[point(A,4,3),point(B,2,5),point(C,9,1)];
orthcenter(H,tamgiac);coordinates(H);
- Viết phương trình đường trung tuyến mA của tam giác ABC: median()
Tam giác ABC có 3 đỉnh A(3,4), B(2,5), C(9,1), hãy viết phương trình
đường trung tuyến mA của tam giác ABC.
[> triangle(ABC,[point(A,4,3),point(B,2,5),point(C,9,1)]);
median(mA,A,ABC);detail(mA);

midpoint(A,B,M); coordinates(M);
Ví dụ 1.5.
Trong không gian cho 4 điểm A(0,0,0), B(0,1,1), C(0,1,4) và D(5,1,4). Gọi
(S) là mặt cầu tâm B có bán kính R=1. Viết phương trình mặt phẳng (P) đi qua A,
C và D đồng thời tính khoảng cách từ B tới mặt phẳng (P), từ đó suy ra vị trí tương
đối giữa mặt phẳng (P) và mặt cầu (S).
Dưới đây là mã chương trình giải bài toán này.
[>restart;
[>with(geom3d):
point(A,0,0,0):point(B,0,1,1):point(C,0,1,4):point(D,5,1,4):
12
plane(P,[A,C,D],[x,y,z]):
print(`Phuong trinh mat phang P:`);
Equation(P);
print(`Khoang cach tu B toi mat phang P:`);
h:=distance(B,P);
print(`Ta thay h<R -> Mat phang P cat mat cau S`);
sphere(S,[B,1]):
draw({S,P(color=blue)},title=`Hinh ve minh hoa`)
13
1.2 Định nghĩa cơ sở Groebner
1.2.1. Định nghĩa cơ sở Groebner
1.2.1.1. Thứ tự từ
* Thứ tự, giả thứ tự:
Định nghĩa. Quan hệ R trên tập X được là một thứ tự (bộ phận), nếu nó thỏa mãn
điều kiện sau đây đối với mọi x, y, z

X
(i) x R x (tính chất phản xạ)
(ii) Nếu x R y và y R z thì x R z (tính chất bắc cầu)

(iii) Nếu x R y và y R x thì x = y (tính chất phản đối xứng)
Ví dụ 1.6.
• Quan hệ nhỏ hơn hoặc bằng trên R là một thứ tự toàn phần. Tuy nhiên
đây là quan hệ thứ tự bộ phận trên C (vì -1 < 0 nhưng -1 = i
2
> 0 vô lí)
• Quan hệ chia hết cho là một thứ tự bộ phận trên tập N, nhưng chỉ là
giả thứ tự bộ phận trên Z (vì chẳng hạn 4
M
2 nhưng -4
M
2 nhưng 4 ≠ - 4)
* Thứ tự từ:
Định nghĩa. Thứ tự từ

là một thứ tự toàn phần trên tập M tất cả các đơn thức của
K[x] thỏa mãn các tính chất sau:
(i) Với mọi m

M, 1

m
(ii) Nếu m
1
, m
2
, m

M mà m
1



m
2
thì

m.m
1

m. m
2.
* Từ khởi đầu, đơn thức đầu:
Kí hiệu R = K[ ] và là tập đơn thức của nó.
Định nghĩa. Cho là một thứ tự từ và f R = K[ ]. Từ khởi đầu của f, kí
hiệu là (f), là từ lớn nhất của đa thức f đối với thứ từ .
Nếu (f) = , 0 K , thì được gọi là hệ số đầu và
đơn thức đầu của f đối với thứ tự từ
14
Nếu thứ tự từ đã được ngầm hiểu, ta sẽ viết in(f) (t.ư. 1c(f), 1m(f) thay
cho (f)) (t.ư. (f) (f)).
Từ khởi đầu của đa thức 0 được xem là không xác định (có thể nhận giá trị
tùy ý).
Ví dụ 1.7.
Cho . Viết theo thứ tự các từ
giảm dần, ta có:
a. Đối với thứ tự từ điển mà x > y > z :
f = và (f) = .
b. Đối với thứ tự từ điển phân bậc mà x > y > z :
f = và (f) = .
c. Đối với thứ tự từ điển ngược mà x > y >z :

f = và (f) = .
Trong đó khi lm(f ) = lm(g) thì max { in(f), in(g)} được hiểu như α lm(f) với
0 ≠ α

K nào đó.
* Iđêan khởi đầu:
Khái niệm sau là xuất phát điểm hình thành lí thuyết cơ sở Groebner.
Định nghĩa. Iđêan khởi đầu:
• Cho I là iđêan của R và ≤ là một thứ tự từ. Iđêan khởi đầu của I, kí
hiệu là in

(I), là iđêan của R sinh bởi từ dấu của các phần tử của I, nghĩa là :
in

(I) = (in

(f)│f

I)
• Cũng như trên ta sẽ viết in(I) thay vì in

(I) nếu

đã rõ.
• Rõ ràng cũng có in(I) = (lim(f)│f

I), nên in(I) là iđêan đơn thức.
1.2.1.2. Cơ sở Groebner
Định nghĩa. Cơ sở Groebner:
• Cho


là một thứ tự từ và I là một iđêan của I, tập hữu hạn các đa
thức khác không g
1
,…, g
s

I được gọi là một cơ sở Groebner của I đối với thứ tự
từ

, nếu:
15
in

(I) = (in

(g
1
) ,…, in

(g
s
)).
Tập g
1
, …, g
s

I được gọi là cơ sở Groebner là cơ sở chuẩn tắc. Từ bổ đề
Dickson suy ra mọi iđêan đều có cơ sở Groebner (hữu hạn).

Chú ý ở đây ta luôn hiểu cơ sở như một hệ sinh. Tuy nhiên ở định nghĩa trên
chưa thấy rõ liệu bản thân g
1
, …, g
s


phải là cơ sở của I hay không ?
Kết quả sau đây khẳng định điều đó:
Ví dụ 1.8.
Cho I = (xy, x
3
)

K [x,y] và

f
1
= xy, f
2
=5xy - y
3
. Cho x > y, khi đó in
≤ rlex
(f
1
) = in
≤ glex
(f
2

) = xy, nên { f
1,
f
2
} không là cơ sở Groebner của I đối với

glex
, vì in

glex
(I) = (I). Tuy nhiên, in
≤ glex
(f
1
) = in
≤ rlex
(f
1
) = xy, in
≤ rlex
(f
2
) = y
3
và in

glex
(I) = in
≤ rlex
(I)

= (I) nên f
1,
f
2
là cơ sở Groebner của I đối với thứ tự từ điển ngược.
1.2.2. Đại số hóa định lý hình học trên Maple.
Ý tưởng của việc áp dụng cơ sở Groebner để chứng minh định lí hình học sơ
cấp xuất phát từ nhận xét: Khi biểu diễn các hình hình học trong tọa độ Descartes
vuông góc thì hầu hết các hình hình học hoặc biên của nó có thể xem là các không
điểm của các đa thức và các quan hệ giữa chúng đều có thể mô tả bằng phương trình
đa thức. Như vậy, có thể đại số hóa một số định lí hình học thành bài toán sau đây:
Giả thiết: Cho hệ phương trình
f
1
= 0, f
2
= 0, … , f
s
= 0 (*)
Kết luận: Khi đó mọi nghiệm thực của hệ (*) phải thỏa mãn các phương trình:
g
1
= g
2
= … = g
r
= 0
Ở trên f
i
, g

j
là các đa thức với hệ số thực. Tập biến được chia làm hai loại:
biến độc lập (không xuất hiện trong các f
i
) và biến phụ thuộc.
1.2.3. Quy trình chứng minh định lý hình học trên Maple
Quy trình chứng minh định lý hình học trên Maple được tóm tắt thông qua
các bước sau đây:
Bước 1: Đại số hóa bài toán hình học.
Bước 2: Chạy trên phần mềm Maple tìm cơ sở Groebner của iđêan (f
1
= 0,
…, f
s
, 1- yg) với chú ý xem các biến độc lập như tham số.
Bước 3: Cơ sở Groebner của iđêan (f
1
= 0 , … , f
s
, 1-yg) chứa các đa thức 1
16
khi và chỉ khi định lí hình học cần chứng minh là đúng.
Chú ý:
Nếu tại bước 2 ta vẫn xem các biến độc lập là biến, thì tại bước 3 nếu cơ sở
Groebner của iđêan (f
1
= 0, …, f
s
, 1- yg) chứa đa thức 1 hoặc chứa đa thức chỉ chứa
biến độc lập, thì ta vẫn kết luận được định lí hình học cần chứng minh là đúng. Tuy

nhiên điều ngược lại chỉ đúng nếu ta chọn thứ tự từ khử đối với các biến không độc
lập và y (chẳng hạn dùng plex và xếp các biến độc lập ở sau cùng).
1.2.4. Cơ sở Groebner trong Maple
Mục này chúng tôi xin trình bày một số lệnh của Maple 9.5 trong việc ứng
dụng cơ sở Groebner để giải một số bài toán hình học phẳng đó là gói Groebner.
Để sử dụng được gói lệnh này phải gọi nó ra bằng cách đánh:
[>with(Groebner);
Trong Maple lệnh bắt đầu bằng “[>” và kết thúc bằng dấu “;”. Một khi gói
Groebner được chạy ta có thể thực hiện thuật toán chia, tính cơ sở Groebner và
thực hiện các lệnh mô tả đưới đây.
Trong Maple, một thứ tự từ được gọi là một termorder. Khi xét các thứ tự từ
dễ sử dụng nhất là thứ tự từ điển ngược. Thứ tự từ điển được gọi là plex (tức “pure
lexicographic”) và thứ tự từ điển ngược được gọi là tdeg (tức “total degree”), cẩn
thận nhầm lẫn tdeg với glex. Maple cần biết termorder muốn dùng (plex hay tdeg)
và một danh sách các biến.
Ví dụ 1.9. Để Maple sử dụng thứ tự từ điển với các biến x> y > z, ta cần nhập plex
(x, y, z).
Gói này cũng biết một thứ tự từ khử. Để khử k biến đầu tiên từ x
1
, … , x
n
, có
thể sử dụng lexdeg ([ x_1,…,x_k], [x_{k+1}, …,x_n]) (nhớ rằng Maple bao quanh
một số danh sách dấu ngoặc [ … ]).
Các lệnh sử dụng phổ biến trong gói Groebner của Maple là normalf để thực
hiện thuật toán chia và gbasis để tính một cơ sở Groebner. Trên normalf tương ứng
với “normal form” và lệnh có cú pháp như sau:
[>normalf(f,polylist,term_order);
Kết quả là phần dư của f trong phép chia cho các đa thức trong danh sách
polylist sử dụng thứ tự từ quy định bởi term_order.

17
Ví dụ 1.10. Để chia x
3
+3y
2
cho x
2
+y và x+2xy sử dụng thứ tự từ điển ngược với x
> y, sẽ nhập:
[>normalf(x^3+3*y^2, [x^2+y,x+2*x*y],tdeg(x,y));
Cho kết quả 3y
2
+x/2. Trường cơ sở ở đây là những trường số hữu tỷ Q. Chú
ý rằng normalf không cho được các thương trong thuật toán chia.
Ta có thể đoán trước được, gbasic tương ứng với “Grobner basis” và cú
pháp như sau:
[>gbasic(polylist, term_order);
Tính một cơ sở Groebner của một iđêan sinh bởi các đa thức trong polylist
với quan hệ thứ tự từ quy định bởi term_order. Kết quả là một cơ sở Groebner rút
gọn. Xem lệnh về cách tính cơ sở Groebner sau:
Ví dụ 1.11.
[>gb:=gbasic([ x^2+y,x+2*x*y],plex(x,y));
Tính toán ra một danh sách (và kí hiệu là gb) mà nó là cơ sở Grobner của
iđêan (x
2
+y, 2xy+ y
2
) Q[x,y] sử dụng thứ tự từ điển x > y.
Nếu bạn sử dụng các đa thức với hệ số nguyên hay hữu tỷ trong normalf hay
gbasic, Maple sẽ giả định rằng bạn đang thực hiện trên trường Q. Chú ý rằng ở đây

không giới hạn trên kích thước của các hệ số. Để Maple cố định một biến trong
trường cơ sở (một tham số), bạn chỉ cần bỏ qua nó trong danh sách các biến trong
term_order. Do đó,
[> gbasic(v* x^2+y,u*x*y+ y^2], plex(x,y));
Sẽ tính một cơ sở Groebner của (v x
2
+y, uxy+y
2
) Q(u,v)[x,y] với thứ tự từ
điển với x > y.
Một số lệnh phổ biến khác trong gói Groebner là:
leadmon(f, term_order), để tính lm(f) và lc(f) của một đa thức f với quan hệ
term_order. Lệnh liên quan là leadtem(f, term_order) để tìm lm(f) và leadcoeff(f,
term_order) để tìm l(f).
spoly(f, g, term_order), để tính s – đa thức s(f,g) của hai đa thức đối với mối quan
hệ term_order.
is_solvable (F, X), để xác định xem hệ phương trình đa thức F có ít nhất một
nghiệm trên trường đóng đại số X.
18

×