Trong phạm vi tiểu luận này, tôi trình bày ứng dụng của Maple vào bài toán giảitam giác: người dùng nhập vào giả thiết: giá trị của vài thường là 3 yếu tố của tam giácnhư cạnh a, góc B,
Trang 1Đại Học Quốc Gia TP.HCM
Trường Đại Học Công Nghệ Thông Tin
Trang 2NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
TP.HCM - 2013
Trang 3
MỤC LỤC
Trang 4I GIỚI THIỆU
Maple là một phần mềm tính toán hình thức (formal computation) do Đại họcWaterloo của Canada phát triển từ 1980 với mong muốn giúp máy tính có thể làm việcvới được với các ký hiệu toán học truyền thống của con người (đạo hàm, tích phân, matrận, định thức, …) Ngày nay, Maple còn làm được nhiều hơn rất nhiều: hỗ trợ các tínhtoán hình thức, tính toán số học với độ chính xác rất lớn, giải và biện luận các phươngtrình, hệ phương trình, vẽ đồ thị 2 chiều, 3 chiều, … Ngoài ra, Maple cũng hỗ trợ choviệc lập trình cấp cao Nói chung, Maple là một công cụ rất mạnh cho phép người ta cóthể giải quyết nhiều bài toán lớn trong nhiều lĩnh vực khoa học khác nhau
Trong phạm vi tiểu luận này, tôi trình bày ứng dụng của Maple vào bài toán giảitam giác: người dùng nhập vào giả thiết: giá trị của vài (thường là 3) yếu tố của tam giác(như cạnh a, góc B, cạnh c) và yêu cầu (phần kết luận) chương trình ứng dụng tính cácyếu tố còn lại (diện tích S, nữa chu vi p, bán kính vòng tròn ngoại tiếp R, nội tiếp r, cácgóc A,C, cạnh b, các đường cao, phân giác, …) Ngoài ra, chương trình ứng dụng cũngđáp ứng yêu cầu loại bỏ các bước tính thừa và xuất ra kết quả qua từng bước tính cụ thể
Do thời gian eo hẹp nên chưa kịp trình bày dưới dạng ứng dụng hoàn chỉnh (viếtgiao diện bằng C# và kết nối Maple để nhập giả thiết, kết luận và xuất lời giải theo cáchtruyền thống)
Chương trình ứng dụng này có thể dể dàng chuyển thành bài toán giải các hìnhhình học phẳng khác như hình chử nhật, hình bình hành, … bằng cách thay tập công thứccủa tam giác bằng các tập công thức của các hình đó
Xin chân thành cảm ơn Thầy, PGS.TS Đỗ Văn Nhơn đã giới thiệu và truyền đạtnhững kiến thức nền tảng, chỉ ra những khả năng mạnh mẻ và các hướng phát triển ứngdụng lý thú của phần mềm này, phục vụ cho quá trình học tập nghiên cứu về sau
Trang 5II NỘI DUNG
1 Một số lệnh MAPLE sử dụng trong chương trình
a Cấu trúc điều khiển – vòng lặp
i Lệnh điều khiển:
if <biểu thức điều kiện> then <chuỗi lệnh>
| elif <biểu thức điều kiện> then <chuỗi lệnh> |
| for <name>| |from <expr>| |by <expr>| |to <expr>| |while <expr>|
do <chuỗi lệnh> end do;
iii Lệnh ngắt (break)
Trong lúc 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).
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.
Trang 6Chú ý: break không phải là từ khoá (từ dành riêng cho Maple), vì vậy ta có thể 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) Break
iv Lệnh next
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 gặ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ừ khoá 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
b Một số kiểu dữ liệu dùng trong chương trình
i Kiểu sequence (dãy)
Là một nhóm các đối tượng được sắp xếp theo thứ tự và ngăn cách nhau bởi dấu phẩy Dãy có thể được gán cho 1 biến.
Ví dụ : X := a , b , c , d;
Hàm seq, và ký hiệu toán tử $.
> seq(a^n,n=0 10);# tạo ra dãy phần tử theo công thức a^n với n chạy từ 0 đến 10
a$4; # tạo ra 4 phần tử là a
Trang 7ii Kiểu Set (tập hợp)
- Cú pháp (là một dãy bao trong cặp dấu ngoặc nhọn)
nops: trả về số phần tử của biểu thức
op : trả về một dãy gồm các toán hạng của biểu thức
Trang 8L:={a,b,c};# kiểu set
Thêm một phần tử vào List
Trang 92 Bài toán giải tam giác
a. Phân tích bài toán
Trong một tam giác nếu biết 3 yếu tố (trong đó có 1 cạnh hay các yếu tố khác cóthể tính ra cạnh) thì người ta có thể tính được các yếu tố khác nhờ vào các công thức thểhiện các mối quan hệ giữa các yếu tố trong tam giác
i Tập các biến (yếu tố) trong tam giác gồm:
• a,b,c : các cạnh
• A, B, C: các góc tương ứng đối diện với 3 cạnh a, b, c
• ha, hb, hc: 3 đường cao tương ứng với 3 cạnh a, b, c
• ma, mb, mc: 3 đường trung tuyến tương ứng với 3 cạnh a, b, c
• pa, pb, pc: 3 đường phân giác trong tương ứng với 3 cạnh a, b, c
• S: diện tích
• p: nữa chu vi
• R: bán kính đường tròn ngoại tiếp
• r: bán kính đường tròn nội tiếp
Trang 10• Đường cao:
Trang 11• Công thức tính các đường phân giác trong
oooTrong chương trình ứng dụng (trên giao diện Maple) người dùng sẽ nhập vào giảthiết (các yếu tố cho trước) và kết luận (các yếu tố cần tính) như ví dụ bên dưới rồi nhấnEnter
Chương trình sẽ tính và xuất kết quả (xem hình)
Nhập klNhập gt
Trang 12b Cấu trúc dữ liệu của bài toán
Để cài đặt bài toán này trong Maple, đã dùng các cấu trúc dữ liệu sau:
Trang 13iii gt
Giả thiết: tập các biến cho trước - kiểu tập hợp, trong đó mỗi phần tử của tập gt làmột biểu thức xác định giá trị của các biến cho trước
Trang 14iv Known
Tập các biến đã biết – kiểu tập hợp: lúc đầu chính là giả thiết gt, qua từng bước sẽđược bổ sung các biến đã tính được khác
v kl
Kết luận: tập các biến cần tìm, kiểu tập hợp
vi Solution, sol, sol1
Danh sách các lời giải của bài toán, trong đó mỗi phần tử là một danh sách gồm 2phần tử: phần tử 1: công thức đã sử dụng, phần tử 2: biến được tính từ công thức
c Giải thuật
Giải thuật của chương trình dựa trên thuật toán suy diễn tiến Ngoài ra, chươngtrình ứng dụng cũng sử dụng giải thuật loại bỏ luật thừa để rút gọn lời giải bỏ qua cácbước không cần thiết cuối cùng là thủ tục in ra từng bước trong quá trình tính các yếu tốcần tính
i Thuật giải suy diễn tiến
• Mô tả: lần lượt xét từng công thức trong tập công thức Formulae:
Nếu công thức nào chỉ còn 1 yếu tố chưa biết thì dùng nó để tính giá trị yếu
tố chưa biết rồi đưa giá trị vừa tính vào tập các yếu tố đã biết Known và đưa công thức vào danh sách lời giải Solution
Sau khi xét hết các công thức mà chưa tìm được các giá trị cần tính thì kết
Trang 15luận bài toán không có lời giải
Ngược lại, lời giải là danh sách Solution
• Dữ liệu nhập: tập giả thiết gt và tập kết luận kl
• Dữ liệu xuất: Danh sách lời giải Solution.
• Các biến tạm: Solution, Known, f
Bước 1: Solution := []; //danh sách các công thức được sử dụng
Known := gt; //tập các yếu tố đã biết
Bước 2: While (kl chưa nằm trong map(xlhs(x), Known)) do
//lặp khi chưa tìm được hết các yếu tố cần tính
// map(xlhs(x), Known): lấy vế trái các công thức trong Known
2.1 Tìm công thức f ∈ Formulae sao cho từ f và Known có thể tính được yếu tốmới; //tìm f sao cho trong f có đúng 1 biến chưa biết
2.2 if (không tìm được f) then Dừng: không tìm được lời giải;
2.3 else
2.3.1 Thêm f vào Solution;
2.3.1 Xác định biến mới sẽ tính ra: Vnew = V(f) –V(Known);
//V(f) = indets(f): tập các biến của f //V(Known) = indets(Known): tập các biến của Known
Thay thế và giải Newfact:= solve(subs(Known,f),Vnew);
Known:= Known union Newfact;
End while
Bước 3: return Solution;
Cài đặt giải thuật Suy diễn tiến
Trang 16Chú thích:
• indets(f,’name’): hàm trả về tập các biến của công thức f
• indets(Known): hàm trả về tập các biến của Known
• nops(indets(f,’name’) minus indets(Known)): trả về số biến chưa có trong Known
• op(indets(f,’name’) minus indets(Known)): trả về biến trong f mà chưa có trong Known
• [f, op(indets(f,’name’) minus indets(Known))]: 1 lời giải mới là 1 danh sách gồm 1công
thức f và 1 biến vừa tính được
• Solution := [op(Solution), [f, op(indets(f,’name’) minus indets(Known))]]; : thêm lời
giải mới vào danh sách Solution
• op(indets(f,’name’) minus indets(Known)) >0 : ràng buộc biến cần tính phải dương (để
tránh trường hợp công thức tính biến dưới dạng căn bậc 2 sẽ cho giá trị biến là cặp giá trị đối nhau ( có 1 giá trị âm)
Trang 17• hpt := {f, op(indets(f,’name’) minus indets(Known)) >0} : hệ phương trình gồm công
thức f và ràng buộc biến cần tính >0
• op(eval(solve(subs(Known,hpt), op(indets(f,’name’) minus indets(Known)))))} : thế các
giá trị các biến đã biết từ Known vào hệ phương trình rồi giải Kết quả sẽ xác định được biến mới tính được và giá trị của nó
ii Thuật giải loại bỏ luật thừa
• Mô tả:duyệt f theo chiều ngược trong danh sách Solution (bắt đầu từ công thức cuối): Nếu bỏ công thức f ra khỏi Solution mà kl vẫn nằm trong Known thì loại hẳn f ra khỏi Solution
• Dữ liệu nhập: sol //(danh sách lời giải Solution)
kl: tập các yếu tố cần tính
• Dữ liệu xuất: sol1 // danh sách lời giải đã loại bớt công thức thừa
• Các biến tạm: f, i, sol1, tam
Bước 1: sol1 := sol; //khởi tạo
Bước 2: for i from (số công thức của sol) down to 1 do
2.1 tam := sol1 – [fi]; //tam = sol bỏ bớt fi
2.2 if (kl vẫn nằm trong Known mà đã bỏ đi yếu tố được tính bằng fi ) then
sol1 := tam;
end for;
Bước 3: return sol1
Cài đặt giải thuật loại bỏ công thức thừa
Trang 18Chú thích:
• sol: danh sách lời giải chưa rút gọn (chưa loại bỏ công thức thừa)
• tam := subsop(i = NULL, sol1): hàm trả về danh sách sol1 đã bỏ công thức fi
• op(map(x x[2], tam): trả về dãy các biến đã được tính trong danh sách lời giải tam (vì mỗi phần tử trong tam la 1 danh sách trong đó phần tử 2 là biến tính được trong quá trình
thực hiện thuật giải suy diễn tiến)
• sol1: danh sách lời giải đã rút gọn
iii Thủ tục xuất kết quả
• Mô tả: lần lượt xét từng lời giải trong danh sách Solution Với mỗi lời giải:
In ra tập các biến đã xác định giá trị
In ra công thức để tính biến chưa biết
In ra biểu thức xác định giá trị của biến vừa tính được
• Dữ liệu nhập: tập giả thiết gt và tập lời giải loigiai (sol, solution, …)
• Dữ liệu xuất: Thể hiện (in) ra từng bước quá trình tính các biến của kết
luận
Cài đặt thủ tục xuất kết quả
Trang 20Nhấn Enter, chương trình xuất kết quả như sau:
Giai tam giac
Trang 21có giao diện viết bằng ngôn ngữ khác (C#, Visual Basic, …) kết nối với MAPLE để cógiao diện trực quan hơn.
Có thể dể dàng chuyển thành bài toán giải hình chữ nhật, hình bình hành, … bằngcách thay đổi tập các biến Facts và tập công thức Formulae của hình đó
Xin chân thành cảm ơn Thầy đã giới thiệu và truyền đạt những kiến thức nền tảng,gợi cho chúng tôi những ý tưởng, những hướng phát triển lý thú, bổ ích giúp cho chúngtôi có được những kiến thức và ý tưởng để có thể tạo ra những sản phẩm có ích phục vụcho xã hội
TP.HCM, ngày 02 tháng 02 năm 2013
Sinh viên thực hiệnDai Nguyên Thiện