Tải bản đầy đủ (.docx) (19 trang)

ỨNG DỤNG GIẢI PHƯƠNG TRÌNH VÀ BẤT PHƯƠNG TRÌNH TRONG MAPLE

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 (244.55 KB, 19 trang )

Đại Học Quốc Gia TP.HCM
Trường Đại Học Công Nghệ Thông Tin
BÁO CÁO CHUYÊN ĐỀ:
LẬP TRÌNH SYMBOLIC CHO TRÍ TUỆ NHÂN TẠO
ĐỀ TÀI:
ỨNG DỤNG GIẢI PHƯƠNG TRÌNH VÀ BẤT PHƯƠNG
TRÌNH TRONG MAPLE

GVHD: PGS.TS. ĐỖ VĂN NHƠN
Người thực hiện: Nguyễn Siêu Đẳng
MSSV: CH1101008
Lớp: Cao học khóa 6
TP.HCM – 2013
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
MỤC LỤC
HVTH: Nguyễn Siêu Đẳng Trang 2
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
LỜI NÓI ĐẦU

Maple là phần mềm của hãng Waterloo, là một công cụ tuyệt vời hỗ trợ cho
việc học tập và nghiên cứu tóan học. Với Maple chúng ta có thể thực hiện giải được
các bài toán từ những phép tóan đơn giản nhất, sơ cấp nhất cho đến những tính toán
phức tạp nhất.
Không chỉ dừng lại ở việc hỗ trợ tính tóan, Maple từ phiên bản 10.0 trở về sau
này còn có khả năng lập trình. Ở phương diện này, có thể xem Maple như là một ngôn
ngữ lập trình trong đó chúng ta có thể tạo ra những chương trình và những gói
(package) để tái sử dụng.
Một tính năng rất hay và cũng rất nổi bật là Maple có thể hợp tác với một ngôn
ngữ chủ (host language) như VB6.0, VB.Net, Java Khả năng đặc biệt này của Maple
giúp chúng ta thực hiện được những phần mềm (tính toán, hỗ trợ giải toán ) đuợc
viết mã bằng ngôn ngữ chủ và liên kết với Maple để thực hiện các tác vụ toán học


phức tạp mà đòi hỏi rất nhiều kĩ năng lập trình.
Bài thu hoạch này không đi quá sâu vì không có nhiều thời gian để hoàn thiện
cũng như giới hạn của sự thấu hiểu của học viên thực hiện nên chủ yếu giới thiệu về
các ứng dụng cơ bản của Maple trong giải toán và lập ứng dụng giải phương trình, bất
phương trình, mặt hạn chế chưa chú trọng nghiên cứu ứng dụng Maple để giải các bài
toán về hình học hay lập trình kết nối với các ngôn ngữ lập trình chủ khác như C#.
Tuy nhiên, với thời lượng lên lớp hạn chế nhưng thầy Đỗ Văn Nhơn đã tận tình
truyền tải một khối lượng lớn kiến thức, chia sẻ và định hướng phát triển hướng
nghiên cứu cũng như những ứng dụng của biểu diễn tri thức và xử lý tri thức vào các
bài toán trong thực tiễn. Cảm ơn thầy đã tận tình giảng dạy và hướng dẫn hoàn tất bài
thu hoạch này. Chúc thầy được nhiều sức khoẻ.
Trân trọng.
Học viên thực hiện
Nguyễn Siêu Đẳng.
HVTH: Nguyễn Siêu Đẳng Trang 3
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
PHẦN I: SỬ DỤNG CÁC LỆNH TRỰC TIẾP VỚI MAPLE
Báo cáo tiểu luận này giới thiệu ứng dụng Maple trong chế độ tương tác trực
tiếp giữa người sử dụng và Maple. Cuộc đối thoại giữa người sử dụng với Maple
thông qua lệnh gõ từ bàn phím vào dấu nhắc >_ và kết thúc lệnh bằng dấu ; cuối cùng
nhấn phím [Enter]. Maple sẽ thực hiện lệnh và trả lời ngay trên dòng tiếp theo. Sau đó
Maple cho hiện dấu nhắc >_ để chờ lệnh mới. Dưới đây xin giới thiệu cơ bản về ứng
dụng của Maple:

