Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
SƠ LƯỢC VỀ MAPLET TRONG MAPLE
1. Giới thiệu về Maplet
Maple tuy là một cơng cụ giải tốn rất tuyệt với nhưng những câu lệnh còn phức tạp và
rất khó nhớ. Để đơn giản cho những người khơng thường sử dụng, từ Maple 7 trở đi,
một gói lệnh (Package) cho phép người sử dụng ở trình độ cao có thể tạo những “cửa sổ
tính tốn” nhăm đơn giản hóa các câu lệnh thơng qua giao diện gồm các nút (button),
các hộp văn bản (textbox), các hộp kiểm tra (checkbook),…đó là Maplet.
Maplet có tầm ứng dụng rất rộng rãi. Các Maplet có thể cho chúng ta có thể lập trình
thành các form hay gọi là “máy tính” trong Maple, các giao diện này được người dùng
thiết kế tùy thuộc vào các yêu cầu khác nhau, các đối tượng trên Maplet được liên kết
với các gói lệnh hoặc các thủ tục(proc()) mình tự tạo trong Maple.
Tài liệu này được biên soạn một cách sơ lược về Maplet. Nếu bạn là một người thường
xuyên sử dụng hoặc muốn tìm hiểu sâu hơn về Maplet thì những câu lệnh sau sẽ giúp
bạn rất nhiều.
[>
[>
[>
[>
?Maplets,Index
?Maplets, Roadmap
?Maplets, Elements
?Maplets, Examples
Ngồi ra bạn đọc muốn tìm hiểu rõ hơn về mọi ứng dụng cũng nhưng tất cả các gói lệnh
trên Maple thì truy cập vào Website chính thức của phần mềm tốn học Maple:
/>
1.1 Ví dụ tạo ra các máy tính Maple
[> with( Maplets[Examples] );
[Alert , Confirm, GetColor , GetEquation, GetExpression,
GetFile, GetInput , Integration,KernelOpts, LinearAlgebra,
Message, Question, Selection, ShowTable, SignQuery]
[> Integration();
1.2 Tạo ra các giao diện đến các thủ tục và các gói lệnh trong Maplet
Một giao giao diện Maplet có thể dễ dàng thay đổi các giá trị tính tốn và các tùy chọn
trong các thủ tục và các gói lệnh của Maplet. Ví dụ một gói lệnh sẽ tạo ra danh sách các
thiết lập ban đầu mà người sủ dụng hoặc khi cần có thể thay đổi. Một giao diện Maplet
đến một gói lệnh có thể được tạo ra để giúp người sử dụng hiểu về câu lệnh đó. Ví dụ
sau sẽ cho người sử dụng học về cách tính định thức của một vector trong gói lệnh
LinearAlgebra() (Gói lệnh về đại số tuyến tính).
[>with(LinearAlgebra):
1
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
[>with(linalg):
[>A:=Matrix([[1,2], [4,1]])
[>det(A)
1.3
Ví dụ tạo ra các bảng tuy vấn
[>with(Maplets[Examples]):
[>Question("Is x positive?");
1.4
Ví dụ tạo ra các bảng thơng báo
[>with(Maplets[Examples]):
[>Message("You are correct!");
2. Gói lệnh trong Maplet
Gói lệnh trong Maplets bao gồm 3 gói lệnh con: Elements(các thành phần), Examples(các
ví dụ), Tools(các công cụ) và thủ tục Display để chạy các ứng dụng được viết.
Trong đó:
Elements: gồm các thành phần độc lập được sử dụng để tạo nên một Maplet như: Cửa
sổ, các nút lệnh, các hộp kiểm tra…Trong gói lệnh con Maplets[Example] có nhiều
thành phần khác nhau được sử dụng, mỗi thành phần có các mơ tả và tùy chọn khác
nhau.
Examples: Gồm các ví dụ chỉ cách sử dụng các Maplet, trong đó có nhiều ví dụ phức
tapj được liên kết đến các trang trợ hướng dẫn và các worksheet mô tả cách thành lập
các Maplet này.
Tools: Gồm các cộng cụ cho người sử dụng Maple thàh lập các Maplet.
3. Giới thiệu một số thành phần trong Maplet
3.1 Các thành phần trong cửa sổ chính
Tất cả các thành phần được giới thiệu ở đây chỉ nhằm giải thích ý nghĩa và nêu ý nghĩa về
cách dùng. Còn cú pháp sử dụng ta luân xem dễ dàng bằng lệnh ?<tên thành phần[> hoặc
bôi đen thành phần cần tìm kiếm và nhấn F2.
3.1.1 Button(nút
lệnh)
Các nút lệnh có thể xuất hiện nhiều lần trong một cửa sổ Maplet. Mỗi nút lệnh được liên
quan đến một hoạt động cụ thể khi được kích hoạt. Các trạng thái thể hiện của nút lệnh
được thay đổi trong các tùy chọn của câu lệnh khởi tạo nút lệnh. Ví dụ sau tạo ra hai nút
lệnh Ok, Cande trong một maplet bằng lệnh:
[>restart;
[>with(Maplets[Elements]):
[>maplet := Maplet(["Chon mot lenh",[Button("OK", Shutdown()),
[>Button("Cancel", Shutdown())]]):
[>Maplets[Display](maplet);
2
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
3.1.2 Checkbox
Là một điều khiển gồm nhiều ô lựa chọn. Giống như nút lệnh mỗi hộp kiểm tra liên quan
đến một hoạt động cụ thể, khi được kích hoạt người sử dụng phải đánh dấu chọn lựa một
hoặc nhiều danh sách chọn. Ví dụ:
[> with(Maplets[Elements]):
[> maplet := Maplet([[CheckBox['ChB1'](caption="red")],
[> [CheckBox['ChB2'](caption="white")],
[> [CheckBox['ChB3'](caption="blue")],
[> [Button("OK", Shutdown(['ChB1', 'ChB2', 'ChB3'])),
[> Button("Cancel", Shutdown())]]):
[> Maplets[Display](maplet):
3.1.3 ComboBox
Là một hộp cho phép người sử dụng chọn một thành phần từ một danh sách các thành
phần đã được cho trước. Đặc biệt, thủ tục này cho phép người sử dụng thêm vào một thành
phần khác bằng cách nhập từ bàn phím. Giá trị trả về của điều khiển này là một thành phần
được chọn. Ví dụ:
[> with(Maplets[Elements]):
[> maplet := Maplet([["Chon mon hoc ma ban thich: ",
[> ComboBox['CoB1']("Giai Tich", sort([
[> "Dai So","Giai Tich", "XSTK", "Hinh Hoc"], lexorder))],
[> [Button("OK", Shutdown(['CoB1'])), Button("Cancel",
Shutdown())]]):
[> Maplets[Display](maplet);
3.1.4 DropDownBox
Điều khiển này được hiển thị giống như ComboBox trừ việc người sử dụng phải chọn trong
các thành phần trong danh sách đã được định nghĩa sẳn mà khơng thể thêm thành phần
mới. Ví dụ:
[>
[>
[>
[>
[>
with(Maplets[Elements]):
maplet := Maplet([
["Ban sinh nhat thang: ",
DropDownBox['DDB1']("Thang 01",
sort(["Thang 01","Thang 02", "Thang 03", "Thang 04",
3
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
[> "Thang 05","Thang 06","Thang 07", "Thang 08",
[> "Thang 09", "Thang 10","Thang 11", "Thang 12"], lexorder))],
[> [Button("OK", Shutdown(['DDB1'])), Button("Cancel",
Shutdown())]]):
[> Maplets[Display](maplet);
3.1.5 Label
Là một điều khiển chứa văn bản hoặc hình ảnh. Điều khiển này thường dùng để đặt tên
định dạng cho một điều khiển khác, hoặc các dòng văn bản bất kì trong maplet. Văn bản
hiển thị trong Label khơng có độ sáng và khơng thẻ sao chép được. Ví dụ:
[>with(Maplets[Elements]):
[>maplet := Maplet([
[>[Label("Nhap ho va ten: ", 'font' = Font("courier", 14)),
[>TextField['IF1'](20)],
[>[Label("Vi du ", 'font' = Font("helvetica", 12)),
[>Label("Bin Laden", 'font' = Font("helvetica", italic, 12))],
[>[Button("OK", Shutdown(['IF1'])), Button("Cancel",
Shutdown())]]):
[>Maplets[Display](maplet);
3.1.6 ListBox
Giống như DropBox, điều khiển này cũng có một danh sách các thành phần được định sẳn
nhưng các danh sách này không nằm trong trạng thái có thanh xổ. Và trong điều khiển này
người sử dụng có thể chọn nhiều thành phần cùng một lúc bằng cách nhấn Shift trước khi
chọn. Giá trị trả về là một chuổi các thành phần được chọn được phận biệt bởi dấu phẩy. Ví
dụ:
[>with(Maplets[Elements]):
[>maplet := Maplet([
[>["Chon mot mau ban thich: ", ListBox['LB1'](sort([
[>"xanh", "do", "tim", "vang", "xam", "nau", "den",
[>"da cam", "hong"], lexorder))],
[>[Button("OK", Shutdown(['LB1'])), Button("Cancel",
Shutdown())]]):
[>result := Maplets[Display](maplet):
[>if type( result, ['string'] ) then
[>Maplets[Tools][ListBoxSplit](result[1]);
[>end if;
3.1.7 MathMLViewer
( Cửa sổ hiển thị các công thức toán)
Là một điều khiển cho phép hiển thị các cơng thức tốn chứa trong nó. Các biểu thức được
hiển thị dưới dạng cơng thức tốn học bình thường thay cho các cú pháp câu lệnh định
nghĩa. Chú ý các đối tượng trong điều khiển này không thể copy hoặc paste như trong môi
4
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
trường soạn thảo của maple. Ví dụ:
[>Maplets[Display]( Maplet([
[>Label("Nhap vao mot cong thuc toan:",
[>'font' = Font( 'family'=".VnTime", italic, 20 ) ),
[>TextField['TF1']('value' =
[>(x^3+sqrt(x^2+1))/ln(1/x)),
[>MathMLViewer['MMLV1']( ),
[>[Button("Hien thi", Evaluate( 'MMLV1' = 'MathML[Export](TF1)'
)),
[>Button("Bo qua", Shutdown())] ]));
3.1.8 MapMLEditor
Là một điều khiển cho người sử dụng có thể trực tiếp gõ và có thể thay đổi các cơng thức
tốn thay vì phải định nghĩa sẳn theo cú pháp. Để thực hiện được chức năng trên người sử
dụng click chuột phải vào môi trường soạn công thức và chọn các ký hiệu toán học tùy ý
trong danh sách. Ví dụ:
[> with(Maplets[Elements]);
[> maplet := Maplet([[BoxCell("Click chuot phai go cong thuc")],
[>[MathMLEditor('reference' = 'ME1')], [Button("Done",
[>Shutdown([ME1]))]]);
[> Maplets[Display](maplet);
3.1.9 Plotter
Điều khiển này dùng để hiển thị đồ thị 2 chiều, 3 chiều, vận động đồ thị: Ví dụ:
[>with(Maplets[Elements]);
[>Maplets[Display](Maplet([[Label("Ve do thi ham so", 'font' =
[>Font('family' = ".VnTime", italic, 20))],
[> [Label("F(x):", 'font' = Font('family' = ".VnTime", italic,
18)), [>TextField['TF1']("x^2")], [Label("X1:",
[>'font' = Font('family' = ".VnTime", italic, 18)),
TextField['x1']("-3")], [>[Label("X2:", 'font' = Font('family' =
".VnTime", italic, 18)), [>TextField['x2']("3")],
Plotter['PL1'](), [Button("Display", Evaluate('PL1' [>= 'plot(TF1,
x = x1 .. x2)')), Button("OK", [>Shutdown())]]));
3.1.10
RadioBox
Điều khiển này cho phép người sử dụng chọn các đối tượng giống như trong CheckBox
nhưng ở đây các nút chọn được hiển thị dưới dạng các nút trịn. Ví dụ:
[>with(Maplets[Elements]):
[>maplet := Maplet([
[>[RadioButton['RB1']("1", 'value'=true, 'group'='BG1'),
[>RadioButton['RB2']("2", 'value'=false, 'group'='BG1')],
[>[Button("OK", Shutdown(['RB1', 'RB2'])), Button("Cancel",
5
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
[>Shutdown())]
[>, ButtonGroup['BG1']()):
[>Maplets[Display](maplet);
3.1.11
Slider
Điều khiển này cho phép người sử dụng chọn giá trị từ thước các khoảng giá trị. Ví dụ:
[>with(Maplets[Elements]):
[>maplet := Maplet([
[>["Select a value: ", Slider['SL1'](0..100, 10, 'showticks',
[>'majorticks'=20, 'minorticks'=10, 'snapticks'=false)],
[>[Button("OK", Shutdown(['SL1'])), Button("Cancel", Shutdown())]
[>]):
Maplets[Display](maplet);
3.1.12
Table
Điều khiển này giống như các bảng thường dùng, cho phép người sử dụng điển các giá trị
sẳn vào các ơ của bảng. Ví dụ:
[>with(Maplets[Elements]):
[>maplet := Maplet([
[>BoxCell(Table([A, B], [[1, 2], [3, 4]]), 'as_needed'),
[>Button("OK", Shutdown()) ]):
[>Maplets[Display](maplet);
3.1.13
TextBox
Điều khiên này cho phép hiển thị hoặc cho người dùng nhập các dịng văn bản trên nhiều
dịng. Ví dụ:
[>with(Maplets[Elements]):
[>maplet := Maplet([
[>[Label("Nhap 1 dong van ban:",'font' = Font( 'family'=".VnTime",
[>italic, 14 ) ), BoxCell(TextBox['IB1'](3..30), 'as_needed')],
[>[Button("OK", Shutdown(['IB1'])), Button("Cancel", Shutdown())]
[>]):
[>Maplets[Display](maplet);
3.1.14
TextField
Giống như TextBox, điều khiển này cũng cho hiển thị văn bản nhưng chỉ có trên một dòng.
Việc xuất nhập văn bản phụ thuộc vào tùy chọn Editable mang giá trị True hay False. Ví
dụ:
[>with(Maplets[Elements]):
[>maplet := Maplet([
[>["Enter your name: ", TextField['IB1'](30)],
[>[Button("OK", Shutdown(['IB1'])), Button("Cancel", Shutdown())]
[>]):
6
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
[>Maplets[Display](maplet);
3.1.15
ToggleButton
Giống như CheckBox nhưng chỉ khác về cách hiển thị. Điều khiển này có thể chứa một
chuổi ký tự hoặc một một hình ảnh trên giao diện nút. Ví dụ:
[>with(Maplets[Elements]):
[>maplet := Maplet([
[>[ToggleButton['TB1']("Vi du mot Toggle Button", 'value'=true)],
[>[Button("OK", Shutdown(['TB1'])), Button("Cancel", Shutdown())]
[>]):
[>Maplets[Display](maplet);
3.2 Tạo Menu
Các thành phần trong một menu trong maplet bao gồm:
MenuBar (Thanh menu): Phải là thành phần trong một thành phần trong một của số
nào đấy của maplet.
MenuItem(Các menu thành phần): Là một thành phần trong một menubar hoặc một
menu chọn nhanh(PopupMenu ) nào đó.
MenuSeparator(Dấu phân cách các Menu thành phần): Là một thành phần trong một
menubar hoặc trong một menu chọn nhanh nào đó dùng đề phân cách các menuItem
Một thanh menu có thể chứa nhiều menu, mỗi menu có thể có nhiều menu thành phần, các
dấu phân cách dùng để nhóm các menu thành phần và cũng để phân cách với các menu
thành phần khác. Ví dụ:
[>with(Maplets[Elements]);
[>maplet := Maplet(Window(title = "Menubar", 'menubar' = 'MNB',
[["Menu-Bar"],
[>[Button("Exit", Shutdown())]]), MenuBar['MNB'](Menu("Menu0",
MenuItem("Quit",
[>Shutdown())), Menu("Menu1", Menu("Close", MenuItem("Close",
Shutdown())),
[>MenuItem("Quit", Shutdown())), Menu("Menu2", MenuItem("Quit",
Shutdown()))));
[> Maplets[Display](maplet)
3.3 Thanh công cụ (ToolBar)
Các khái niệm về thanh menu hay thanh công cụ rất quen thuộc với những người sử dụng
window. Trong maplet cũng vậy ta cũng có thể tạo ra các thanh cơng cụ để thực hiện các
cơng việc chính trong maplet của mình. Thành phần trong thanh cơng cụ gồm các nút
lệnh, các nút phân cách.Ví dụ:
7
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
[>with(Maplets[Elements]):
[>maplet := Maplet(
[>Window('title' = "Tinh nguyen ham theo bien x", 'toolbar' =
[>ToolBar(
[>ToolBarButton("Thoat", Shutdown()),
[>ToolBarSeparator(),
[>ToolBarButton("Thuc hien", 'onclick'=Evaluate('TF1' = 'int(TF1,
[>x)'))
[>),
[>[
[>TextField['TF1'](),
[>Button("OK", Shutdown("OK"))
[>])
[>):
[>Maplets[Display](maplet);
3.4 Một số lệnh thường dùng trên cửa sổ maplet
3.4.1
CloseWindow
Đóng một cửa sổ trong maplet
[>with(Maplets[Elements]):
[>maplet := Maplet('onstartup' = 'A1',
[>Window['W1']("1",
[>[Button("Mo mot cua so moi", RunWindow('W2')),
[>Button("Exit", Shutdown("1"))]
[>),
[>Window['W2']("2",
[>[Button("Dong cua so nay", CloseWindow('W2')),
[>Button("Exit", Shutdown("2"))]
[>),
[>Action['A1'](RunWindow('W1'))
[>):
[>Maplets[Display](maplet);
3.4.2 Evaluate
Đây là lệnh đặc biệt dùng để lấy giá trị trong một chu trình hay một thủ tục nào đó của
maple dưới dạng tham số lệnh. Ví dụ về lệnh này được trình bày trong các phần trước
3.4.3 Rundialog
8
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
Dùng để hiển thị một hộp thoại nào đó trong maplet nếu hộp thoại đã được hiển thị thì khi
chạy sẽ khơng có vấn đề gì xãy ra. Ví dụ:
[>with(Maplets[Elements]):
[>maplet := Maplet(
[>Window([
[>["Nhap bieu thuc:"],[TextField['TF1']()],
[>[
[>Button("Dao ham theo bien x", Evaluate('TF1' = 'diff(TF1,
[>x)')),
[>Button("Dialog", RunDialog('MD1')),
[>Button("Exit", Shutdown(['TF1']))
[>]
[>]),
[>MessageDialog['MD1']("Vi du ve hien thi Dialog")
[>):
[>Maplets[Display](maplet);
3.4.4 Runwindow
Hiển thị một cửa sổ thành phần trong ứng dụng của maplet. Ví dụ được trình bày trên
phần Closewindow.
3.4.5
SetOption
Lệnh này cho phép giá trị của một số tùy chọn có thể thay đổi trong khi ứng dụng đang
chạy. Ví dụ, Nếu người sử dụng kích vào một nút, tùy chọn “ochange” của nút có thể sử
dụng thuộc tính SetOption để bắt đầu thay đổi như xóa text đã xuất hiện. Ví dụ:
[>with(Maplets[Elements]):
[>maplet1 := Maplet([
[>[Label('caption'="Nhap vao 1 bieu thuc")],
[>["Input:", TextField['B1'](20)],
[>["Output:", TextField['B2'](20, 'editable' = 'false')],
[>[
[>Button("Xoa Input", SetOption('target' = 'B1', 'value' = "")),
[>Button("Copy to Output", SetOption('target' = 'B2',
[>Argument('B1'))),
[>Button("Thoat", Shutdown(['B2']))
[>]
[>]):
[>Maplets[Display](maplet1);
3.4.6 Shutdown
Lệnh này dùng để đóng một maplet đang chạy. Đặc biệt trong lệnh này có thể gán giá trị
trả về. Ví dụ về lệnh này đã được trình bày ở phần trên.
9
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
3.5 Giới thiệu một sô hộp thoại thường dùng
Các cửa sổ (Dialogs) là các cửa sổ nhỏ trong ứng dụng Maplet nhằm cung cấp thông tin,
đưa ra các cảnh báo hoặc nhận thơng tin…Ngồi một số ký hiệu mặc định trong hộp thoại,
người lập trình maplet có thể định dạng lại một số thuộc tính như: Ký tự xuất hiện trên
thanh tiêu đề hay trên nút lệnh, hay trên các thơng báo. Chú ý Dialog khơng có giá trị trả
về.
3.5.1 AlertDialog (Hộp thoại cảnh báo)
Dùng hộp thoại này khi muốn cảnh báo một điều gì cho người dùng maplet. Ví dụ:
> Maplets[Display]( Maplet( AlertDialog(
> "Canh bao, sap mat dien",
> 'onapprove' = Shutdown('true'),
> 'oncancel' = Shutdown("FAIL")
> ) ) );
3.5.2 ColorDialog (Hộp thoại màu)
Dùng hộp thoại này người dùng có thể chọn một màu trong các màu chuẩn để hiển thị trên
một đối tượng nào trên maplet. Ví dụ:
>restart;with(Maplets[Elements]):
>Maplets[Display]( Maplet( ColorDialog['CD1'](
> 'onapprove' = Shutdown(['CD1']),
> 'oncancel' = Shutdown()
> ) ) );
3.5.3 ConfirmDialog
Dùng hộp thoại này để thông báo cho người sử dụng xác nhận một thông tin hay hoạt
động đang được tiến hành. Ví dụ:
>
>
>
>
>
>
>
with(Maplets[Elements]):
maplet := Maplet(ConfirmDialog('question', "Co phai x>0?",
'onapprove' = Shutdown("true"),
'ondecline' = Shutdown("false"),
'oncancel' = Shutdown("FAIL")
)):
Maplets[Display](maplet);
3.5.4 FileDialog (Hộp thoại chọn file)
Dùng hộp thoại này khi muốn chọn một file nào trong máy tính. Ví dụ:
> with(Maplets[Elements]):
> maplet := Maplet(FileDialog['FD1'](
10
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
>
>
>
>
>
>
'filefilter' = "*.*",
'filterdescription' = "Tat ca cac file (*.*)",
'onapprove' = Shutdown(['FD1']),
'oncancel' = Shutdown()
)):
Maplets[Display](maplet);
3.5.5 InputDialog (hộp thoại nhập)
Hộp thoại này giống như hộp thoại AlertDialog nhưng có thêm một hộp văn bản mình có
thể nhập vào các giá trị. Ví dụ:
>
>
>
>
>
>
>
with(Maplets[Elements]):
maplet := Maplet(
InputDialog['ID1']("Nhap vao mot so nguyen",
'onapprove'=Shutdown(['ID1']),
'oncancel'=Shutdown()
)):
Maplets[Display](maplet);
3.5.6 Massage (hộp thoại thông báo)
Dùng hộp thoại này để thông báo cho người dùng một thơng tin gì đấy. Hộp thoại này chỉ
có 2 phần: Phần thơng báo cần hiển thị và nút tắt hộp thoại. Ví dụ:
>
>
>
>
>
with(Maplets[Elements]):
maplet := Maplet(MessageDialog("Chao mung ban den voi Maplet",
'onapprove'=Shutdown()
)):
Maplets[Display](maplet);
3.5.7 QuestionDialog (hộp thoại truy vấn)
Hộp thoại này dùng cho người sử dụng có thể xác nhận một vấn đề gì đó với hai trạng thái
Yes, No. Ví dụ:
>with(Maplets[Elements]):
> maplet := Maplet(QuestionDialog(question,"Ban la nam?",
> 'onapprove'=Shutdown("true"),
> 'ondecline'=Shutdown("false")
> )):
> Maplets[Display](maplet);
3.6 Tạo bảng trong maplet
Trong cửa sổ maplet có thể tạo ra các bảng(table) . mỗi bảng gồm có các tiêu đề, các ô.
Nếu khai báo một bảng mà không có thanh tiêu đề thì thanh tiêu đề mặc định là A…Z ,
AA…ZZ. Ví dụ:
> IL := [1,x,exp(x),a^x, sin(x), cos(x), tan(x), cot(x)]:
> Maplets[Display]( Maplet( [
11
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
> BoxCell(Table( ["Ham so co ban", "Nguyen ham"], [seq( [i, int(
i,
> x )], i = IL )], 'width'=200 ), 'as_needed'),
> Button("OK", Shutdown())] ) );
MỘT SỐ MAPLET ĐIỂN HÌNH TRONG CHƯƠNG TRÌNH
TỐN CAO CẤP
1. Giới thiệu
Như chúng ta đã biết maple là một phần mềm tốn học có tầm ảnh hưởng rất mạnh mẽ đến
các ngành khoa học tự nhiên, đặc biệt là đối với ngành toán học Thế giới. Mặc dù vậy,
những câu lệnh của maple thường nhọc nhằn khó nhớ. Để đáp ứng yêu cầu cho nhiều người
có thể dêt dàng khai thác đươc tiềm năng của phần mền này. Trong maple có một phần nhỏ
là maplet, maplet là một mảng giúp cho những người dùng maple tự tạo nên các giao diện
tính tốn tùy theo yêu cầu của người sử dụng. Mọi thao tác trên maplet giống như chúng ta
đang làm việc với môi trường Window của máy tính vậy. Trong phần này chúng tơi sẽ
trình bày một số maplet về các vấn đề trong tốn cao cấp của chương trình Đại học, bao
gồm:
Maplet ứng dụng trên Đại số tuyến tính
Maplet ứng dụng trên phép tính vi tích phân hàm một biến
Maplet ứng dụng trên phương trình vi phân Tốn Lý
2. Giới thiệu tổng quan về một số maplet ứng dụng
2.1 Maplet ứng dụng trên Đại số tuyến tính
2.1.1 Maplet tính tốn trên ma trận vng
Maplet này cho phép người sử dụng tính tốn trên ma trận vuông, bằng việc nhập vào một
ma trận sau đó thực hiện các phép tốn điển hình như: Tính định thức ma trận, Hạng ma
trận, Giá trị riêng, Vector riêng, Đa thức đặc trưng, Tính lũy thừa, Tìm ma trận
nghịchđảo, Đa thức tối tiểu và Chéo hóa ma trận.
Hình ảnh minh họa:
12
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
Giao diện nhập ma trận.
13
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
Giao diện tính tốn ma trận.
Thân chương trình:
restar;
with(Maplets[Elements]);
with(LinearAlgebra);
with(linalg);
Thongbao:=proc()
Capnhat := proc ()
global t;
Thongbao:=proc()
Maplets[Display]( Maplet( AlertDialog(title="Maplet-Tính tốn trên ma trận vng thơng
báo:", "Bạn vui lịng nhập vào ma trận trước khi thực hiện thao tác này !",
'onapprove' = Shutdown(),
'oncancel' = Shutdown() ) ) );
end: Nhap := proc ()
global A, t;
14
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
t := 1;
A := Matrix([[1, 2], [4, 1]]);
A := Student[LinearAlgebra][MatrixBuilder](A, 2, 5, square = true, sqrstatic = true, augstatic
= true);
Maplets[Tools][Set](('nhap')(value) = A) end proc
LuyThua := proc ()
local n;
if t = 0 then
Thongbao()
else
n := Maplets[Examples][GetExpression](caption = "Nhap bac luy thua ");
Maplets[Tools][Set](('ketqua')(value) = A^n)
fi:
end:
NghichDao := proc ()
global B;
if t = 0 then Thongbao()
else
if det(A) = 0
then Maplets[Examples][Message]("
Ma trận suy biến, bạn vui lòng quay lại!") else
B := MatrixInverse(A);
Maplets[Tools][Set](('ketqua')(value) = B)
fi:
fi:
end :
Hang := proc ()
if t = 0 then
Thongbao()
else Maplets[Tools][Set](('ketqua')(value) = Rank(A))
fi: end :
Dinhthuc := proc ()
if t = 0 then
Thongbao()
else Maplets[Tools][Set](('ketqua')(value) = Determinant(A))
fi: end: DTDT := proc () if t = 0 then Thongbao() else Maplets[Tools][Set](('ketqua')(value)
= CharacteristicPolynomial(A, lambda))
fi:
end:
GTRieng := proc ()
if t = 0 then
Thongbao() ;
15
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
else
Maplets[Tools][Set](('ketqua')(value) = convert(Eigenvalues(A), list))
fi:
end:
VTRieng := proc ()
if t = 0 then Thongbao() ;
Else
Maplets[Tools][Set](('ketqua')(value) = Eigenvectors(A, output = list))
fi:
end:
DTTT := proc ()
if t = 0 then Thongbao()
else Maplets[Tools][Set](('ketqua')(value) = MinimalPolynomial(A, lambda))
fi: end :
CheoHoa := proc ()
global gt, P, ok1, ok2, ok;
if t = 0 then
Thongbao()
else
gt := select(t-> type(t[1], realcons), LinearAlgebra[Eigenvectors](A, output = list))):
ok1 := is(sum(gt[k][2], k = 1 .. nops(gt)) = RowDimension(A)):
ok2 := andmap(t->is(t[2]=nop(t[3],gt)):
ok := ok1 and ok2:
if ok then
P := Matrix([seq(op(gt[k][3]), k = 1 .. nops(gt))]);
Maplets[Tools][Set](('ketqua')(value) = P)
else
Maplets[Examples][Message]("
Ma tran vua nhap khong cheo hoa duoc!")
fi:
fi:
end:
maplet := Maplet('onstartup' = 'A1', Window['W1']"Maplet-Tính tốn trên ma trận
vng",'menubar'='MNB',
[ [Label(" MAPLET TÍNH TỐN VỚI MA TRẬN
VNG",'font'=Font(20),'foreground'="#1E05E9")],
[BoxRow(border=true,background="#579A8C",
[Label(" Ma trận đầu vào
",'font'=Font(15),'foreground'="#FF3399"),
BoxCell(MathMLViewer['nhap'](height=200,background="#E8EEEE",foreground="#253B
A3"),hscroll=always,vscroll=always)],
[Label("Hiển thị kết quả tính
tốn",'font'=Font(15),'foreground'="#FF3399"),
BoxCell(MathMLViewer['ketqua'](height=200
16
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
,background="#E8EEEE",foreground="#253BA3"),hscroll=always,vscroll=always)] )],
[BoxRow(border=true,background="#998B52",
Button("Nhập ma trận",foreground = red,background = green,Evaluate('function'='Nhap()')),
Button("Hạng ma trận",foreground = red,background = green,Evaluate('function'='Hang()')),
Button("Định thức", foreground = red,background = green,Evaluate('function'='Dinhthuc()')),
Button("Đa thức đặc trưng ",foreground
=red,background=green,Evaluate('function'='DTDT()')),
Button("Gia Trị Riêng",foreground = red,background =
green,Evaluate('function'='GTRieng()')),
Button("Vector Riêng",foreground = red,background =
green,Evaluate('function'='VTRieng()')) )],
[BoxRow(border = true, background = "#998B52",
Button("Luy Thừa",foreground = "#6632A7",background = "#0A9EB0",Evaluate('function'
= 'LuyThua()')),
Button("Ma Trận Nghịch Đảo",foreground = "#6632A7",background =
"#0A9EB0",Evaluate('function' = 'NghichDao()')),
Button("Đa Thức Tối Tiểu",foreground = "#6632A7",background =
"#0A9EB0",Evaluate('function' = 'DTTT()')),
Button("Chéo Hóa Ma Trận",foreground = "#6632A7",background =
"#0A9EB0",Evaluate('function' = 'CheoHoa()')),
Button("Xóa Dữ Liệu",foreground = "#6632A7",background = "#0A9EB0",
Action(SetOption(target = 'nhap', value = ""),SetOption(target = 'ketqua', value =
""),Evaluate('function' = 'Capnhat()')),
Button("Thoát",foreground = "#6632A7",background =
"#0A9EB0",Action(RunWindow('W2')))
)]]), MenuBar['MNB'](Menu("File", MenuItem("Exit
Alt+F4",
Shutdown())),Menu("Help", MenuItem("Quick Help ", RunWindow('W3'))),
Window['W2']("Maplet-Tính tốn trên Ma trận vng thơng báo:",[["Bạn thực sự muốn thốt
khỏi hệ thống?"],[Button("Ok", Action(Evaluate('function' = 'Capnhat()'),
Shutdown())),Button("Cancel", CloseWindow('W2'))]]),
Window['W3']("Giới thiệu, trợ giúp",[["GIỚI THIỆU-TRỢ
GIÚP"],[TextBox['IB1'](background = "#BFE9E6",foreground = "#1015E9",10..40,editable
= false,
"Giới thiệu…."
,[Button("Thốt", CloseWindow('W3'))])]]),
Action['A1'](RunWindow('W1'))
):
Maplets[Display](maplet)
2.1.2
Maplet giải hệ phương trình tuyến tính.
Maplet này được sử dụng giải hệ phương trình tuyến tính theo phép khử Gauss. Việc nhập ma
17
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
trận vào tương tự như phần trên. Ngồi nút nhập vào ma trận thì maplet cho ta hai thơng tin
khác đó là cho phép người dùng thấy được ma trận sau khi biến đổi theo phương pháp khử
Gauss. Ngoài ra nút nghiệm cho phép ta thấy được các ngiệm của hệ.
Hình ảnh minh họa:
Giao diện về ma trận sau khi biến đổi Gauss
18
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
Giao diện cho thấy ngiệm của hệ phương trình
Giao diện trợ giúp
19
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
Thân chương trình:
restar; with(LinearAlgebra); with(Student[LinearAlgebra]): with(linalg): Thongbao:=proc()
Maplets[Display]( Maplet( AlertDialog(title="Maplet-Giải hệ phương trình tuyến tính thơng báo!", "
Bạn vui lòng nhập vào ma trận!
",
'onapprove' = Shutdown(),
'oncancel' = Shutdown() ) ) );
end:
Capnhat:=proc()
global t;
t:=0;
end:
NhapMT:=proc()
global A,t;
local C;
t:=1;
C:=Matrix([[6,2,-1,1],[1,6,-8,4],[1,3,-9,-5]]);
while true do A:=MatrixBuilder(C,2,5,square=false,sqrstatic=true,augmented=true,augstatic=true);
if RowDimension(A) # ColumnDimension(A)-1 then
Maplets[Examples][Message]("Chu y ma
tran suy rong <A|b>, A la ma tran vuong.");
else
break;
fi:
od:
Maplets[Tools][Set]('nhap'(value)=A);
end:
PPGausse:=proc()
global B,t;
if t=0 then
Thongbao();
else
B:=DeleteColumn(A,ColumnDimension(A));
if det(B)=0 then
Maplets[Examples][Message]("He phuong trinh vo nghiem, Det(A)=0 !");
else
Maplets[Tools][Set]('kq'(value)=GaussianElimination(A));
fi:
fi:
end:
NghiemGauss := proc ()
global B, t;
if t = 0 then Thongbao()
else
B := DeleteColumn(A, ColumnDimension(A));
if det(B) = 0 then
20
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
Maplets[Examples][Message]("He phuong trinh vo nghiem, Det(A)=0 !")
else
Maplets[Tools][Set](('kq')(value) = LinearSolve(A)) ;
fi:
fi:
end:
with(Maplets[Elements]);
maplet:=Maplet('onstartup' = 'A1', Window['W1']("Maplet giai he - PP khu Gauss
",'menubar'='MNB' ,[Label("\\nGIẢI PHƯƠNG TRÌNH A.x=b BẰNG PHƯƠNG PHÁP KHỬ
GAUSS\\n",'font'=Font(16),'foreground'="#1E05E9", ), [BoxColumn(border=true, background
="#57E9CD", Label("Ma trân suy rộng",'foreground'=blue, 'font' = Font( bold, 12)),
MathMLViewer['nhap'](height=200, background="#E8EEEE",foreground="#253BA3") ),
BoxColumn(border=true,background ="#57E9CD", Label("K?t qu? tính tốn",'foreground'=blue,
'font' = Font( bold, 12)),
MathMLViewer['kq'](height=200, background="#E8EEEE",foreground="#253BA3") )],
BoxRow(border=true, background ="#9EBA66",Button("Nhập Ma Trận",
Evaluate('function'='NhapMT()')), Button("Ma Trận Khử Gauss",Evaluate('function'='PPGausse()')),
Button("Nghiệm", Evaluate('function'='NghiemGauss()')),ưButton("Xoa Du Lieu",Action(
SetOption(target='nhap',value=""),
Evaluate('function'='Capnhat()'),
SetOption(target='kq',value=""))), Button("Thoát", Action(RunWindow('W2'))) ) ]),
MenuBar['MNB'](Menu("File", MenuItem("Exit
Alt+F4",Shutdown())),
Menu("Help", MenuItem("Quick Help ",RunWindow('W3')),
Window['W2']("Maplet-Ma tran vuong thong bao:", [["Ban thuc su muon thoat khoi he thong?
"],[Button("Ok", Action(Evaluate('function'='Capnhat()'),Shutdown())),
Button("Cancel", CloseWindow('W2'))]] ),
Window['W3']"Giới thiệu-Trợ giúp",[["GIỚI THIỆU-TRỢ GIÚP”]
[TextBox['IB1'](background = "#BFE9E6" ,foreground = "#1015E9" ,10..40,editable = false,
“
+Giới thiệu.
Họ và tên: Phan Văn Cương
Trường: Đại học Khoa Học Huế
Ngành: Toán tin Ứng Dụng
Lớp: Toán Tin K32
+Hướng dẫn sử dụng.
Bạn nhấn vào Nhập Ma Trận, bạn sẽ thấy một giao diện chuên nhập ma trận hiện ra. Trên đó bạn có
thể điều chỉnh các thơng số theo ý ma trận mà bạn muốn nhập. Thực hiện xong việc nhập bạn có thể
nhấn vào Ma Trận Khử Gauss để thấy được ma trận sau khi biến đổi đưa về dạng tam giác hoặc chọn
vào nút Nghiệm để biết được nghiệm của hệ.
\n”)],
[Button("Thoát", Shutdown())]]),
Action['A1'](RunWindow('W1')):
Maplets[Display](maplet);
21
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
2.2 Maplet ứng dụng trên phép tính vi tích phân.
2.2.1 Maplet ứng dụng xấp xĩ hàm số bằng khai triển Taylor.
Trong giải tích có rất nhiều hàm số rất trừu tượng việc khảo sát các tính chất của nó cũng như
việc tính các giá trị bất kỳ của hàm số đó thật là khó khăn. Vì vậy maplet này được tạo ra để
cho người sử dụng có thể khai triển xấp xĩ một hàm số bằng đa thức, ngồi ra chúng ta có thể
thấy được sự xấp xĩ của hai hàm số đó bằng đị thị một cách trực quan.
Hính ảnh minh họa:
22
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
Giao diện Maplet tính xấp xĩ
Giao diên tính tốn bằng MenuBar
23
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
Giao diện tính tốn bằng PopMenu
Thân chương trình:
24
Nhóm niên luận Tốn Tin K32 _ Thiết kế giao diện Maplet trong Maple
with(Maplets[Elements]):with(plots):with(Maplets[Tools]): with(Maplets[Elements]):
SetPL:=proc(SL)
local p;
p:=plot(0, x=-0 ..0,axes=none,thickness=0 );
Set('PL1'=p);
end:
Thongbao:=proc()
Maplets[Display]( Maplet( AlertDialog(title="Maplet-Xấp xĩ hàm số bằng đa thức thông báo:", "Bạn
vui lòng nhập vào đa thức khai triển trước khi thực hiện thao tác này !",
'onapprove' = Shutdown(),
'oncancel' = Shutdown() ) ) );
end:
DT := proc (F, SL)
if kt = 1 then
G := convert(series(F, x = l, k), polynom);
p1 := plot([F, G], x = -SL+l .. SL+l, thickness = [3, 3], color = [red, green], title = "Xấp xĩ hàm bằng đa
thức”, legend =["Hàm số đã cho”,”Hàm số bằng đa thức xấp xĩ”] );
Set('PL1'=p1)
else
Thongbao();
fi:
end:
CapNhat:=proc()
global kt;kt:=0;
end:
KTTL:=proc() global l,k,kt;
l := Maplets[Examples][GetExpression](caption = "Khai triển tại lân cận điểm")
l := Maplets[Examples][GetExpression](caption = "Khai triển đến bậc") kt:=1;
end:
Help := proc ()
Maplets[Examples][Message]("Ban co the Click chuot phai vao ham so hoac vao menu Run de chon
cac thao tac.")
end:
hienthi := proc ()
global t;
t := true
end:
MyMaplet:= Maplet('onstartup' = 'A1',Window['W1']("Maplet-Xấp xĩ hàm số bằng đa thức
",'menubar'='MNB',
[
[BoxColumn(border=true, background ="#57E9CD", Label("Nhập hàm F(x)",'foreground'=blue,
'font' = Font( bold, 12)),
TextField['F'](width=10,visible =true,background="#E8EEEE",foreground="#253BA3" ,'popupmenu'
= 'PM', "sin(x)") , Label("Khai Triển Taylor",'foreground'=blue, 'font' = Font( bold, 12)),
25