Thủ tục, hàm hay chu trình (procedure)

Một phần của tài liệu LẬP TRÌNH SYBOLIC -MAPLE VÀ ỨNG DỤNG (Trang 26)

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.

Mộ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ố) local các_biến; Thuật toán xử lý; end; 2.3.1 Cấu trúc thủ tục Cấu trúc cú pháp: proc (argseq) local nseq; global nseq; options nseq; description stringseq; 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

statseq Nội dung của thủ tục Ví dụ:

> lc := proc( s, u, t, v )

description "form a linear combination of the arguments";

s * u + t * v end proc;

2.3.2 Cấu trúc chu trình

Khai báo chu trình:

procedure_name:=proc(parameter_sequence) [local local_sequence] [global global_sequence] [options options_sequence] statements_sequence; end; Trong đó:

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 (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.

Phạm vi biến

1.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 đó.

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ử.

Định giá trên các biến

1.Định giá trị tên hàm và tham biến

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.

2.Đị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 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.4 Giải một số bài tập sử dụng hàm trong Maple

2.4.1 Giải phương trình bậc 2

Lệnh gõ Kết quả Ghi chú

>

> {x} là tập hợp

nghiệm nên kết quả là 1 dãy (tập hợp, danh sách). Thủ tục giải phương trình bậc 2 2.4.2 Giải hệ phương trình Lệnh gõ Kết quả Ghi chú > 2 nghiệm của hệ phương trình.

> 2 nghiệm của hệ phương trình chứa tham số m. 2.4.3 Giải bất phương trình Lệnh gõ Kết quả Ghi chú > (-∞,-3),(-1,∞) > (-∞,-3],[-1,∞)

2.4.4 Tìm hình chiếu của 1 đường thẳng

Lệnh gõ Kết quả Ghi chú > Cho điểm M có tọa độ x,y,z > Cho phương trình mặt phẳng P

> Cho tạo độ vecto

đơn vị v > > > > > Kết quả hình chiếu là x,y,z.

CHƯƠNG 3 : LẬP TRÌNH MỘT SỐ ỨNG DỤNG TRONG MAPLE

Chương trình xây dựng trên thư viện hỗ trợ tính toán Maple 16.

3.1 Giải phương trình bậc 2:

3.1.1 Đặt vấn đề bài toán

Giải phương trình bậc 2 một ẩn số như sau: ax2

+ bx + c = 0 (a#0)

3.1.2 Biểu diễn bài toán

Phương trình bậc 2 một ẩn được biểu diễn như sau: ax2

+ bx + c = 0 (a#0) Ta có ∆ = b2

– 4ac

+ Nếu ∆>0 thì phương trình có hai nghiệm phân biệt.

+ Nếu ∆=0 thì phương trình có nghiệm kép.

+ Nếu ∆<0 thì phương trình vô nghiệm.

3.1.3 Thuật toán

Input: phương trình bậc hai Output: nghiệm của phương trình Bước 1: nhập phương trình bậc 2 Bước 2: tính a, b, c và delta Delta = b*b – 4*a*c Bước 3: xét delta

if Delta > 0 then begin

x1=(-b-sqrt(delta))/(2*a) x2=(-b+sqrt(delta))/(2*a)

xuất kết quả : phương trình có hai nghiệm là x1 và x2

end else

if delta = 0 then

xuất kết quả : phương trình có nghiệm kép là -b/(2*a)

else {trường hợp delta < 0 }

xuất kết quả : phương trình vô nghiệm

3.1.5 Chạy thử nghiệm

>

Gia tri cua delta =5

Phuong trinh co 2 nghiem phan biet Gia tri cua x1 = -3/2+1/2*5^(1/2) Gia tri cua x2 = -3/2-1/2*5^(1/2)

>

Gia tri cua delta =0

Phuong trinh co nghiem kep Gia tri cua x = -1

>

Gia tri cua delta =-16 Phuong trinh vo nghiem

3.2 Giải bài toán đại số vector 2D:

3.2.1 Cơ sở lý thuyết về vector

- Vector là một đoạn thẳng có độ dài xác định và hướng xác định. A=| | là độ dài hoặc module của vector .

- Các vector bằng nhau: - Cộng các vector: - Vector đối - Trừ các vector

- Nhân vector với một số:

Với vector luôn thỏa điều kiện

b)Phép chiếu vector lên trục hoặc vector

c) Các thành phần và tọa độ của vector

e) Tích vô hướng của hai vector

- Các tính chất vô hướng

- Tích vô hướng của các vector dưới dạng tọa độ

- Bình phương vô hướng của vector

- Bình phương module của vector

- Độ dài của vector

- Góc giữa hai vector

f) Tích vector của hai vector:

- Tích của 2 vector là vector

thảo các điều kiện:

- Tích 2 vector dạng tọa độ:

3.2.2 Đặt vấn đề bài toán

Cho 2 điểm A, B. Ứng dụng những lý thuyết về vector nêu trên, hãy tạo vector A,B và tính độ dài vector A,B.

3.2.3 Cài đặt thuật toán

> TaoVector := proc(A,B)

return [B[1]-A[1],B[2]-A[2]]; end proc:

ModuleVector := proc(vector)