1.1 Thực hiện phép toán số học trong Maple

Trước hết, ta có thể sử dụng Maple để làm các phép tính số học thông thường (cộng,
trừ, nhân, chia ) đối với các số nguyên, phân số, đa thức hoặc các hàm hữu tỷ, kiểu dữ
liệu trong biểu thức ta muốn tính toán. Ta chỉ việc đánh lệnh tính toán dưới dạng một
biểu thức toán học .

Ví dụ 1.1.1 Gõ biểu thức, đánh dấu ; ở cuối biểu thức và ấn phím Enter
> 32 + 12;
44
Ví dụ 1.1.2: Tính toán một vài biểu thức toán học đơn giản.
A. Sử dụng kết quả của phép tính trước đó. Chú ý dấu " trong biểu thức
> 2 + abs(-2);
4
> (4 + ("+ 6) / 999999-32516);
28/967483
B. Nhập một biểu thức kéo dài nhiều dòng. Chúng ta sử dụng dấu : để tránh việc in ra
số quá lớn.
>2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18*19*20*21*22**23*24:

C. Chúng ta lại sử dụng nó trong việc tính toán tiếp theo dùng dấu ".
> " - 24!;
0
1.2 Biến số
Chúng ta có thể gán kết quả đã tính toán vào một ký hiệu để sử dụng lại chúng sau
này, như S := (i^3, I=1 100); đó chính là việc ấn định giá trị này cho một biến số S
HVTH: Nguyễn Siêu Đẳng Trang 4
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
của Maple. Nhưng không giống như các ngôn ngữ lập trình khác Maple có thể sử
dụng những biến này theo nghĩa ẩn số của toán học. Lệnh gán giá trị vào biến
<Tên biến> := <Biểu thức>;
Chúng ta dùng ký hiệu < > viết nghiêng là trong công thức có thể thay đổi được
trong lệnh đối với Maple. Biến trong Maple thông thường được bắt đầu bằng một chữ
cái, có thể dài tới 498 ký tự gồm chữ cái, chữ số hoặc dấu ngạch dưới. Tất nhiên
không nên tạo ra các biến có độ dài tối đa, chúng ta nên được tạo lập sao cho thuận lợi
để gõ vào và dễ nhớ. Những tên biến của Maple có thể được tạo lập bởi một dãy các
ký tự nằm trong dấu nháy đơn. Những tên trong dấu nháy đơn có thể bao gồm bất kỳ

ký tự bàn phím nào (kể cả dấu trắng). Sau đây là một vài ví dụ về tên biến trong
Maple :

expr1 x T Formula_47
d2DYDX 'a funny name?' 'The answer is='
'SessionLog.m'

Nhưng '1' khác 1. Ký tự số không là tên biến và nó không thể gán giá trị được. Đừng
nhầm bao quanh dẫy ký tự bằng dấu nháy kép ", Maple không sử dụng đấu này vào
mục đích này, vì trước đây ta thấy nó đã sử dụng vào việc chứa các kết quả vừa tính
để ta sử dụng lại.Việc gán các biến không chứa giá trị nào ta phải luôn thực hiện lại
lệnh > restart;.
Ví dụ 1.2.1 Gán giá trị.
A. Biến Tong là nhãn của công thức cộng hai biến bien1và bien2
> Tong := bien1 + bien2;
Tong := bien1 + bien2

B. Chúng ta thiết lập giá trị cho hai biến bien1, bien2
>bien1:=3000;bien2:= 26400;
bien1 :=3000
bien2 := 26400

C. Giá trị của Tong bây giờ là tổng giá trị của bien1 và bien2
> Tong := bien1 + bien2;
29400

D. Nếu chúng ta thay đổi giá trị của một trong hai biến bien1 hoặc bien2
> bien1 := 3500;
HVTH: Nguyễn Siêu Đẳng Trang 5
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn

bien1 := 3500

E. Giá trị của Tong cũng sẽ thay đổi theo.
> Tong := bien1 + bien2;
29900

F. Tạo ra một tên biến chứa cả dấu trắng
>'Total energy':= tong * 40;
Total energy:=1196000

Maple có một số biến toàn cục cài sẵn để điều khiển các phép toán và kết quả tính
toán như order, digit, chúng ta có thể thay đổi mặc định các biến này và sẽ kiểm
nghiệm các biến này ở phần sau.

1.3 Các hằng số toán học của Maple

Maple xây dựng sẵn một vài hằng toán học chuẩn ( ví dụ e, , ), ta chỉ việc dùng thông
qua tên của hằng số.
1.4 Các hàm toán học của Maple
Maple có sẵn các hàm toán học chuẩn, chúng ta chỉ việc sử dụng khi ta có biến đối số.

Ví dụ 1.4.1
A. Tự động giảm ước biểu thức 2|sin(-/2)|
> 2*abs(sin(-Pi/2));
2

B. Tính Γ(7) - 6!
> GAMMA(7) - 6!;
0


C. Tính i
2
e
2
π√−1

> I^2*exp(2*Pi*sqrt(-1));
-1

D. Tính e
2lnx

> exp(2*ln(x));
HVTH: Nguyễn Siêu Đẳng Trang 6
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
x
2

Trong ví dụ trên ta thấy rằng x chưa có giá trị. Maple coi đó là một ký hiệu toán học.
Những câu lệnh trong Maple được mở rộng để thực hiện việc ước lượng hoặc xấp xỉ
số, phép tính đạo hàm, phép lấy vi phân, tích phân, giải các phương trình và tìm giới
hạn của các biểu thức toán học. Chúng ta chỉ cần đánh các câu lệnh đó vào Maple để
thực hiện yêu cầu của mình như : diff để tính đạo hàm, solve để giải các phương
trình , Thực ra đây là các hàm thủ tục trong Maple, nó bao gồm các thuật toán giúp
ta giải toán.
Ví dụ 1.4.2 Maple tính toán cùng với các ẩn số toán học
A. Những biểu thức của Maple có thể chứa các ẩn số cũng như các số, và có thể được
gán cho một nhãn. Maple tự động đơn giản biểu thức bằng phép ước lượng biểu thức
đó.
> expr1 :=(x+y+ x+ x*x*x + x)/2;

expr1 :=3/2 x +1/2 y +1/2 x
3
> expr2 := ((4*expr1) - 2*y)/x;
expr2 :=(6x+2x^3)/x

B. Biểu thức ký hiệu có thể chứa bất kỳ một hàm nào của Maple .
>bigexpr:=sin(expr1)/ln(expr2^2);
sin(3/2 x+1/2 y+1/2x^3) / ln((6x+2x^3)^2/x^2)
1.5 Dấu ngoặc đơn và độ ưu tiên các phép toán

Khi nhập một biểt thức như >5 + 4 * 6; vào trong Maple. Chúng ta hiểu là 5 +
24 (thực hiện phép nhân trước) hoặc 9*6 (thực hiện phép cộng trước). Maple đưa ra
quy định áp dụng trong biểu thức ưu tiên các phép toán như chúng ta đã được học
trong số học. Ví dụ trên kết quả là 29 chứ không phải 54 điều đó có nghĩa là Maple
thực hiện phép nhân trước phép cộng.

Những người sử dụng cho rằng dấu ngoặc đơn là không cần thiết đôi khi sẽ gặp
phải những vấn đề rắc rối bởi Maple không thực hiện được công việc như mong muốn
của họ. Những toán tử luỹ thừa của Maple thường đòi hỏi dấu ngoặc đơn để đảm bảo
việc thực hiện công việc chính xác. a
(b^c)
và (a
b
)^c nên được viết tách riêng ra như sau
a^(b^c) và (a^b)^c. Viết a^b^c không phù hợp với cú pháp trong ngôn ngữ Maple.
Ví dụ 1.5.1: Những vấn đề phát sinh khi không sử dụng dấu ngoặc.
HVTH: Nguyễn Siêu Đẳng Trang 7
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
A. Chúng ta muốn thực hiện (-5)^2 và nhập vào dòng lệnh dưới dạng-5^2;, nhưng
Maple sẽ phủ nhận điều đó và thực hiện câu lệnh này theo dạng : -(5^2) và đưa ra kết

quả bằng -25.
> -5^2;
-25
B. Chúng ta phải thiết lập dấu ngoặc đơn để biểu thức đúng với quy định của Maple
> -5*-5;
Syntaxerror, `-` unexpected
>-5*(-2);
10

C. Chúng ta phải thiết lập dấu ngoặc đơn cho biểu thức mũ.
> 2 ^ 3 ^ 4;
Syntax error, `^` unexpected
> 2 ^ (3 ^ 4);
2417851639229258349412352
1.6 Những thành phần của biểu thức.
Thông qua phép tính và thành phần số hạng của biểu thức bằng cách gõ trực
tiếp vào Maple, chúng ta có thể tính toán được ý đồ của ta. Chúng ta xem xét xem
Maple quan niệm Biểu thức như thế nào. Mỗi biểu thức của Maple có thể được định
dạng như một hoặc nhiều loại. ví dụ x+y+z là loại cộng (+). còn 2*3*x là loại nhân
(*).
Mỗi biểu thức của Maple được giữ trong cấu trúc giữ liệu. Nếu cấu trúc dữ liệu
bao gồm một số thành phần thông tin , thì cấu trúc có nhiều phần. Những phần của
cấu trúc trải dài theo thứ tự tuyến tính. Nghĩa là có phần thứ nhất, phần thứ hai
, Nhưng mỗi phần có cùng cấu trúc loại hoàn chỉnh. Ví dụ x+y+z biểu diễn một cấu
trúc dữ liệu. Cấu trúc này có thể chia làm ba phần, mỗi phần chứa thông tin về thành
phần của tổng đó là x,y và z. Biểu thức 2*(x+y)*z cũng có cấu trúc gồm ba phần ,
nhưng phần hai lại có cấu trúc tổng mà trong nó lại có hai phần.
Maple có một số hàm cho phép ta nhận thông tin về phần và loại của biểu thức.
op(i,<biểu thức>) đưa ra phần thứ i của <biểu thức>. Ví dụ op(1,2*x*y) là 2.
nops(<biểu thức>) đưa ra số số hạng của biểu thức. Ví dụ nops(2*x*y) là 3,

nops([4,3]) là 2.
whatype(<Biểu thức>) đưa ra loại biểu thức. Ví dụ whattype(2*x*y) là '*'.
type(<Biểu thức, <tên loại>) đưa ra giá trị true (đúng) hoặc false (sai) phụ thuộc vào
biểu thức có cùng tên loại hoặc không. Có thể có biểu thức thuộc loại mà nó là tổ hợp
HVTH: Nguyễn Siêu Đẳng Trang 8
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
của các tiêu chuẩn khác nhau. Ví dụ type(2*x*y,'*'); là đúng, type(2*x*y,polynom)
cũng là đúng.
Ví dụ 1.6.1: Loại và số hạng của biểu thức tính theo whattype và op
A. whattype đưa ra loại của biểu thức đối số. Loại của biến ẩn là chuỗi.
>s:=x+2*y+sin(3*z^2);
s:=x+2 y+sin(3z2);
>whattype(s);
+
>whattype(t);
string

B. nops đưa ra số số hạng của biểu thức. Có ba số hạng trong tổng s.
>nops(s)
3

C. op(i,<biểu thức>) đưa ra số hạng thứ i của biểu thức
>op(1,s);
x

D. Gía trị 0 ở đầu của op là tên hàm
>nops(op(3,s));
1
>op(0,op(3,s));
sin


E. sin(3*z^2) ccó một số hạng, đó là đối số 3*z^2
>op(1,op(3,s));
3z2

F. Lỗi xảy ra khi hỏi đối số thứ hai của sin(3*z^2), vì chỉ có một.
>op(2,op(3,s));
error, improper op or subscript selector

H. Phép chia như là phép nhân. tích luôn coi hàng hữu tỷ như số hạng đầu tiên.
>q:=x/(6*y)
q:=1/6 x/y
>type(q,'*');
HVTH: Nguyễn Siêu Đẳng Trang 9
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
true
>op(1,q);
1/6
>op(2,q);
x
>r:=op(3,q);
r:=1/y
>type(r,'^');
true
>op(1,r);
y
>op(2,r);
-1
1.7 Dãy biểu thức
Dãy biểu thức là việc sắp xếp đối tượng của Maple theo thứ tự và tách nhau bởi

dấu phẩy, như a,b,c. Dãy có thể được gán vào một biến như một giá trị giống như bất
kỳ một kết quả nào của Maple. Trong Maple có nhiều hàm và cấu trúc dữ liệu liên
quan tới dãy như cấu trúc tập hợp, cấu trúc danh sách và các hàm giải phương trình,
Ví dụ hàm solve nhiều khi đưa ra dãy các nghiệm, hàm op được cho một đối số, thì nó
đưa ra dãy tất cả số hạng của thông số. Ký hiệu NULL dùng cho dãy rỗng không có
phần tử nào.
Nhiều khi ta cần phải xây dựng dãy, ví dụ như nếu seq1 được gán vào dãy các
biến a,b,c thì seq1,d sẽ ra dẫy a,b,c,d còn seq1,NULL,seq1,NULL sẽ ra a,b,c,a,b,c.

Vì dãy thường xuất hiện trong thực tế nên Maple có một số hàm sẵn để xây
dựng dãy.
Xây dựng dãy biến đổi theo giới hạn số nguyên
seq(f(i),i=<cận dưới> <cận trên>)
Xây dựng dẫy biến đổi theo phần của biểu thức
seq(f(x),x=<biểu thức>)
Dạng một của seq sinh ra dẫy biểu thức bằng cách thay i vào f(i) từ giá trị cận
dưới tới giá trị cận trên. Biểu thức f(i) có thể là biểu thức bất kỳ chứa i, nhưng không
ở dạng hàm ẩn. f(i) cũng có thể không có i khi đó mọi phần tử của dẫy là như nhau và
đẫy được thay bằng chính phần tử này.
HVTH: Nguyễn Siêu Đẳng Trang 10
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
Dạng hai của eq tạo ra dãy từ các số hạng của một biểu thức hoặc từ một biểu thức
con của một biểu thức đã biết. Ví dụ như f(op(1,<biểu thức>), ,f(op(n,<biểu thức>)
với n là số của số hạng biểu thức.
Ví dụ1.7.1 Cấu trúc dãy và hàm seq
A. seq hoạt động giống lệnh sum. Tạo ra dãy số từ 12 giảm tới 0
>seq(12-i,i=0 12);
12,11,10,9,8,7,6,5,4,3,2,1,0

B. Xây dựng dãy theo liệt kê

>seq1:=sin(x), x=0;
seq1:=sin(x), x=0
>seq1:=seq1, 5;
seq1:=sin(x),x=0,5

C. Dẫy có thể dùng như một đối số cho hàm
>t:=taylor(seq1);
t:=x-1/6x^3+0(x^5)

D. Dãy gồm số mũ và hệ số của số hạng trong biểu thức
>seq(op(i,t),i=0 nops(t));
x,1,1,-1/6,3,0(1),5

E. Tạo dãy gồm số hạng thứ 0, 2 4 của dãy trên.
>seq(op(2*i,t),i=0 2);
x,1,3

F. op(<biểu thức>) chỉ có một thông số đưa ra dãy các số hạng của <biểu thức>,tương
đương với p(1 nops (<bieeur thức>), <biểu thức>).
>op(x+y+z);
x,y,z

G. op(i j,<biểu thức>) là dãy gồm các số hạng của biểu thức từ thứ i tới thứ j.
>op(1 4,t);
1,1,-1/6,3
HVTH: Nguyễn Siêu Đẳng Trang 11
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
1.8 Cấu trúc tập hợp và danh sách trong Maple
Tập hợp của Maple được viết như một dãy bao quanh bởi dấu { }, đây là ký
hiệu toán học cho tập hợp hữu hạn. Cũng như các đối tượng khác của Maple tập hợp

được gán giá trị như một biến, có thể làm đối số, kết quả của phép tính hoặc một
hàm.Maple cung cấp một số toán tử như lấy hợp, lấy giao và hiệu trên tập hợp.
Việc sắp xếp thứ tự trong tập hợp không có qui tắc nào đưa ra, chúng ta cố gắng sắp
xếp dữ liệu khi đưa vào thì tập hợp sẽ dữ nguyên thứ tự đó.

Danh sách của Maple là một dẫy nhưng trong nó không có phần tử lặp lại (mỗi phần
tử là duy nhất). Những phần tử trùng nhau trong danh sách sẽ bị loại bỏ chỉ để lại một.
Danh sách không có toán tử hợp, giao và trừ. Danh sách của Maple tạo ra bởi dẫy nằm
trong dấu [ và ]. Phân biệt dẫy và danh sách: khi viết [a,b],[b,c] thì Maple hiểu là hai
danh sách , còn khi viết (a,b),(b,c) thì chỉ là một dẫy mà thôi a,b,b,c.
Hàm op (xem lại phần trước) tác dụng lên tập hợp và danh sách đối với các số hạng
và các phép toán tương ứng của chúng.

Maple dùng lệnh subsop tạo ra phiên bản khác nhau của tập hợp, danh sách hoặc một
cấu trúc dữ liệu với nhiều số hạng.
Tạo biểu thức bằng thay thành phần
subsop(<chỉ số thành phần>=<đại lượng thay>, <biểu thức>);
Ví dụ 1.8.1 Xử lý trên phần tử của danh sách
A. Nối hai danh sách lại thành một danh sách khác
>list1:=[1,2,3];
list1:=[1,2,3]
>list2:=[4,5,6];
list2:=[4,5,6]
>list3:=[op(list1),op(list2)];
list3:=[1,2,3,4,5,6]

B. Đảo lại danh sách
>n:=nops(list3);
n:=6
>list4:itseq(op(n-i,list3),i=0 (n-1))];

list4:=[6,5,4,3,2,1]
>list5:=[seq(list3[n-i+1],i=1 n)];
HVTH: Nguyễn Siêu Đẳng Trang 12
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
list5:=[6,5,4,3,2,1]

C. Danh sách và toán tử của tập hợp
>set6:={list5[1 4]} intersect {op(list1)};
set6:={3}

D. Dùng subsop thay phần tử
>list6:=subsop(5=47, list5);
list6:=[6,5,4,3,47,1]
1.9 Tính toán số với độ chính xác bất kỳ
Trong tính toán bao giờ chúng ta cũng chỉ nhận được kết quả gần đúng với giá
trị thực, vì vậy Maple xây dựng hẳn một biến và một hàm để tính cho ta kết quả xấp xỉ
tốt nhất với độ chính xác bất kỳ.
I. Tìm số xấp xỉ với biến Digits cho trước
evalf(<Biểu thức> )
Giá trị của biến điều khiển Digits xác định số các chữ số thập phân để sử dụng
trong khi tính toán. Giá trị của Digits được mặc định bằng 10, nhưng Chúng ta có thể
thay đổi giá trị của Digits bằng việc gán cho nó một giá trị khác. Ví dụ như nếu
Chúng ta muốn tính toán với 40 chữ số sau dấu chấm thập phân, Chúng ta hãy gán
cho biến Digits giá trị 40 (Digits :=40) trước khi bắt đầu công việc tính toán của
chúng ta.

Ví dụ 1.9.1. Số thực với dấu chấm động trong Maple
A. Việc tính các số thực với dấu chấm động được sử dụng khi biểu thức có số hạng
phân số và số chấm động.
> 1.0 + 3/5;

1.6000000000
> 3.0*10^20 - 2.99*10^13;
.2999999701*10
21


B. Việc tính các số thực với dấu chấm động không phải lúc nào cũng chính xác.
> 1.0/3.0 + 1.0/3.0 +1.0/3.0;
.99999999
> " - 1;
HVTH: Nguyễn Siêu Đẳng Trang 13
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
1*10
-9


C. Tuy nhiên phép xấp xỉ có thể là cách để lấy được thông tin cần thiết để thấy rằng
kết quả tính toán với các số thập phân là không chính xác
>sum(1/(2*i - 1), i = 1 10);
31037876/14549535
> sum(1.0/(2*i - 1), i = 1 10);
2.133255530

D. Giá trị của biến Digits dùng để xác đinh độ chính xác của việc tính toán đối với các
số thực có dấu chấm động.
> Digits;
10
> Digits := 5: 2.0/3.0 + 5;
5.6667
> Digits := 40; 2.0^(1/3);

1.259921049894873164767210607278228 350570
> Digits := 10;
Tính toán trên số chấm động không chính xác kết quả bằng các loại số khác
nhưng chúng ta có thể kiểm tra được độ chính xác. Điển hình như tìm nghiệm tới độ
chính xác nào đấy của phương trình. Biểu thức của hàm evalf() là các toán tử, hàm số
hoặc các hằng như các bảng phần trước.
II.Tìm số xấp xỉ với độ chính xác theo giá trị của tham số Digits
evalf(<Biểu thức>, Digits )
Ví dụ 1.9.2 Xấp xỉ kết quả bằng evalf

A. evalf có thể được dùng để lấy lại việc tính toán các số thực với dấu chấmđộng ở
bất kỳ một hàm nào hoặc những biểu thức chứa các số thập phân hoặc các hằng số .
> expr1 := tan(1.0) + tan(2);
expr1 := 1.557407725 + tan(2)
>evalf(expr1);
627632138
> Digits := 20: evalf(expr1);
6276321382615189916
B. Chúng ta có thể thiết lập tạm thời giá trị cho biến Digits bằng tham số thứ hai trong
hàm evalf.
HVTH: Nguyễn Siêu Đẳng Trang 14
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
> evalf(sqrt(2), 40);
1.414213562373095048801688724209698078570
1.10 Định nghĩa những hàm đơn giản trong Maple

Định nghĩa hàm một biến:
<Tên hàm> := <Biến> -> <Biểu thức>;

Định nghĩa hàm nhiều biến:

<Tên hàm> := (<Biến1>, , <Biếnn>) -> <Biểu thức>;
Maple cho phép chúng ta tạo ra các hàm thông thường để sử dụng trong toán
học, khoa học và công việc kỹ sư. Cùng với Maple chúng ta có thể tính kết quả chúng,
tính đạo hàm chúng, giải những phương trình hoặc đơn giản biểu thức có chứa
chúng Chúng ta có thể định nghĩa nhũng hàm riêng cho mình bằng việc sử dụng
dấu -> của Maple. Để làm được điều đó chúng ta phải cần biết hàm tính toán thế nào
khi nó xuất hiện bên trong các biểu thức. Toán tử gán := có thể liên kết tên hàm với
việc định nghĩa nó. Tên của hàm ở phía trái dấu :=. Việc định nghĩa hàm ở bên phải
dấu :=. Ví dụ như f := x -> x^2 chính là câu lệnh của Maple dùng dể định nghĩa hàm
bình phương. Khi đó người ta có thể dùng hàm này như f(5) có kết quả 25 hoặc f(y+1)
có giá trị là (y+1)2 .

Ví dụ 1.10.1 Dấu -> để định nghĩa hàm trong Maple.

A. Ví dụ đơn giản
> g:= t -> t^3 + t^2 + t + 12;
g := t
3
+ t
2
+ t + 12

B. Định nghĩa một hàm bình phương và sử dụng nó.
> f := y -> y^2;
f := y -> y
2
> sin(f(x+1)*f(f(5))/sqrt(f(Pi+y));
625(sin((x+1)^2)/Pi+y))
> diff(f(z), z);
2 z


C. Khi chúng ta đã tính toán một biểu thức và muốn tạo ra một hàm để định nghĩa nó
hãy sử dụng câu lệnh unapply.
HVTH: Nguyễn Siêu Đẳng Trang 15
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
> expr1 := tan(t):
> expr2 := diff(tan(t), t):
> f := unapply(expr2, t);
f := t -> 1 + tan(t)
2


D. unapply có thể nạp thêm tham số vào cho hàm đã được định nghĩa.
> expr3 := subs(t=s*t, expr2):
> g := unapply(expr3, s, t);
g := (s, t) -> 1 + tan(s t)
2

Để tạo được các hàm thực thụ cho ta sử dụng phải biết cách sử dụng các bước
thực hiện của Maple. Trong phần lập trình với Maple chúng ta sẽ miêu tả phương
pháp tạo ra các hàm bằng cách định nghĩa trong proc / end sau.
1.11 Sử dụng alias để thay đổi tên của các hàm và những ký hiệu toán học
Gán cho biểu thức một bí danh.
alias(<Tên> = <Biểu thức>)
Chúng ta có thể tạo ra một tên ngắn cho các hàm hoặc các biểu thức mà Chúng
ta thường xuyên sử dụng. <Tên> là một ký tự (hoặc một ký hiệu), như cho a đại diện
cho biểu thức sqrt(x^2-2). Maple sử dụng việc xử lý tượng tự như hàm subs ( hàm
thay thế) thay thế bí danh. Nếu Chúng ta gán bí danh có tên alpha cho một biểu thức
con trong biểu thức thì khi in ra biểu thức này nó sẽ in thay alpha bằng biểu thức con
này. Câu lệnh alias khiến Maple sử dụng bí danh khi thực hiện thay cho biểu thức tại

những nơi mà nó xuất hiện. Trong kiểu làm việc tương tác, tại bất kỳ vị trí nào của
dòng thông tin nhập vào, nếu Maple thấy một bí danh nó sẽ trực tiếp thay thế biểu
thức vào đó. Bí danh không thực hiện khi trong lòng nó có chính bí danh này. Những
thông số và các biến cục bộ bên trong những thủ tục Maple không được thiết lập bí
danh.
HVTH: Nguyễn Siêu Đẳng Trang 16
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
PHẦN II: ỨNG DỤNG GIẢI PHƯƠNG TRÌNH BẬC VÀ BẤT
PHƯƠNG TRÌNH VỚI MAPLE
1. Giải phương trình nghiệm nguyên
Cú pháp:
isolve(eqns,vars);
eqns: phương trình hay tập các phương trình cần giải.
vars: tập các biến tự do.
Trong trường hợp người dùng không cung cấp biến tự do, Maple sẽ tự cung cấp
biến tự do.
Ví dụ:
> isolve(3*x+4*y=13);
{ }
1 1
3 4 _ , 1 3_x Z y Z= − = +

Ví dụ: xét bài tóan cổ
Trăm trâu ăn trăm bó cỏ
Trâu đứng ăn năm
Trâu nằm ăn ba
Trâu già ba ăn một.
> isolve({a+b+c=100,5*a+3*b+c/3=100},{m,n});
{a = -100 + 4 n, b = 200 - 7 n, c = 3 n}
> solve({-100+4*n>0,-100+4*n<100,200-7*n<100,200-

7*n>0,3*n>0,3*n<100},{n});
200
25 ,
7
n n
 
< <
 
 
HVTH: Nguyễn Siêu Đẳng Trang 17
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
2. Giải phương trình bậc hai:
Cho phương trình bậc 2: . Giải và biện luận phương trình với tham số
m:
Các bước giải và biện luận cơ bản
1) a = 0: Phương trình trở thành bx + c = 0
+ b = 0 = c : mọi x là nghiệm;
+ b = 0 c : vô nghiệm;
+ b 0 : phương trình trở thành phương trình bậc nhất, có nghiệm duy
nhất: x = - ;
2) a 0: Phương trình đã cho là phương trình bậc hai.
Delta = - 4ac; Delta' = - ac;
* Delta < 0 (Delta' < 0) : phương trình vô nghiệm;
* Delta = 0 (Delta' = 0): phương trình có hai nghiệm bằng nhau x =
* Delta = > 0 (Delta' > 0): phương trình có hai nghiệm phân biệt:
hay
(Biện luận và giải trên Maple được đính kèm theo bài tiểu luận này)
HVTH: Nguyễn Siêu Đẳng Trang 18
Báo cáo TH: Lập trình Symbolic cho TTNT GVHD: PGS.TS. Đỗ Văn Nhơn
TÀI LIỆU THAM KHẢO


[1] PGS.TS Đỗ Văn Nhơn, Tài liệu giảng dạy chuyên đề Lập trình Symbolic cho Trí
Tuệ Nhân Tạo, 2001-2011.
[2] GS.TSKH Trần Đức Vân, Giáo trình Maple, 1999-2000
[3] Maple Tutorial, Analytical and Numerical Methods,2nd edition, by Mark S.
Gockenbach (SIAM, 2010).
[4] Maple Advanced Programming Guide - M. B. Monagan, K. O. Geddes, K. M.
Heal, G. Labahn, S. M. Vorkoetter, J. McCarron, P. DeMarco
[5]
HVTH: Nguyễn Siêu Đẳng Trang 19

×