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

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

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 (775.66 KB, 35 trang )

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


2.1. Giới thiệu 17
2.2. Khai báo chu trình 18
2.3. Tham biến 18
2.4. Phạm vi các biến (biến toàn cục, biến cục bộ và tham biến) 19
2.5. Định giá trên các biến 19
2.6. Các chức năng khác 20
3. Một số hàm tự tạo 22
HÌNH GIẢI TÍCH KHÔNG GIAN 24
1. Các vấn đề cần chú ý khi lập trình giải các bài toán mẫu 24
2. Một số bài toán cơ bản về giải tích trong không gian 29
2.1. Đoạn chương trình viết phương trình mặt cầu ngoại tiếp tứ diện 29
2.2. Đoạn chương trình viết phương trình đường vuông góc chung của 2 đường thẳng
chéo nhau 30
KẾT LUẬN 34
Trần Thị Xuân- CH1102019 2
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
TÀI LIỆU THAM KHẢO 35
Trần Thị Xuân- CH1102019 3
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
LỜI MỞ ĐẦU
MAPLE là một gói phần mềm toán học thương mại phục vụ cho nhiều mục
đích. Nó phát triển lần đầu tiên vào năm 1980 bởi Nhóm Tính toán Hình thức tại
Đại học Waterloo ở Waterloo, Ontario, Canada.
Phần mềm MAPLE được các nhà khoa học của Canada viết ra để phục vụ
cho công tác nghiên cứu toán học, phần mềm nầy rất mạnh, nó có thể giải quyết
hầu hết các vấn đề về toán ở phổ thông và đại học. Maple là một hệ thống tính
toán trên các biểu thức đại số và minh họa toán rất mạnh mẽ được phát triển bởi
các nhà nghiên cứu của Đại học Waterloo (Canada) từ năm 1980 và được thương
mại hoá bởi công ty Warterloo Maple Inc.(), phiên bản
Maple đầu tiên ra đời năm 1980, đến nay đã phát triển và ngày càng hoàn thiện

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ố;

- Có thể thực hiện hầu hết các phép toán cơ bản trong chương trình toán học phổ
thông và đại học;
- Cung cấp các công cụ minh họa hình học thuận tiện như: Vẽ đồ thị tĩnh hoặc
động của các đường, các mặt được cho bởi các hàm tùy ý trong nhiều hệ trục tọa độ
khác nhau;
- Ngôn ngữ lập trình đơn giản và mạnh mẽ có khả năng tương tác với các ngôn
ngữ khác như Latex, Word, HTML,
- Một công cụ biên soạn giáo án và bài giảng điện tử, thích hợp với các lớp học
tương tác trực tiếp;
- Một chương trình trợ giúp hiệu quả cho giảng viên và sinh viên trong việc dạy
và học.
Trần Thị Xuân- CH1102019 5
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
3. Tính toán trong maple
Maple có một khả năng tính toán tuyệt vời các số rất lớn với tốc độ nhanh.
Khả năng tính toán của Mape cũng rất đa dạng từ các phép tính đơn giản nhất đến
các phép tính phức tạp nhất.
 Tính tóan số học thông thường.
 Tính tóan trên số nguyên.
 Tính tóan trên biểu thức đại số.
 Tính tổng/tích hữu hạn,vô hạn.
 Các phép tính vi phân, tích phân.
3.1. Các phép tính số học thông thường
- Phần này sẽ trình bày các phép tính số học thông thường và các hàm cơ bản của
Maple.
- Bảng các phép tính số học:
Phép toán Kí hiệu Phép toán Kí hiệu Phép toán Kí hiệu
Cộng + Nhân * Giai thừa !
Trừ - Chia / Mũ ^
- Bảng các hàm thông dụng:

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
,…)

Giá trị lớn nhất của
hai hay nhiều số
min(x
1
,x
2
,
…)
Giá trị nhỏ nhất của
hai hay nhiều số
- Bảng các hàm lượng giác:
Hàm Ý nghĩa Hàm Ý nghĩa Hàm Ý nghĩa
sin(x) Sin(x) cos(x) Cosin(x) tan(x) Tg(x)
arcsin(x) Arcsin(x) arccos(x) Arccos(x) arctan(x) Arctg(x)
Trần Thị Xuân- CH1102019 6
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
- Bảng các hằng số thông dụng:
Hằng số Ý nghĩa Hằng số Ý nghĩa Hằng số Ý nghĩa
Pi Hằng số PI True Hằng logic đúng false Hằng logic sai
FAIL Thất bại, sai Infinity Vô cùng