return sqrt(vector[1] ^2+vector[2]^2); end proc:

TongVector := proc(A,B)

return [A[1]+B[1],A[2]+B[2]]; end proc:

TichVoHuong := proc(A,B) return A[1].B[1]+ A[2].B[2]; end proc: CosGoc := proc(A,B) return TichVoHuong(A,B)/(ModuleVector(A)*ModuleVector(B)); end proc: KiemTra2VectorCungPhuong := proc(A,B) if(B[1]=0 and B[2] = 0 ) then return 1 elif (B[1]=0 or B[2]=0) then return 0

elif (A[1]/B[1] = A[2]/B[2]) then return 1 else return 0 end if; end proc: KiemTra3DiemThangHang := proc(A,B,C) return KiemTra2VectorCungPhuong( TaoVector(A,B),TaoVector(A,C)); end proc:

DiemTheoTiVector := proc(A,B,k) if k=1 then return [0,0]

else

return [(A[1] -k*B[1])/(1-k),(A[2] -k*B[2])/(1-k) ] end if; end proc: TrungDiemC1 := proc(A,B) return DiemTheoTiVector(A,B,-1); end proc: TrungDiemC2 := proc(A,B)

return [(A[1] +B[1])/2,(A[2] +B[2])/2 ]; end proc:

TrongTamTamGiac := proc(A,B,C)

return [(A[1] +B[1])/3,(A[2] +B[2])/2]; end proc:

ChanDuongPhanGiac := proc(A,B,C) local vectAB, vectAC,AB,AC,k; vectAB:= TaoVector(A,B); vectAC:= TaoVector(A,C); AB:= ModuleVector(vectAB); AC:= ModuleVector(vectAC); k:= -AB/AC; DiemTheoTiVector(B,C,k); end proc: TamNoiTiepTamGiac := proc(A,B,C) local chanA,chanB; chanA := ChanDuongPhanGiac(A,B,C); return ChanDuongPhanGiac(B, chanA,A); end proc:

3.2.4 Chạy thử nghiệm

CHƯƠNG 4 KẾT LUẬN

Maple là một công cụ khá mạnh mẽ để làm việc liên quan đến tính toán với các chức năng, phương trình, và thiết lập phương trình. Nó có khả năng mở rộng, đơn giản hóa, bao thanh toán, inversing, và giải phương trình theo thứ tự giây trong khi nó cần giờ đối với nhà toán học tiên tiến nhất để làm. Chưa kể, khả năng Maple để vẽ các phương trình một cách rõ ràng, chứng tỏ là một tài sản thực sự có giá trị cho một phần mềm toán học. Đó là lý do tại sao Maple là rất hữu ích cho các nhiệm vụ có rất nhiều để làm với các chức năng và phương trình.

Bên cạnh đó, Maple có một bất lợi so với thấp hơn, ngôn ngữ lập trình ít linh hoạt hơn. Sự linh hoạt chức năng lợi thế, yêu cầu các chương trình để dịch các chuỗi phương trình để chương trình máy tính có thể đọc được, do đó làm chậm quá trình tính toán. Vì vậy, Maple là không phù hợp cho các nhiệm vụ với yêu cầu tính toán nặng, hơn ngôn ngữ lập trình thấp hơn.

Bài thu hoạch đã trình bày những kiến thức cơ bản để sử dụng các thư viên có sẵn của Mapple, đồng thời hướng dẫn một số công cụ cơ bản cho việc lập trình trong Mapple cũng như cách viết các thủ tục, cách gọi thực thi các thủ tục. Đồng thời cũng xây dựng một số ứng dụng trong Maple. Từ nền tảng này có thể xây dựng nên nhiều chương trình khác phục vụ cho công việc học tập, nghiên cứu khoa học và ứng dụng trong thực tiễn.

Tuy nhiên, do thời gian tiếp cận công cụ khá ngắn và bản thân chưa có nhiều thời gian để đầu tư chuyên sau trong việc học tập sử dụng chương trình nên có thể còn gặp nhiều sai sót và chưa hoàn thiện. Nhưng qua bài tiểu luận này đã giúp chúng em hiểu thêm nhiều về công cụ hỗ trợ tính toán mạnh mẽ này với nhiều thư viện phong phú giúp giải quyết bài toán một cách dễ dàng.

TÀI LIỆU THAM KHẢO

1. Tài liệu giảng dạy môn học Lập trình Symbolic cho Trí tuệ nhân tạo của thầy PGS. TS Đỗ Văn Nhơn – Đại học Công nghệ thông tin – Đại học Quốc gia TP.HCM.

2. http://google.com.vn, http://mapplesoft.com 3. Tại mục Help của chương trình Mapple v.16.

4. Bài báo “Một số ứng dụng của Mapple vào các bài toán khảo sát hàm số và tích phân” trong dạy học toán ở Trung học phổ thông và cao đẳng sư phạm của Th.S Hồ Xuân Thắng.

5. http://giaoan.violet.vn/present/show?entry_id=5212157 6. http://www.slideshare.net/kutheo/baiso6cautrudulieu

Một phần của tài liệu LẬP TRÌNH SYBOLIC -MAPLE VÀ ỨNG DỤNG (Trang 26)