GV. HƯỚNG DẪN : PGS.TS. ĐỖ VĂN NHƠN
HỌC VIÊN : TRẦN THỊ XUÂN
MÃ HV : CH1102019
LỚP : CAO HỌC CNTT – K6
BÀI THU HOẠCH MÔN SYMBOLIC VÀ TRÍ
TUỆ NHÂN TẠO
CHUYÊN ĐỀ
TÌM HIỂU CÁC LỆNH CƠ BẢN TRÊN MAPLE
VÀ ỨNG DỤNG MAPLE VỚI MỘT SỐ BÀI
TOÁN CƠ BẢN
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
HÀ NỘI, THÁNG 1 NĂM 2012
MỤC LỤC
MỤC LỤC 2
LỜI MỞ ĐẦU 4
I. TỔNG QUAN VỀ MAPLE 5
1. Giới thiệu về Maple 5
3. Tính toán trong maple 6
3.1. Các phép tính số học thông thường 6
3.2. Tính toán trên số nguyên 7
3.3. Ước lượng đại lượng/biểu thức với độ chính xác tùy ý 8
3.5. Tính tổng/tích hữu hạn ,vô hạn 12
II. LẬP TRÌNH TRÊN MAPLE 13
1. Các lệnh lập trình cơ bản 13
1.1. Vòng lặp While 13
1.2. Vòng lặp for 14
1.3. Lệnh điều kiện if 15
1.4. Lệnh break 15
1.5. Lệnh next 16
1.6. Sử dụng các hàm RETURN, ERROR 17
2. Cách thiết lập một chu trình 17
hơn. Maple có cách cài đặt đơn giản, chạy được trên tất cả các hệ điều hành, cấu
trúc linh hoạt dễ sử dụng, đặc biệt có trình trợ giúp Help nên tạo điều kiện cho
người dùng dể sử dụng. Ưu điểm đó khiến ngày càng có nhiều nước trên thế giới
lựa chọn sử dụng Maple trong dạy-học toán tương tác trước đòi hỏi của thực tiễn
và sự phát triển của giáo dục.
Mặc dù rất nỗ lực, nhưng với sự hiểu biết còn hạn chế nên bài thu hoạch
không tránh khỏi nhiều thiếu sót. Em rất mong nhận được những chỉ bảo của
Thầy và độc giả.
Em xin chân thành cám ơn thầy!
Trần Thị Xuân
Trần Thị Xuân- CH1102019 4
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
I. TỔNG QUAN VỀ MAPLE
1. Giới thiệu về Maple
Phần mềm Maple là kết quả của nhóm các nhà khoa học trường Đại học
Waterloo - Canada và là một trong những bộ phần mềm toán học được sử dụng
rộng rãi nhất hiện nay.
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
phương trình, 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ỳ một phần mềm
nào khác (chẳng hạn PageText, Word, Frontpage ). 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.
2. Các tính năng cơ bản của Maple
- Là một hệ thống tính toán trên các biểu thức đại số;
Hàm Ý nghĩa Hàm Ý nghĩa Hàm Ý nghĩa
abs(x)
x
sqrt(x)
x
exp(x) E mũ x
ln(x) Log
e
(x) log10(x) Log
10
(x) log[b](x) Log
b
(x)
trunc(x) Làm tròn x về số
nguyên gần 0 hơn
round(x) Làm tròn x về số
nguyên gần x nhất
floor(x)
ceil(x)
x
x
max(x
1
,x
2
,…)
Hàm Ý nghĩa Hàm Ý nghĩa Hàm Ý nghĩa
factorial(n) n giai thừa isqrt(n) Căn bậc hai nguyên
của n
iroot(x,n) Căn bậc n
nguyên của x
ifactor(n) Phân tích n
thành tích các
thừa số
nguyên tố
irem(m,n)
irem(m,n,`q`)
Số dư khi chia m
cho n và thương có
thể được chứa
trong q
iquo(m,n)
iquo(m,n,`r`)
Thương khi
chia m cho n
và số dư có
thể được
chứa trong r
igcd(x
1
,x
2
, )
gcd(x
1
,x
ithprime(n) ố ố
ứ
isqrt(14);
4
iroot(10,2);
3
ifactor(1223334444);
( ) 2
2
( ) 3 ( ) 101944537
expand(%);
1223334444
irem(2^100,7);
Trần Thị Xuân- CH1102019 7
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
2
iquo(2^100,7,`r`);
181092942889747057356671886482
r;
2
igcd(2^200 -1, 2^45-1);
% - (2^5-1);
31
0
ilcm(100,x,45);
( )ilcm ,900 x
Tìm một số nguyên tố có 10 chữ số
nextprime(10^9);
1000000007
- Biểu thức đại số được cấu tạo nên từ các chất liệu:
Các biến số đại số , các hàm.
Các hằng số 3,e,Pi …
Các phép tóan đại số (+,-,*,/,^ ). Mỗi phép tóan có một độ ưu tiên nhất định
giúp chúng ta lượng giá biểu thức.
- Nói chung, khái niệm biểu thức đại số trong Maple cũng tương tự như khái niệm
biểu thức đại số trong tóan học. Maple hỗ trợ tuyệt vời cho việc thao tác trên các
biểu thức đại số.
Khai triển biểu thức:
o expand ( bt);
bt:=(x+y)^7;
:= bt ( ) + x y
7
expand(bt);
+ + + + + + + x
7
7 x
6
y 21 x
5
y
2
35 x
4
y
3
35 x
3
> simplify(expr);
− x y
2
5 y
3
Phân tích biểu thức thành nhân tử:
Trần Thị Xuân- CH1102019 9
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
o factor(bt);
factor(x^5+x+1);
( )
+ +
x
2
x 1 ( )
− +
x
3
x
2
1
Tối giản phân thức:
o normal(pt);
ts:=(x+y)*(2*x-1);
ts:=expand(ts);
:= ts ( ) + x y ( ) − 2 x 1
:= ts − + − 2 x
2
+ x y
− + x
2
3 x y 5
Thay thế trong biểu thức:
- Các biến đại số trong biểu thức có thể được thay thế bởi các biểu thức
khác. Kết quả là chúng ta sẽ thu được biểu thức mới. Việc thay thế này
được thực hiện trong Maple bởi lệnh:
o eval(bt ,{bien
1
= bt1,bien
2
=bt2,…,bien
n
=btn});
> expr:=x^3 - 2*x^2*y + 2*z;
:= expr
− +
x
3
2 x
2
y 2 z
eval(expr,{x=a+b,y=1});
− + ( ) + a b
3
2 ( ) + a b
o divide(đt1,đt2);
divide(x^3-y^3,x-y);
true
Để sắp xếp các hạng tử của đa thức dùng lệnh sort với các tùy chọn khác nhau
o sort(đt);
o sort(đt,[danhsachcacbien]); #mặc định sẽ sắp theo tổng bậc
o sort(đt,[danhsachcacbien],’plex’); #sắp xếp theo kiểu từ điển
sort(x^2 -3*x + x^4 - 4*x^3 +5);
− + − +
x
4
4 x
3
x
2
3 x 5
p:=x*y + 2*x^3*y^2 + 3*x^2*y^3 + x^2*y^2 + x*y^3;
:= p + + + + x y 2 x
3
y
2
3 x
2
y
3
x
2
y
2
x y
2
x
2
y x
ạử
ểạửủứệ
collect(2*a*x*y + x^2*y^2 + 5*a^2*y*x^3 -2*y^2,y);
+
( )
−
x
2
2 y
2
( )
+
2 a x 5 a
2
x
3
y
!"#ớứệố$%ậủứ
Lệnh Mô tả Ví dụ
coef &ệốủộ%ậụể coeff(1/2*x^4 - 2*x^2 -3*x +5,x^2);
-2
lcoef &ệố%ậấ lcoeff(1/2*x^4 - 2*x^2 -3*x +5);
1/2
tcoef &ệốự tcoeff(1/2*x^4 - 2*x^2 -3*x +5);
'
coefs ("ấả"ệố coeffs(1/2*x^4 - 2*x^2 -3*x +5);
Hiện ra biểu thức cần tính
[> value(%);
Xuất ra kết quả của biểu thức
Tính
[>Sum((1+i)/(1+i^4),i=1 10);
[> value(%);
51508056727594732913722
40626648938819200088497
Tính
[> sum(1/(k^2),k=1 infinity);
- Tính tích hữu hạn
Phương pháp 1:
[> product(f(i),i=m n);
Xuất ra kết quả ngay lập tức
Phương pháp 2:
[> Product(f(i),i=m n);
Hiện ra biểu thức cần tính
[> value(%);
Xuất ra kết quả của biểu thức
Trần Thị Xuân- CH1102019 12
10
2
1
1
π
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
- Tính tích vô hạn
Phương pháp 1:
[>
product(f(i),i=m infinity);
Xuất ra kết quả ngay lập tức
Phương pháp 2:
[> Product(f(i),i=m infinity);
Hiện ra biểu thức cần tính
[> value(%);
Xuất ra kết quả của biểu thức
01
2+3345-674585995,6:
5-7*,
!ứ;
2+3--73*<4568-99=6:
II. LẬP TRÌNH TRÊN MAPLE
1. Các lệnh lập trình cơ bản
1.1. Vòng lặp While
Cấu trúc cú pháp:
While <điều kiện> do <dãy lệnh> od;
Chức năng:
Vòng lặp while cho phép lặp chuỗi các câu lệnh 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
÷
∏
2
π
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
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 While cho phép lặp chuỗi các câu lệnh nằm giữa do và od khi mà điều
kiện vẫn còn đúng.
1.2. Vòng lặp for
Cấu trúc cú pháp:
for name from start by change to finish
do
statement sequence
od;
Hoặc dạng phát biểu khác:
for name in expression
do
statement sequence
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ừ
khoá for. Ban đầu, giá trị start đượ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 liên tiếp cho đến khi giá trị của biến
Các biểu thức điều kiện condition đượ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.
1.4. Lệnh break
Cấu trúc cú pháp: break
Trần Thị Xuân- CH1102019 15
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
Chức năng:
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).
Một 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 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 lặp 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ú ý: 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).
1.5. Lệnh next
Cấu trúc cú pháp: next
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 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ó
Cấu trúc proc() end; cùng với các khai báo trong cấu trúc này (global,
local, option, ).
Các cấu trúc dữ liệu và các hàm có liên quan (dãy-sequence, tập hợp-set,
danh sách-list, mảng-array, bảng-table).
Các hàm lập trình cơ bản (đã nêu ở trên) và các hàm liên quan đến việc xử lí
dữ liệu (eval, evalf, subs, map, convert, ).
Trần Thị Xuân- CH1102019 17
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
2.2. Khai báo chu trình
Lời gọi khai báo một chu trình:
procedure_name:=proc(parameter_sequence)
[local local_sequence]
[global global_sequence]
[options options_sequence]
statements_sequence;
end;
Giải thích các khai báo:
parameter_name: Là một dãy các kí hiệu, ngăn cách nhau bởi các dấu phẩy, chứa
tên các tham biến truyền cho chu trình.
local_sequence: Là một dãy các tên được khai báo là biến cục bộ trong chu trình,
nó chỉ có giá trị sử dụng trong phạm vi chu trình đang xét (local được sử dụng để
khai báo cho các biến chỉ sử dụng bên trong một chu trình).
global_sequen: Dãy các tên biến toàn cục có giá trị sử dụng ngay cả bên ngoài
chu trình.
options_sequence: Dãy các tuỳ chọn cho một chu trình.
statements_sequence: Dãy các câu lệnh do người lập trình đưa vào.
2.3. Tham biến
Tham biến (parameter) là các biến được đặt giữa hai dấu ngoặc trong biểu
thức proc( ). Tham biến được dùng để nhận dữ liệu truyền cho chu trình khi gọi
chu trình đó. Ví dụ ta có thể khai báo chu trình tính tổng của 2 số [tong:=proc(x,y)
cũng tương tự như vậy. Trước tiên là tên chu trình được định giá. Sau đó lần lượt
đến các đối số trong danh sách các đối số truyền cho chu trình (được định giá từ
trái sang phải). Nếu tên chu trình được định giá trỏ đến một chu trình, thì chu trình
ấy được thực thi trên các đối số đã được định giá. Tuy nhiên vẫn có một số chu
trình ngoại lệ: đó là các hàm eval, assigned, seq.
Định giá biến cục bộ và biến toàn cục:
Các biến cục bộ và tham biến truyền cho chu trình được định giá một cấp
(định giá một lần), còn các biến toàn cục thì được định giá hoàn toàn (full
Trần Thị Xuân- CH1102019 19
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
evaluation). Hàm eval( ) được dùng để ép định giá hoàn toàn cho biến cục bộ và
tham biến, và định giá một mức cho các biến toàn cục.
2.6. Các chức năng khác
Muốn in ra màn hình các "vòng lệnh ẩn" ta sử dụng biến printlevel. Đây
là cách đơn giản nhất để xem xét các quá trình thực hiện lệnh. Khi printlevel được
gán giá trị âm thì không hiện gì cả, nếu được gán giá trị 0 thì chỉ có kết quả của các
câu lệnh được hiện ra.
Dò từng lệnh trong chu trình:
trace(f)
trace(f, g, h, . . .)
Tham số: Các hàm f, g, h, là các hàm cần chạy từng bước.
Lệnh trace cho in cách thức hiện từng lệnh của một chu trình ra màn hình.
Lệnh dò trace() hoạt động tương tự như khi ta gán cho biến printlevel một số đủ
lớn để có thể hiện ra màn hình tất cả các câu lệnh cũng như điểm vào và điểm ra của
hàm mà ta đang thực hiện.
Trong suốt quá trình thực hiện, các điểm vào, các kết quả của các câu lệnh, các
điểm ra của hàm cần dò được hiện ra màn hình. Các tham biến được hiện ra ở điểm
vào chu trình, giá trị trả lại của hàm được hiện ra ở điểm cuối chu trình.
Chú ý: Không thể dò từng bước một số hàm có quy tắc định giá đặc biệt, bao
gồm: assigned, eval, evalhf, evalf, evaln, traperror, seq, userinfo.
nào đó trong một biểu thức trước khi lỗi đó được thông báo ra màn hình. Nếu có lỗi
nào đó xảy ra trong lúc định giá trị hoặc đơn giản biểu thức, hàm traperror() sẽ trả
lại xâu kí tự thông báo lỗi của lỗi đầu tiên gặp phải khi tính toán biểu thức đó. Nếu
không có lỗi, hàm traperror() trả lại kết quả tính toán biểu thức. Mỗi lần gọi đến
hàm traperror(), Maple tự động xoá đi giá trị cũ có trong bốn lần tính toán trước.
Trần Thị Xuân- CH1102019 21
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
3. Một số hàm tự tạo
Trần Thị Xuân- CH1102019 22
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn Trần Thị Xuân- CH1102019 23
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
III. ỨNG DỤNG MAPLE VỚI MỘT SỐ BÀI TOÁN CƠ BẢN
HÌNH GIẢI TÍCH KHÔNG GIAN
1. Các vấn đề cần chú ý khi lập trình giải các bài toán mẫu
Trần Thị Xuân- CH1102019 24
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
Trần Thị Xuân- CH1102019 25