Catalan Hằng Catalan
> constants;
, , , , , ,false γ ∞ true Catalan FAIL π
> 100! + 2^100;
93326215443944152681699238856266700490715968264381621468592963895217599\
99322991560894146397615651828625369792082722375825118521218451460022\
8229401496703205376
3.2. Tính toán trên số nguyên
- Các hàm liên quan tính toán:

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

2
)
Ước số chung
lớn nhất của
hai hay nhiều
số
ilcm(x
1
,x
2
, )
lcm(x
1
,x
2
)
Bội số chung nhỏ
nhất của hai hay
nhiều số
m mod n Số dư khi
chia m cho n
- Các hàm liên quan tới số nguyên tố:
Hàm Ý nghĩa Hàm Ý nghĩa Hàm Ý nghĩa
isprime(n)       ố
  ố

nextprime(n) ố   ố
ề
prevprime(n) ố   ố
ềướ

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

isprime(%);
true
 In ra 100 số nguyên tố đầu ên
for i from 1 to 100 do
print(ithprime(i)); #in ra so nguyen to thu i
end do;
 Chuyển đổi giữa các hệ cơ số (decimal,binary,octal,hex và tùy ý)
 Dùng lệnh convert(… )
convert(100,binary);
1100100
convert([0,0,1,0,0,1,1],`base`,2,10);
[ ], ,0 0 1
3.3. Ước lượng đại lượng/biểu thức với độ chính xác tùy ý
- Dùng hàm evalf( )
 evalf(bt); # ước lượng bt với độ chính xác qui định bởi biến Digits
 evalf(bt,n); # ước lượng bt với độ chính xác n
Trần Thị Xuân- CH1102019 8
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
 Ước lượng e với độ chính xác 50
evalf(exp(1),50);
2.7182818284590452353602874713526624977572470937000
Digits;
10
evalf(Pi);
3.141592654
Digits:=30;
evalf(Pi);
:= Digits 30
3.14159265358979323846264338328
3.4. Tính toán trên biểu thức đại số

- 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

y
4
21 x
2
y
5
7 x y
6
y
7
 Đơn giản biểu thức:
o simplify(bt);
expr:=(x+y)^3 - (x^2 + 2*y^2)*(x+3*y);

:= expr

( )
+
x y
3
( )
+
x
2
2 y
2
( )
+
x 3 y


> 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 2 x y y
ms:=(2*x-1)*(x^2-3*y*x+5);
ms:=expand(ms);
:= ms ( ) − 2 x 1 ( ) − + x
2
3 x y 5

:= ms
− + − + −
2 x
3
6 x
2
y 10 x x
2
3 x y 5
pt:=ts/ms;

:= pt
− + − 2 x
2
x 2 x y y
− + − + − 2 x
3
6 x
2
y 10 x x
2
3 x y 5
normal(pt);


+ 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

2
2 z
expand(%);
+ + + − − − +
a
3
3 a
2
b 3 a b
2
b
3
2 a
2
4 a b 2 b
2
2 z
> W := 3*x^2+8;

W := 3 x
2
C 8
Trần Thị Xuân- CH1102019 10
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
> M := eval(W,x=5+2*u);

M := 3 (5 C 2 u)
2
C 8
 Kiểm tra sự chia hết của các đa thức:

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

3
sort(p,[y,x]);
+ + + +
3 y
3
x
2
2 y
2
x
3
y
3
x y
2
x
2
y x
sort(p,[y,x],'plex');
+ + + + 3 y
3
x
2
y
3
x 2 y
2
x
3
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);

, , ,5 -3 -2
1
2
degree )ậủứ degree(1/2*x^4 - 2*x^2 -3*x +5);
*
ldegree )ậ  ấ+ ấ ủ ạ  ử
$ớố",
ldegree(1/2*x^4 - 2*x^2 -3*x );
-
Trần Thị Xuân- CH1102019 11
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
gcd Ư!./ủứ
lcm )!//ủứ
3.5. Tính tổng/tích hữu hạn ,vô hạn
- Tính tổng hữu hạn

 Phương pháp 1:
