Thủ tục là một dãy các lệnh của Maple theo thứ tự mà người lập trình định sẵn để xử lí một công việc nào đó, khi thực hiện thủ tục này Maple sẽ tự động thực hiện các lệnh có trong thủ tụ
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Giao viên hướng dẫn : PGS.TS Đỗ Văn Nhơn
Học viên thực hiện: Nguyễn Thị Thu Thủy
Trang 2CHƯƠNG 1 TÍNH TOÁN SYMBOLIC TRONG MAPLE 5
1.1 Giới thiệu Maple 5
1.2 Các hàm tính toán cơ bản 6
1.2.1 Tính toán số chính xác và gần đúng 6
1.2.2 Tính toán symbolic 6
1.2.3 Tính toán số nguyên, số hữu tỉ, số thực, số phức 7
1.2.4 Tính đạo hàm: 9
1.2.5 Tính tổng vô hạn 10
1.2.6 Khai triển Maclaurin 10
1.2.7 Giải phương trình, hệ phương trình (có thể tính theo tham số) 10
1.2.8 Đơn giản biểu thức 10
1.3 Các kiểu cấu trúc cơ bản 11
1.3.1 Sequence (dãy) 11
1.3.2 Lists (danh sách) 12
1.3.3 Sets (tập hợp) 13
1.3.4 Arrays (mảng) 14
1.3.5 Tables (bảng) 15
1.3.6 Strings 15
1.4 Xử lý các biểu thức 16
1.5 Tính toán đa thức 17
1.5.1 Các hàm tiện ích 17
1.5.2 Các toán tử trên các đa thức 19
1.6 Tìm nghiệm phương trình, hệ phương trình, bất phương trình 19
CHƯƠNG 2 CƠ SỞ LẬP TRÌNH SYMBOLIC TRONG MAPLE 21
2.1 Các yếu tố của ngôn ngữ lập trình 21
2.2 Lệnh cơ sở, lệnh điều khiển 21
2.2.1 Lệnh điều kiện IF 21
Trang 32.2.3 Vòng lặp for 22
2.2.4 Lệnh Break 24
2.2.5 Lệnh Next 24
2.2.6 Hàm Return, Error 25
2.3 Thủ tục, hàm hay chu trình (procedure) 25
2.3.1 Cấu trúc thủ tục 26
2.3.2 Cấu trúc chu trình 27
2.4 Giải một số bài tập sử dụng hàm trong Maple 29
2.4.1 Giải phương trình bậc 2 29
2.4.2 Giải hệ phương trình 29
2.4.3 Giải bất phương trình 30
2.4.4 Tìm hình chiếu của 1 đường thẳng 30
CHƯƠNG 3 : LẬP TRÌNH MỘT SỐ ỨNG DỤNG TRONG MAPLE 31 Chương trình xây dựng trên thư viện hỗ trợ tính toán Maple 16 31
3.1 Giải phương trình bậc 2: 31
3.1.1 Đặt vấn đề bài toán 31
3.1.2 Biểu diễn bài toán 31
3.1.3 Thuật toán 31
3.1.4 Cài đặt thuật toán 32
3.1.5 Chạy thử nghiệm 33
3.2 Giải bài toán đại số vector 2D: 33
3.2.1 Cơ sở lý thuyết về vector 33
3.2.2 Đặt vấn đề bài toán 38
3.2.3 Cài đặt thuật toán 38
3.2.4 Chạy thử nghiệm 39
CHƯƠNG 4 KẾT LUẬN 41
* * *
Trang 4LỜI CẢM ƠN
Trong suốt thời gian học vừa qua, chúng em đã nhận được sự quan tâm, động viên và tận tình dạy dỗ của thầy, đã cung cấp những kiến thức hết sức bổ ích và cần thiết để chuẩn bị cho các môn học tiếp theo ở khóa học
Chúng em xin chân thành cảm ơn quý thầy cô trường Đại học Công Nghệ Thông Tin, Ban Giám Hiệu đã tạo cho chúng em một môi trường học tập, rèn luyện đạo đức, nhân cách trong suốt thời gian học đã cung cấp những kiến thức cũng như những kinh nghiệm hết sức cần thiết cho việc học tập và nghiên cứu
Đặc biệt, chúng em xin gửi lời cảm ơn chân thành đến PGS.TS Đỗ Văn Nhơn, Thầy đã truyền đạt những kiến thức quý báu về môn học Lập trình Symbolic trong Trí tuệ nhân tạo, tận tình hướng dẫn chúng em thực hiện tiểu luận môn Lập trình Symbolic trong Trí tuệ nhân tạo
Tuy nhiên, do những hạn chế về mặt thời gian, chúng tôi rất mong nhận được sự chỉ bảo tận tình của quý thầy cô và sự phản hồi góp ý của các bạn đối với những thiếu xót còn tồn tại trong đề tài này Nhóm chúng em rất mong được
sự đóng góp nhiệt tình của quý Thầy Cô để bài luận được hoàn thiện hơn
Trang 5NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
Trang 6
CHƯƠNG 1 TÍNH TOÁN SYMBOLIC TRONG MAPLE
1.1 Giới thiệu Maple
Maple là hệ thống tính toán trên các biểu thức đại số và minh họa toán học mạnh mẽ của công ty Warterloo Maple Inc Maple ra đời năm 1991 đến nay đã phát triển đến phiên bản 16 Maple có cách cài đặt đơn giản, chạy được trên nhiều hệ điều hành, có cấu trúc linh hoạt để sử dụng tối ưu cấu hình máy và có trình trợ giúp rất dễ sử dụng Từ phiên bản 7, Maple cung cấp ngày càng nhiều các công cụ trực quan, các gói lệnh tự học gắn liền với toán học phổ thông và đại học Ưu điểm đó làm cho nhiều người trên thế giới lựa chọn sử dụng Maple cùng các phần mềm toán học khác áp dụng trong dạy học toán và các công việc tính toán đòi hỏi của thực tiễn và sự phát triển của giáo dục
Có thể nhận thấy rằng ngoài các tính năng tính toán và minh họa rất mạnh
mẽ bằng các câu lệnh riêng biệt (thường chỉ cho ta kết quả cuối cùng), Maple còn là một ngôn ngữ lập trình hướng thủ tục (procedure) Thủ tục là một dãy các lệnh của Maple theo thứ tự mà người lập trình định sẵn để xử lí một công việc nào đó, khi thực hiện thủ tục này Maple sẽ tự động thực hiện các lệnh có trong thủ tục đó một cách tuần tự và sau đó trả lại kết quả cuối cùng
Maple có các chức năng cơ bản sau:
+ 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 được hầu hết các phép toán cơ bản trong chương trình toán đại học và sau đại học
+ Cung cấp các công cụ minh họa hình học thuận tiện gồm: vẽ đồ thị động
và tĩnh của các đường và mặt được cho bởi các hàm tùy ý và trong các hệ tọa độ khác nhau
+ Là một 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ữ lập trình khác
Trang 7+ Cho phép trích xuất ra các định dạng khác nhau như 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 trợ giáo hữu ích cho học sinh sinh viên trong việc tự học
Trang 81.2.3 Tính toán số nguyên, số hữu tỉ, số thực, số phức
Maple được sử dụng giống như 01 máy tính tính toán, nó có khả năng nhận biết được các toán tử như giai thừa, tìm ước chung lớn nhất, bội chung nhỏ nhất, tính toán trên các số nguyên cực lớn
- Các tính toán số nguyên gồm:
+ biểu thức thông thường
Ví dụ: nhân 2 số 17x15
>
Trang 9+ giai thừa, hàm length
Ví dụ: Tính giai thừa của 10 và tính chiều dài của 1 số
>
>
+ Các hàm:
abs Lấy giá trị tuyệt đối > abs(-11);
ifactor Phân tích ra thừa số nguyên
isprime Kiểm tra 1 số có phải là số
nguyên hay không?
>
ithprime Xác định số nguyên tố thứ n
(mặc định 2 là số nguyên tố thứ 1)
>
Trang 10prevprime(n)
nextprime(n)
Số nguyên tố lớn nhất nhỏ hơn n và nhỏ nhất lớn hơn n
>
>
min Tìm số nhỏ nhất
convert Chuyển một số từ dạng này
sang dạng khác
> convert(9, binary);
>
convert(1.23456,rational);
- Tính toán số phức: bao gồm các hàm toán học
+ sin, cos, tan,
+ sinh, cosh, tanh,
+ arcsin, arccos, arctan,
Trang 11Kết quả:
Trang 121.3 Các kiểu cấu trúc cơ bản
Cú pháp:
> seq(a^n,n=0 10);
a$4;
Kết quả:
Trang 15Identity: tạo ma trận đơn vị
Map(f,expr): tính giá trị hàm với đối số là 1 thành phần biểu thức Expr có thể là list, set, phương trình, mảng, bảng… hoặc có dạng tổng, tích
Sort(expr): sắp xếp theo thức tự abc hoặc số mũ
Sort(expr, varlist, plex): sắp xếp bt theo kiểu từ điển
Sort(expr, varlist, tdeg): sắp xếp theo tổng bậc
Sort(list), sort(list, odering): sắp xếp list theo trật tự cho bởi odering
- Cú pháp:
> squares := array(1 3);
squares := array(1 3, [1,8,127]);
squares[2];
Kết quả:
Trang 161.3.5 Tables (bảng)
- Cấu trúc bảng gồm hai thành phần có cú pháp như sau:
- Hàm table tạo ra bảng với giá trị khởi đầu được chỉ ra bởi L Nếu L có dạng dãy các đẳng thức thì vế trái sẽ là khóa, vế phải là giá trị tương ứng với khóa Nếu L có dạng dãy của các giá trị thì các chỉ số là 1,2,3,…
- Dùng 02 hàm indices(bảng) và entries(bảng) để tạo ra một dãy gồm các khóa và giá trị của bảng
- Bảng là công cụ thích hợp để lập sổ tra cứu
Trang 18- Các lệnh khác: value, eval, evalf
Trang 19tcoeff Lấy hệ số của biến có mũ thấp nhất
collect Rút gọn biểu thức > f :=
Trang 201.5.2 Các toán tử trên các đa thức
Bao gồm các phép toán sau:
+, - Cộng và trừ
*, ^ Nhân và lũy thừa content Nội dung của đa thức divide Phép chia chính xác gcd USCLN của 2 đa thức lcm Bội số chung nhỏ nhất của 2 đa thức prem
primpart Phần nguyên của đa thức rem
quo Thương của 2 đa thức
1.6 Tìm nghiệm phương trình, hệ phương trình, bất phương trình
Để tìm nghiệm các phương trình, bất phương trình và hệ phương trình… trong
maple cho sử dụng hàm solve và fsolve để tìm nghiệm cho các phương trình trên
Trang 21fsolve( poly, x, -1 1 );
Kết quả:
Trang 22CHƯƠNG 2 CƠ SỞ LẬP TRÌNH SYMBOLIC TRONG MAPLE 2.1 Các yếu tố của ngôn ngữ lập trình
2.2 Lệnh cơ sở, lệnh điều khiển
2.2.1 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 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 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
Ví dụ:
> a:= 3: b:=5: if evalb(a > b) then a else b end if; 5*(Pi + `if`(a > b,a,b));
Trang 23>
2.2.2 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 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 Để thoát ra khỏi vòng lặp, ta có thể sử dụng các lệnh sau: RETURN, break hoặc quit, done, stop
Trang 24od;
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
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, done, stop, RETURN giống như trong vòng lặp while
Trang 25Nế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)
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
Trang 26next 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
2.2.6 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
Ví dụ: Nếu không có lệnh return thì kết quả tính toán sau cùng của thủ tục chính là kết quả trả về
2.3 Thủ tục, hàm hay chu trình (procedure)
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
Trang 27Một chương trình tính toán thường có 03 phần:
+ Dữ liệu vào + Phương pháp + Kết quả Cấu trúc của Maple có dạng:
Tên_chương_trình := proc(các đối số)
statseq end proc proc (argseq)::type;
local var1::type1, var2::type2, ;
global nseq; options nseq; description stringseq;
statseq end proc Trong đó:
argseq: Tên tham số
type Kiểu giá trị trả về
nseq Tên biến toàn cục
var1,var2 Tên biến cục bộ thủ tục
type1,type2 Kiểu của biến
stringseq Mô tả cho thủ tục
Trang 28statseq Nội dung của thủ tục
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
Tham biến
Trang 29Tham 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
được khai báo trong đó
2.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ì
3.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ử