Mở đầu. Chương II : Tìm hiểu kỹ thuật nhúng Maple 9.0 Chương III : Cơ sở lý luận. Chương IV : Giới thiệu chương trình. Chương V : Đánh giá tổng kết, hướng phát triển của đề tài.
-------o0o------ SVTH : Lê Văn Đoan Trang 3 Chương II : Kỹ Thuật Nhúng GVHD: Ts. Nguyễn Hữu Thông Chương II : NHÚNG MAPLE VÀO VB 6.0 I- Tìm hiểu về Maple 9. Khái niệm : Maple 9.5 là một môi trường bao hàm toàn diện cho sự khám phá, dạy học và các ứng dụng toán học. Chúng ta có thể sử dụng Maple để giải quyết PDEs, tưởng tượng ra các quỹ đạo của phân tử hyđrô, viết lại thành mật mã các thông điệp, tính toán giá cả tùy ý, thuyết trình trên các chuỗi Taylor, chạy các phân tích lỗi (error) trên dữ liệu thí nghiệm hay thực hiện bất kỳ một tác vụ khác mà có liên quan đến toán học.5 chứa đựng hàng ngàn các hàm toán học.
Nhưng bạn cũng có thể tạo các hàm tùy ý sử dụng ngôn ngữ lập trình Maple. Một khi bạn đã tạo một ứng dụng Maple, Maple 9.5 chứa các công cụ thực hiện nó và xuất các kết quả tới các ứng dụng phần mềm khác. Giao diện trang Maple (interface) : Maple 9.5 cung cấp cho người dùng với 2 trang giao diện. Cả hai đều cho truy xuất tới các dụng cụ toán học của Maple 9.5 và nắm giữ các lợi thế của chức năng mới trong Maple 9.
Giao diện chính của Maple 9.5 là hình sau : SVTH : Lê Văn Đoan Trang 4 Chương II : Kỹ Thuật Nhúng GVHD: Ts. Nguyễn Hữu Thông Ngoài những công việc như tính toán với các phép toán thông thường : Cộng, trừ, nhân, chia các số thực (real), nguyên (integer) nó còn cho phép chúng ta tính toán, xử lý các hàm phức tạp hơn : Hàm mũ, logarit, hàm lượng giác, tính đạo hàm, giải các phương trình bậc 2, 3, 4,…theo biến x, y,…Một trong các tính năng quan trọng nhất của maple mà liên quan đến đề tài của em là nó còn có thể cho chúng ta vẽ đồ thị của các hàm số từ các hàm sơ cấp ở phổ thông cho đến các hàm phức tạp hơn mà một số phần mềm không thể làm được. đây em chỉ nêu một số tính năng quan trọng của Maple 9.5 trong việc vẽ đồ thị hàm số.5, chẳng hạn người dùng muốn vẽ một hàm sơ cấp y=f(x) trong mặt phẳng Oxy (2D) dùng cú pháp sau : SVTH : Lê Văn Đoan Trang 5 Chương II : Kỹ Thuật Nhúng GVHD: Ts. Nguyễn Hữu Thông [>plot(f(x),x= x1 .x2); rồi nhấn Enter, Maple 9.5 sẽ vẽ cho chúng ta hàm f(x) theo yêu cầu trên tức là nó sẽ vẽ đồ thị f(x) trong khoảng hoành độ x 1 đến x2 mà chúng ta giới hạn.
Còn vẽ trong môi trường 3D tức là không gian 3 chiều Oxyz thì cú pháp cũng không khác là mấy : [>plot3d(f(x),x= x1 .10); Sau khi nhấn Enter thì được hình của đồ thị f(x)= x3 + 3x2 – 2x +1 với x thuộc [-10,10] trong mặt phẳng Oxy : SVTH : Lê Văn Đoan Trang 6 Chương II : Kỹ Thuật Nhúng GVHD: Ts. Nguyễn Hữu Thông Đây là cú pháp và hình ảnh của ví dụ trên trong không gian 3 chiều Oxyz (3D) : [>plot3d( x^3 + 3*x^2 + 4, x=-10.10); SVTH : Lê Văn Đoan Trang 7 Chương II : Kỹ Thuật Nhúng GVHD: Ts. Nguyễn Hữu Thông Bên cạnh vẽ đồ thị ra Maple còn có thể tính được đạo hàm cấp 1,2,… của các hàm số, để tính được đạo hàm, trong Maple 9.5 chúng ta đánh vào cú pháp sau : ]>diff(f(x), x1, x2, ., xn); với f(x) là hàm theo biến x. x1, x2, …xn là tên biến.
Chẳng hạn chúng ta muốn tính đạo hàm cấp 1 của hàm số : y=f(x)= 5x3 - 3x2 – 7x +1 [>diff(5*x^3 - 3*x^2 -7*x +1,x); Kết quả thu được sau khi nhấn Enter : SVTH : Lê Văn Đoan Trang 8 Chương II : Kỹ Thuật Nhúng GVHD: Ts. Nguyễn Hữu Thông 2 15 x - 6 x - 7 Trên đây giới thiệu sơ qua một số tính năng quan trong của Maple 9.5 trong việc khảo sát đồ thị ( tính đạo hàm, vẽ đồ thị ). Như vậy đối với chúng ta, những người thường xuyên làm việc với máy tính cụ thể là thường xuyên làm việc với Maple thì những câu lệnh, cú pháp trong Maple thì quả là rất quen thuộc. Nhưng chúng ta hãy đặt ra câu hỏi đối với các em học sinh phổ thông : Liệu các em có thể nắm bắt được dễ dàng ngay những cú pháp, hay câu lệnh trên không khi mà chưa một lần các em làm việc với Maple vì nhiều lý do không cho phép ? Đề tài của em giúp cho các em có thể khảo sát và vẽ đồ thị của các hàm số sơ cấp một cách nhanh nhất, rõ ràng nhất và đặc biệt là đơn giản nhất.
Để có được các tính năng của Maple 9.5 em đã phải đọc tài liệu liên quan đến Maple và em biết được rằng trong Maple 9.5 còn có hỗ trợ một số ngôn ngữ lập trình cấp cao như : C, Java và Visual Basic, một ý tưởng được đặt ra cho em là dùng ngôn ngữ Visual Basic 6.0 lập trình giao diện và nhúng (embed) các module của Maple về vẽ đồ thị vào Visual Basic. Tại sao em lại chọn ngôn ngữ Visual Basic 6.0 để thực hiện nhúng vào Maple 9.5 chứ không phải là C hay Java, đó là bởi vì : - Thứ nhất đó là do : Maple 9.5 hỗ trợ Visual Basic với rất nhiều phương thức. - Thứ hai : Visual Basic là một ngôn ngữ lập trình giao diện, trong sáng, dễ dàng để làm quen với mọi đối tượng. Để hiểu rõ các phương thức của Maple 9.5 hỗ trợ các ngôn ngữ lập trình cũng như hoạt động của chúng, chúng ta sang phần tiếp theo : SVTH : Lê Văn Đoan Trang 9 Chương II : Kỹ Thuật Nhúng GVHD: Ts.
Nguyễn Hữu Thông II – Nhúng (embed) Maple vào Visual Basic : Visual Basic là một ngông ngữ lập trình giao diện dễ tiếp xúc và hỗ trợ nhiều tính năng, đặc biệt là các tính năng có thể kết hợp với Maple 9. Các hàm Maple : * Hàm EvalMapleStatement (kv, Statement) Các đối số : kv : kernel handle returned by StartMaple (điều khiển chính trả về khởi đầu Maple) Statement : Command String (chuỗi lệnh) Mô tả : EvalMapleStatement phân tích cú pháp và thi hành chuỗi lệnh căn cứ vào đối số trình bày (statement). Argv : Khởi động các tham số dòng lệnh ( String array). cb : callback vector ( MapleCallBack) SVTH : Lê Văn Đoan Trang 10 Chương II : Kỹ Thuật Nhúng GVHD: Ts.
Nguyễn Hữu Thông user_data : dữ liệu được đưa vào trong khi gọị hàm Callback ( Long). err : Chuỗi đệm ( String). Mô tả : Hàm StartMaple là một phần của giao diện OpenMaple vào Microsoft Visual Basic. StartMaple khởi đầu một phần OpenMaple.
Khi thành công, một phần điều khiển (handle) được trả về. Điều khiển này là cần thiết như một đối số vào tất cả các chức năng OpenMaple API ( Application Program Interface : Giao diện chương trình ứng dụng OpenMaple ). Trong đề tài của em để có thể vẽ được các hàm số được cung cấp trong Maple 9.5 vào Visual Basic 6.0 em đã thiết kế các form và hai module : PlotterModule.bas và maple. Về cơ bản chung nhất của mỗi form có thể vẽ được đó là có một nút vẽ (button), 3 textbox và một picturebox để hiển thị hình vẽ của hàm số Ví dụ : Một chương trình nhỏ của em trong Visual Basic có tên là “Ve do thi” Dùng để vẽ một hàm số trong một cửa sổ : Dữ liệu (data) bao gồm một form có tên là MainForm và hai module là Module : PlotModule và Module : Maple.
Module Maple được chứa trong thư Mục extern/include tất cả đều chứa trong thư mục Maple 9.5 mà em đã cài đặt trong ổ C chẳng hạn. SVTH : Lê Văn Đoan Trang 11 Chương II : Kỹ Thuật Nhúng GVHD: Ts. Nguyễn Hữu Thông MainForm gồm có : Một textbox FunctionBox để nhập biểu thức hay hàm số cần vẽ và hai textbox khác lần lượt có tên là Lowerrange và Upperange Một PictureBox : Dothi Một nút bấm (button) PlotButton, một nút ExitButton dùng để thoát khỏi chương trình. Giao diện trông như sau : Source code : SVTH : Lê Văn Đoan Trang 12 Chương II : Kỹ Thuật Nhúng GVHD: Ts.
Nguyễn Hữu Thông Của form : Khai báo biến toàn cục (global) của form : Public kv As Long 'kv (kernel vector) is the handle for the Maple kernel Public PlotFileName As String ‘Trong load form (đoạn code của MainForm): Private Sub Form_Load() ‘Khai báo 2 biến : Dim error As String Dim args(0 To 1) As String ‘Khởi đầu phương thức callback cho báo lỗi (error), thanh trạng thái (status),… cb.lpTextCallBack = GetProc(AddressOf TextCallBack) cb.lpErrorCallBack = GetProc(AddressOf ErrorCallBack) cb.lpCallBackCallBack = 0 'khởi tạo Maple bằng cách đặt giá trị đầu cho kv với lệnh StartMaple của OpenMaple. SVTH : Lê Văn Đoan Trang 13 Chương II : Kỹ Thuật Nhúng GVHD: Ts. Nguyễn Hữu Thông kv = StartMaple(0, args, cb, 0, error) If kv = 0 Then ‘Nếu kv=0 thì xuất ra thông báo lỗi (error) MsgBox "Ban nhap sai kieu du lieu!!!" + StrConv(error, vbUnicode), vbCritical, "" Unload Me End End If End Sub Xử lý nút PlotButton với mã(code) như sau : Private Sub PlotButton_Click() ‘Khai báo các biến và mảng Dim TempFile, command As String Dim temppath(256) As Byte Dim DirLen, r As Long ‘Lấy một cái Tên file cho đồ thị DirLen = GetTempPath(256, temppath(0)) If DirLen <> 0 Then TempFile = "dothi.gif" 'TempFile = Left(StrConv(temppath(), vbUnicode), DirLen) & "plot" & Int(Rnd() * 10) & ".gif" SVTH : Lê Văn Đoan Trang 14 Chương II : Kỹ Thuật Nhúng GVHD: Ts. Nguyễn Hữu Thông End If ‘ kv luôn là đối số đến hàm EvalMapleStatement Call EvalMapleStatement(kv, plotsetup('gif','plotoutput'=`" + TempFile + "`);") 'Tạo ra đồ thị sử dụng lệnh vẽ Maple.
r = EvalMapleStatement(kv, "plot(" & FunctionBox.Text & “);") If r <> 0 Then ‘ Nếu như r ≠ 0 thì load đồ thị lên PictureBox (dothi) hinh.Picture = LoadPicture(TempFile) End If PlotFileName = TempFile End Sub ‘Đoạn code của Module PlotModule : Public cb As MapleCallBack Public Declare Function GetTempPath Lib "kernel32.dll" Alias "GetTempPathA" _ (ByVal nBufferLength As Long, ByRef lpBuffer As Byte) As Long 'Xuất của hàm CallBack SVTH : Lê Văn Đoan Trang 15 Chương II : Kỹ Thuật Nhúng GVHD: Ts.