[> sum(f(i),i=m n);
Xuất ra kết quả ngay lập tức
 Phương pháp 2:
[> Sum(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
- Tính tổng vô hạn
 Phương pháp 1:
[> sum(f(i),i=m infinity);
Xuất ra kết quả ngay lập tức
 Phương pháp 2:
[> Sum(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

 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

1
i
i
i
=
+
+

10
2
1
1
1
i
i
i
=
+
+

2
1
1
k
k

=

2
6

π
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+3345-674585995,6:
5-7*,
 !ứ; 
2+3--73*<4568-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

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 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ó chỉ có thể là đú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, break hoặc quit.
Trần Thị Xuân- CH1102019 13
2
20
2
2
1
i
i
i
=


2
1
1
1
4
n
n

=
 


 ÷
 

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

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.
Chú ý. Nếu các từ khóa from start hoặc by change bị bỏ qua thì mặc định from 1 và
by 1 được dùng.
Trần Thị Xuân- CH1102019 14
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
Vòng lặp for- in- do- od thực hiện việc lặp với mỗi giá trị mà biến chỉ số name lấy
từ biểu thức expression đã cho. Chẳng hạn vòng lặp này được sử dụng hiệu quả khi
mà giá trị của biến name là một phần tử của một tập hợp hoặc danh sách.
Trong trường hợp muốn thoát khỏi từ giữa vòng lặp, ta có thể dùng các câu lệnh
break, quit, RETURN giống như trong vòng lặp while.
1.3. 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;
(Ghi chú: Các câu lệnh trong cặp dấu ngoặc đứng là các lệnh tuỳ chọn. Thí dụ: biểu
thức | statement | cho biết rằng statement là một câu lệnh tuỳ chọn).
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 thoả
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 được thực hiện, nếu trái lại thì điều kiện condition sau từ khoá
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 (tuỳ chọn) elif then được lặp lại với số lần tuỳ ý. Từ
khoá elif là dạng viết tắt của else if.

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ó

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
Trần Thị Xuân- CH1102019 16
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
1.6. Sử dụng các hàm RETURN, ERROR
Hàm RETURN được sử dụng để cho giá trị hàm trước khi thoát khỏi chu trình.
Nếu không có lệnh RETURN, chu trình tự động cho kết quả của phép tính cuối
cùng trong chu trình.
Hàm ERROR được sử dụng để đưa thông điệp lỗi ra màn hình từ bên trong chu
trình.
2. Cách thiết lập một chu trình
2.1. Giới thiệu
Maple là một ngôn ngữ lập trình hướng chu trình (procedure). Chúng ta có
thể làm việc với Maple bằng hai chế độ khác nhau: Chế độ tương tác trực tiếp thông
qua việc nhập từng lệnh đơn lẻ ngay tại dấu nhắc lệnh của Maple và nhận được
ngay kết quả của lệnh đó. Chế độ chu trình được thực hiện bằng cách đóng gói một
dãy các lệnh xử lí cùng một công việc vào trong một chu trình (procedure) duy
nhất, sau đó ta chỉ cần gọi chu trình này và Maple tự động thực hiện các lệnh có
trong chu trình đó một cách tuần tự và sau đó trả lại kết quả cuối cùng.
Maple chứa một lượng rất lớn các hàm tạo sẵn đáp ứng cho những yêu cầu
tính toán khác nhau trong nhiều lĩnh vực. Các hàm này được lưu trữ trong các gói
chu trình (package) và người sử dụng có thể dễ dàng gọi đến mỗi khi cần thiết. Tuy
nhiên, người dùng Maple có thể tự tạo cho riêng mình những gói chu trình cũng như
có thể trao đổi dùng chung những gói chu trình nào đấy, phục vụ cho công việc
mang tính đặc thù riêng của mình.
Các khái niệm cơ bản cần phải nắm vững để tạo ra một chu trình (procedure)
là:

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)

x+y; end.] thì khi gọi chu trình này để tính tổng của hai số 10 và 5 ta phải truyền
các dữ liệu này cho các tham biến (cho x nhận giá trị là 10, y nhận giá trị là 5), tức
là tại dấu nhắc lệnh ta phải viết tong(10, 5); và sau khi thực hiện chu trình trả lại
kết quả là 15.
Tham biến có tính cục bộ: chúng chỉ được sử dụng bên trong chu trình đã
được khai báo, bên ngoài chu trình này chúng không mang ý nghĩa gì.
Kiểu của tham biến có thể được khai báo trực tiếp.
Trần Thị Xuân- CH1102019 18
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
2.4. Phạm vi các biến (biến toàn cục, biến cục bộ và tham biến)
Biến toàn cục:
Biến toàn cục được khai báo sau từ khoá global trong khai báo chu trình.
Biến toàn cục được khai báo bên trong một chu trình, nhưng có phạm vi giá
trị trong toàn bộ chương trình, tức là bên ngoài phạm vi của chu trình mà nó được
khai báo trong đó.
Biến cục bộ:
Biến cục bộ được khai báo sau từ khoá local trong khai báo chu trình.
Biến cục bộ chỉ có giá trị bên trong chu trình mà nó được khai báo. Ngoài
chu trình này nó không mang ý nghĩa gì.
Tham biến:
Cũng giống như biến cục bộ, các tham biến chỉ có giá trị bên trong phạm vi
của chu trình mà nó được khai báo. Sau khi chu trình kết thúc, chúng không còn giá
trị.
Tham biến còn được sử dụng để trả lại kết quả, như các ngôn ngữ lập trình
truyền thống. Ngoài ra, do Maple có những hàm có khả năng trả lại nhiều hơn một
giá trị. Ta có thể gộp các giá trị này vào một danh sách để trả lại như một phần tử.
2.5. Định giá trên các biến
Định giá tên hàm và tham biến:
Như đã đề cập trước đây, các tên biến trong một biểu thức được Maple định
giá trước khi thực hiện các phép tính trên chúng. Đối với việc thực hiện các hàm

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.

Xem mã nguồn một chu trình:
showstat(procName)
showstat(procName, statRange)
Tham số: procName: Tên của chu trình cần hiển thị mã nguồn.
StatRange: Phạm vi các dòng lệnh cần được hiển thị (từ dòng nào đến
dòng nào).
Phần lớn các lệnh trong Maple đều được viết bằng ngôn ngữ Maple, do đó
chúng ta có thể đọc được mã nguồn của những lệnh này. Maple cung cấp hàm
showstat() để hiện đoạn chương trình là mã nguồn của các lệnh trên. Nhờ có hàm
này mà người học lập trình trên Maple có thể dễ dàng học được cách thức cũng như
Trần Thị Xuân- CH1102019 20
Lập trình Symbolic và trí tuệ nhân tạo PGS. TS. Đỗ Văn Nhơn
đặc trưng ngôn ngữ bằng cách nghiên cứu phương thức mà các lệnh của Maple thực
hiện (thông qua việc xem mã nguồn của chúng). Ta có thể hiển thị một phần mã
nguồn của các chu trình bằng cách định rõ phạm vi của các dòng cần thể hiện.
Chúng ta cũng có thể sử dụng các hàm print() và interface() để đọc mã
nguồn của các hàm trong Maple. Thông thường thì Maple không hiển thị phần thân
của các chu trình đó nếu ta cho hiển thị chúng. Muốn làm điều này, ta phải gọi lệnh
interface() với tham số verbosepro =2 trước, sau đó dùng lệnh print thì ta có thể
xem được thân của chu trình.
Chặn bắt lỗi:
traperror(expr1, expr2, )
Tham số: expr1, expr2, là các biểu thức.
Maple sử dụng biến lasterror để lưu thông báo lỗi của lỗi xảy ra mới nhất
trong quá trình tính toán. Ta có thể sử dụng biến này giống như bất cứ biến nào
khác trong Maple, cụ thể là ta có thể gán giá trị bất kì nào đó cho nó, tính toán trên
biến này và ghi giá trị nó đang lưu trữ ra màn hình. Tuy nhiên khi xảy ra lỗi, Maple
tự động gán cho biến này xâu kí tự thông báo lỗi mà hàm ERROR() sẽ hiển thị ra
màn hình.
Cùng với biến lasterror, hàm traperror() được sử dụng để chặn bắt một lỗi

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

×