Download as pdf or txt
Download as pdf or txt
You are on page 1of 42

Nhóm niên luận Toá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 toá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 toá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
Ngoà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 toán học Maple:
http://maplesoft.com/

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 toá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 Toá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 Toá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 Toá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 toán chứa trong nó. Các biểu thức được
hiển thị dưới dạng công thức toá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 Toá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
toá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 Toá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 Toá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 Toá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 Toá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 Toá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…Ngoà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 Toá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 Toá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


TOÁN CAO CẤP
1. Giới thiệu
Như chúng ta đã biết maple là một phần mềm toá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 toá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 toá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 Toá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 toán trên ma trận vuông
Maplet này cho phép người sử dụng tính toá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 toá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 Toá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 Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Giao diện tính toá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 toán trên ma trận vuông 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 Toá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 Toá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 toán trên ma trận
vuông",'menubar'='MNB',
[ [Label(" MAPLET TÍNH TOÁN VỚI MA TRẬN
VUÔNG",'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
toán",'font'=Font(15),'foreground'="#FF3399"),
BoxCell(MathMLViewer['ketqua'](height=200

16
Nhóm niên luận Toá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 toán trên Ma trận vuông thông báo:",[["Bạn thực sự muốn thoá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("Thoá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 Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

trận vào tương tự như phần trên. Ngoà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 Toá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 Toá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 Toá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 toá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 Toá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, ngoà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 Toá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 toán bằng MenuBar

23
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Giao diện tính toán bằng PopMenu


Thân chương trình:

24
Nhóm niên luận Toá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
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

MathMLViewer['ML'](height=65,background="#E8EEEE",foreground="#253BA3") )],
[BoxColumn(border=true, background ="#57E9CD", Label("Đồ thị hàm xấp xĩ;",'foreground'=blue,
'font' = Font( bold, 12)),Plotter['PL1'](height=300 ) )],
[ Slider['SL'](2..20, 5, 'showticks', 'majorticks'=1, 'minorticks'=1,'onchange'='Action1',
'snapticks'=false,'background'="#908E1F")],
Button("Khai Tri?n Taylor",foreground = "#294509",background = "#0A9EB0",Action(
SetOption(target='ML',value=""),
Evaluate('function'='SetPL(SL)'),
Evaluate('function'='KTTL()'),
Evaluate('ML' = 'series(F,x=l,k)'))),
Button("Đồ thị hàm xấp xĩ;",foreground = "#294509",background = "#0A9EB0",
Action('reference'='Action1', Evaluate('function'='DT(F,SL)'))),
Button("Xóa Dử Liệu",foreground = "#294509",background = "#0A9EB0",Action(
Evaluate('function'='CapNhat()'),
SetOption(target='ML',value=""),
Evaluate('function'='SetPL(SL)'))),
Button("Thoát", foreground = "#294509", background = "#0A9EB0", Action(Evaluate('function' =
'CapNhat()'), Action(RunWindow('W2'))))]]),
Window['W2'](" Maplet-Xấp xĩ hàm số bằng đa thức thông báo:", [["Bạn thực sự muốn thoát khỏi hệ
thống? "],[Button("Ok", Action(Evaluate('function'='Capnhat()'),Shutdown())),
Button("Cancel", CloseWindow('W2'))]] ),
MenuBar['MNB']( Menu("File", MenuItem("Close",Shutdown())), Menu("Run", Menu("Xấp xĩ
hám số?",MenuItem("Khai Triển Taylor", Action(
SetOption(target='ML',value=""),
Evaluate('function'='SetPL(SL)'),
Evaluate('function'='KTTL()'),
Evaluate('ML' = 'series(F,x=l,k)'))),
MenuSeparator(),MenuItem("Đồ thị hàm xấp xĩ ", Action('reference'='Action1',
Evaluate('function'='DT(F,SL)'))), MenuSeparator()),MenuSeparator(),MenuItem("Quit",Shutdown())),
Menu("Help", MenuItem("quick Help ",Action(RunWindow('W3')))), PopupMenu['PM']( Menu("Xấp
xĩ hàm số", MenuItem("Khai Triển Taylor",
Action(SetOption(target='ML',value=""),
Evaluate('function'='SetPL(SL)'),
Evaluate('function'='KTTL()'),
Evaluate('ML' = 'series(F,x=l,k)'))),
MenuItem(“ Đồ thị hàm xấp xĩ;", Action('reference'='Action1', Evaluate('function'='DT(F,SL)')) ) ),
MenuSeparator(), MenuItem("Thoát", Shutdown())) ,
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

26
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

*Trợ giúp.
Việc khảo sát trên một số hàm số rất khó khăn đối với những hàm số mà ta không có nhiều thông tin về
nó. Khai triển Taylor của hàm số thành đa thức là một công cụ có rất nhiều ứng dụng trong toán học
giải tích.
Ứng dụng này sử dụng dùng để khai triển một hàm số thành đa thức bằng khai triển Taylor. Ngoài ra
với công cụ đồ thị thì chúng ta có thể dể dàng nhận thấy sự xấp xĩ của hàm số ban đầu và hàm số sau
khi xấp xĩ.)],
[Button("Thoát", Shutdown(W3))]]),
Action['A1'](RunWindow('W1')):
Maplets[Display](maplet);

2.2.2 Maplet về biểu diễn đồ thị trên không gian hai, ba chiều

Vẽ đồ thị của một hàm số là phần không thể thiếu trong toán học,tuy nhiên việc vẽ đồ thị
của một hàm số phức tạp là rất khó khăn,đặc biệt là đồ thị trong không gian,do đó maplet
vẽ đồ thị này sẻ giúp chúng ta giải quyết những khó khăn đó.Maplet này được chia làm 2
phần:
Phần 1:Là maplet vẽ đồ thị trong mặt phẳng, trong maplet này,ngoài việc xem đồ thị của một
hàm số, chúng ta có thể xem đồ thị hai hàm số được vẽ trên cùng một hệ trục, quan sát sự vận
động của đồ thị .
Phần 2:Là maplet vẽ đồ thị trong không gian,cũng giống như maplet vẽ đồ thị trong mặt
phẳng, maplet này giúp chúng ta có cái nhìn trực quan về một đồ thị trong không gian, hay sự
vận động của đồ thị trong không gian.
Hình ảnh minh họa:

Giao diện chọn không gian vẽ đồ thị

27
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Giao diện vẽ đồ thị trong mặt phẳng

28
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Giao diện vẽ đồ thị trong không gian 3 chiều

29
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Giao diện chọn màu vẽ đồ thị

Thân chương trình:


>restart; with(plots): with(Maplets[Tools]): with(Maplets[Elements]): with(StringTools):
SetPL := proc ()
local p;
p := plot(0, x = 0 .. 0, axes = none, thickness = 0);

30
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Set('P' = p)
end proc;
SetPL3 := proc ()
local p;
p := plot(0, x = 0 .. 0, axes = none, thickness = 0);
Set('P2' = p) end proc
capnhat := proc ()
global Cn;
Cn := 0
end proc;
chonmau := proc ()
global m1, Cn;
Cn := 1;
m1 := Maplets[Display](Maplet(ColorDialog['CL1']('onapprove' = Shutdown(['CL1']), 'oncancel' =
Action(Evaluate('function' = 'capnhat()'), Shutdown())))):
end proc:
chonmau2 := proc ()
global m2, Cn;
Cn := 1;
m2 := Maplets[Display](Maplet(ColorDialog['CL2']('onapprove' = Shutdown(['CL2']), 'oncancel' =
Action(Evaluate('function' = 'capnhat()'), Shutdown())))) :
end proc:
DT := proc (f, g, SL1, d)
global p1, p2, p3;
if Cn = 1 then if d = F(x) then
p1 := plot(f, x = -SL1 .. SL1, thickness = 3, color = m1[1]);
Set('P' = p1)
elif d = G(x) then
p2 := plot(g, x = -SL1 .. SL1, thickness = 3, color = m2[1]);
Set('P' = p2)
else
p3 := plot([f, g], x = -SL1 .. SL1, thickness = [3, 3], color = [m1[1], m2[1]],
legend = ["Ham F(x)", "Ham G(x)"]);
Set('P' = p3) ;

31
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

fi:
else
if d = F(x) then
p1 := plot(f, x = -SL1 .. SL1, thickness = 3, color = red);
Set('P' = p1)
elif d = G(x) then
p2 := plot(g, x = -SL1 .. SL1, thickness = 3, color = blue);
Set('P' = p2)
Else
p3 := plot([f, g], x = -SL1 .. SL1, thickness = [3, 3], color = [red, blue], linestyle = [1, 10], legend =
["Ham F(x)", "Ham G(x)"]);
Set('P' = p3)
fi:
fi:
end proc:
VanDong := proc (f, g, SL1, d)
if Cn = 1 then if d = F(x) then
Set('P' = plots[animatecurve](f, x = -SL1 .. SL1, thickness = 3, color = m1[1]))
elif d = G(x) then
Set('P' = plots[animatecurve](g, x = -SL1 .. SL1, thickness = 3, color = m2[1]))
else Set('P' = plots[animatecurve]({f, g}, x = -SL1 .. SL1, thickness = 3, color = m1[1])) fi:
else
if d = F(x) then Set('P' = plots[animatecurve](f, x = -SL1 .. SL1, thickness = 3, color = red))
elif d = G(x) then Set('P' = plots[animatecurve](g, x = -SL1 .. SL1, thickness = 3, color = blue))
else Set('P' = plots[animatecurve]({f, g}, x = -SL1 .. SL1, thickness = 3, color = red)) end fi:
fi:
end proc:
DT2 := proc (f, g, x1, x2, y1, y2, d, m3, m4)
global p1, p2, p3;
if d = F(x) then
p1 := plot3d(f, x = x1 .. x2, y = y1 .. y2, grid = [50, 50], axes = boxed, color = m3); Set('P2' = p1)
elif d = G(x) then
p2 := plot3d(g, x = x1 .. x2, y = y1 .. y2, grid = [50, 50], axes = boxed, color = m4); Set('P2' = p2)
else

32
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

p3 := plot3d([f, g], x = x1 .. x2, y = y1 .. y2, grid = [50, 50], axes = boxed, color = [m3, m4]);
Set('P2' = p3)
fi:
end proc:
VanDong2 := proc (f1, g1, x1, x2, y1, y2, k1, k2, d, m3, m4)
if d = F(x) then
Set('P2' = plots[animate3d](f1, x = x1 .. x2, y = y1 .. y2, t = k1 .. k2, axes = boxed))
elif d = G(x) then
Set('P2' = plots[animate3d](g1, x = x1 .. x2, y = y1 .. y2, t = k1 .. k2, axes = boxed))
else
Set('P2' = plots[animate3d]({f1, g1}, x = x1 .. x2, y = y1 .. y2, t = k1 .. k2, axes = boxed)) fi:
end proc:
Help1:=proc()
Maplets[Examples][Message]( “Bạn hãy nhập vào hàm số cần vẽ dạng y = f(x) và sử dụng những chức
năng của maplet vẽ đồ thị,hãy sử dụng thước vẽ để quan sát đồ thị ở những giá trị khác nhau.
Chúc bạn thành công!”);
end:
Help2:=proc()
Maplets[Examples][Message](“ Bạn hãy nhập vào hàm số cần vẽ dạng y = f(x) và sử dụng những chức
năng của maplet vẽ đồ thị.
Luy ý:Nếu bạn muốn quan sát sự vận động của đồ thị trong không gian ,bạn phải nhập vào hàm số dang
z = f(x,y,t), trong đó t là tham số vận động.
Chúc bạn thành công!”);
end:
dothi:=Maplet(onstartup=RunWindow(MAIN),Window[MAIN]"Do thi",([ ["Chào mung các ban den
voi chuong trinh ve do thi bang Maplet!"],["Hãy chon không gian ban muon ve do thi!"],
[Button("Mat phang",onclick=A1),Button(" Khong gian",onclick=A2),Button("Exit",onclick=A3)]]),
Window[Plot]("Do thi trong mat phang",'menubar'='MNB', [[
BoxColumn(border=true,background="#74CFA6", ["hay chon do thi ban muon
ve:",DropDownBox['d']("F(x)", sort(["F(x)","G(x)","F(x)&G(x)"], lexorder))],
["F(x)",TextField['f'](
"x^3*sin(x)"),Button("Color",Evaluate('function'='chonmau()'))],["G(x)",TextField['g'](
"x^3+3*x^2"),Button("Color",Evaluate('function'='chonmau2()'))],
["VUNG HIEN THI DO THI:"],

33
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Plotter['P']( continuous=true,play=true),[ Slider['SL1'](10..100, 10, 'showticks', 'majorticks'=20,


'minorticks'=5, 'snapticks'=false,'onchange'='Action5','background'="#5C5C6C")],
[Button("Display",Action('reference'='Action5', Evaluate('function'='DT(f,g,SL1,d)'))),
Button("Animate",Evaluate('function'='VanDong(f,g,SL1,d)')),
[Button("Back",CloseWindow('Plot'))],
Button("Exit",onclick=A3)])]]),
Action[A1](RunWindow(Plot)), Window[Plot2]("Do thi trong khong gian",'menubar'='MNB2', [[
BoxColumn(border=true,background="#FFCCCC", ["Hay chon do thi ban muon
ve?:",DropDownBox['d']("F(x)", sort(["F(x)","G(x)","F(x)&G(x)"],
lexorder))],["F(x,y)",TextField['f1']( "sin(x)/y^2"),"Color",DropDownBox['m3']("green",
sort(["blue","red","yellow"," green","pink","orange"], lexorder))],["G(x,y)",TextField['g1'](
"x^3+y^2+1"),"Color",DropDownBox['m4']("red",
sort(["blue","red","yellow","green","pink","orange"], lexorder))],["X1",TextField['x1']( "-
5"),"X2",TextField['x2']( "5")],["Y1",TextField['y1']( "-5"),"Y2",TextField['y2'](
"5")],Plotter['P2'](continuous=true,play=true ), [Button("Display",
Evaluate('function'='DT2(f1,g1,x1,x2,y1,y2,d,m3,m4)')),
Button("Animate",onclick=A4),[Button("Back",
CloseWindow('Plot2'))],Button("Exit",onclick=A3)])]]),
Action[A2](RunWindow(Plot2)),MenuBar['MNB'](Menu("File", MenuItem("Exit
Alt+F4",Shutdown()),MenuItem("ClearAll",(Action(
SetOption(target='f',value=""),
Evaluate('function' = 'SetPL(SL1)'),
SetOption(target='g',value="") ))))
,Menu("Help", MenuItem("Quick Help ",Evaluate('function'='Help1()')))),
MenuBar['MNB2'](Menu("File", MenuItem("Exit Alt+F4",Shutdown()),MenuItem("ClearAll
",(Action( SetOption(target='f1',value=""),
SetOption(target='g1',value=""),
SetOption(target='x1',value=""),
Evaluate('function' = 'SetPL3()'),
SetOption(target='x2',value=""),
SetOption(target='y1',value=""),
SetOption(target='y2',value=""), )))),
Menu("Help", MenuItem("Quick Help ",Evaluate('function'='Help2()')))), Window['W2']("Maplet
thông báo:", [["Ban thuc su muon thoat khoi he thong?"],
[Button("Ok", Shutdown()), Button("Cancel", CloseWindow('W2'))]] ),
Action['A3'](RunWindow(W2)),

34
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Window[KGT]('title' = "Nhap khoang gia tri", [["Nhap khoang cho tham so van dong t:],[ "T1",
width['k1'](width['k2'], "1", "T2", width['k2'](width['k2'], "2")]), [Button("OK", onclick = A5), ()("Tro
lai", CloseWindow(KGT))],
Action['A4'](RunWindow(KGT)); Action['Action['A4']'](RunWindow(KGT), Evaluate('function' =
'VanDong2(f1, g1, x1, x2, y1, y2, "T2", "OK", d, m3, m4)'))):
Maplets[Display](dothi);

2.2.3 Maplet tính giới hạn và đạo hàm


Maplet này được chia làm hai phần:
Phần 1: Là maplet tính giới hạn của hàm số,với các chức năng:
1. Tính giới hạn
2. Tính giới hạn trái
3. Tính giới hạn phải
4. Tính giới hạn tại vô cùng
Phần 2: Là maplet tính đạo hàm của hàm số,với maplet này,chúng ta có thể tính đạo hàm của
hàm số theo biến và cấp tùy ý.
Hình ảnh mình họa:

Giao diện chọn phép tính ban đầu

35
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Giao diện tính giới hạn

Giao diện tính đạo hàm

36
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Thân chương trình:


>with(plots):with(Maplets[Tools]): with(Maplets[Elements]):
KiemTra:=proc(F,gt)
if limit(F,x=gt,left) # limit(F,x=gt,right) then
Maplets[Examples][Message]("Khong ton tai gioi han !");
else
Maplets[Tools][Set]('GioiHan'(value)=(Limit(F,x=gt)=limit(F,x=gt)));
fi:
end:
Help1:=proc()
Maplets[Examples][Message](“Bạn hãy nhập vào hàm số dạng y = f(x) và thực hiện những phép toán
tương ứng.
Luwy ý : Nếu bạn muốn tìm giới hạn của một hàm số tai vô cùng,bạn chỉ cần nhập vào hàm số và bấm
nút lệnh Giới han tại ∞.Bạn sẻ có kết quả tương ứng.
Chúc bạn thành công!”)
end:
Help2:=proc()
Maplets[Examples][Message](“Bạn hãy nhập vào một hàm số tùy ý,nhập cấp, biến đạo hàm và thực
hiện phép toán tương ứng.
Chúc bạn thành công!”)
end:
GioiHan:=Maplet(onstartup=RunWindow(MAIN),Window[MAIN]("Gioi Han - Dao Ham",[["Chào
mừng các bạn đến với maplet tính Giới Hạn - Dao Hàm!"],["Bạn muốn tính giới hạn hay đạo hàm?"],
[Button("Gioi Han",onclick=A1),Button(" Dao Ham",onclick=A2),Button("Thoat",onclick=A3)]]),
Window[Gioihan]("Gioi Han",'menubar'='MNB',
[[BoxColumn(border=true,background="#74CFA6",["Nhập hàm F(x)",TextField['F']("tan(x+Pi/2)")],
["Tính GH tại điểm ",TextField['gt']("0")], ["Kết
Qủa:",MathMLViewer['GioiHan'](),background="#FF9999"],
[Button("Gioi Han",Evaluate('function'='KiemTra(F,gt)')),Button("Gioi Han
Trai",Evaluate('GioiHan'='Limit(F,x=gt,left)=limit(F,x=gt,left)')),Button("Gioi Han
Phai",Evaluate('GioiHan'='Limit(F,x=gt,right)=limit(F,x=gt,right)')),Button("Gioi Han Tai
infinity",Evaluate('function'='GioiHanVC(F)'))],

37
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

[Button("Tro Lai",
Action(SetOption(target='GioiHan',value=""),CloseWindow('Gioihan'))),Button("ClearAll", Action(
SetOption(target='F',value=""),
SetOption(target='gt',value=""),
SetOption(target='GioiHan',value="")) ),
Button("Thoat", RunWindow('W2'))])]]),
Action[A1](RunWindow('Gioihan')), Window['Dham']("Dao Ham",
'menubar'='MNB2',[[BoxColumn(border=true,background="#FFCCCC",["Maplet tính Đạo Hàm
:"],["Nhập hàm F:", TextField['G'](width=30,"x^3")], ["Đến cấp:",TextField['K'](width=5), "Theo
Biến:", TextField['Bien'](width=5 )],["Kết Qủa",
MathMLViewer['Daoham'](),background="#74CFA6"], [Button("Dao Ham",
Evaluate('Daoham'='Diff(G,Bien$K)=diff(G,Bien$K)')),Button("Tro Lai", Action(
SetOption(target='Daoham',value=""),
SetOption(target='K',value=""),
SetOption(target='Bien',value=""),CloseWindow('Dham'))),
Button("ClearAll", Action( SetOption(target='G',value=""),
SetOption(target='K',value=""),
SetOption(target='Bien',value=""),
SetOption(target='Daoham',value="")) ), Button("Thoat", RunWindow('W2'))])]]),
Action[A2](RunWindow('Dham')),MenuBar['MNB'](Menu("File", MenuItem("Exit
Alt+F4",Shutdown()),MenuItem("ClearAll",(Action(
SetOption(target='F',value=""),
SetOption(target='gt',value=""),
SetOption(target='GioiHan',value=""))))),
Menu("Help", MenuItem("Quick
Help",Evaluate('function'='Help1()')))),MenuBar['MNB2'](Menu("File", MenuItem("Exit
Alt+F4",Shutdown()),MenuItem("ClearAll ",(Action( SetOption(target='G',value=""),
SetOption(target='K',value=""),
SetOption(target='Bien',value=""),
SetOption(target='Daoham',value=""))))),
Menu("Help", MenuItem("Quick Help ",Evaluate('function'='Help2()')))),
Window['W2']("Maplet thông báo:", [["Ban thuc su muon thoat khoi he thong?"],[Button("Ok",
Shutdown()), Button("Cancel", CloseWindow('W2'))]] ), Action['A3'](RunWindow('W2'))) :
Maplets[Display](GioiHan);

38
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

2.3.1 Mapet ứng dụng trong phương trình vi phân


Phương trình vi phân là một vấn đề rất cơ bản của toán học, tuy nhiên việc tính toán trên đối
tượng này hết sức khó khăn. Sau đây là một số Maplet về giải phương trình vi phân, hệ phương
trình vi phân để phục vụ cho việc tính toán trên đối tượng này một cách dễ dàng hơn.

2.3.2 Maplet giải phương trình vi phân thường.


Phương trình đầu vào có dạng:
y"+ Ay '+ By = 0
Với điều kiện ban đầu : y(0) = x0 , y '(0) =y0 ;
Hình ảnh minh họa:

Giao diện giải phương trình vi phân

39
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Thân chương trình:


> restar;
with(Maplets[Elements]);
with(DEtools);
with(Maplets[Tools]);
DT := proc (f, k1, k2) global p2, p3, t, dothi;
t := k1, k2; p2 := dsolve({t, f}, {y(x)});
Set('vp' = p2)
end proc;

maplet := Maplet(Window([BoxColumn(border = true, background = "#9999FF",


[Label("MAPLET GIAI PHUONG TRINH VI PHAN THUONG", 'font' = Font("courier", 14))],
[Label("Y(x)", 'font' = Font("courier", 14)), TextField['f'](width = 40, "D(D(y))(x)-
2*D(y)(x)+2*y(x)=4*exp(x) ")], ["y()", TextField['k1']("y(0)=1"), "D(y)",
TextField['k2']("D(y)(0)=2")]), BoxColumn(border = true, background = "#9999FF", [Label("Ket Qua",
'font' = Font("courier", 14))], [MathMLViewer[vp](height = 90)],
["DO THI HAM SO"], [Plotter['PL1'](height = 300)]),
[Button("Tinh", Evaluate('function' = 'DT(f, k1, k2)')),
[Button("Do Thi", Evaluate('PL1' = 'plot(subs(p2, {y(x)}), x = -8 .. .10)'))], Button("Exit",
Shutdown())]]));
Maplets[Display](maplet);

2.2.4 Maplet giải hệ phương trình vi phân thường


Hệ phương trình vi phân có dạng:
y"(x) =z(x);
z"(x)=y(x);
Với điều kiện ban đâu : y(0)=x0; z(0)=y0;
Hình ảnh minh họa:

40
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

Giao diện giải hệ phương trình vi phân


Thân chương trình:
> restar;

with(Maplets[Elements]);

41
Nhóm niên luận Toán Tin K32 _ Thiết kế giao diện Maplet trong Maple

with(DEtools);

with(Maplets[Tools]);

DT := proc (f1, f2, dk1, dk2)

global p2, p3, t, h, p; t := f1, f2; p := {y(x), z(x)};

h := dk1, dk2; p2 := dsolve({h, t});

Set('vp' = p2)

end proc;

maplet := Maplet(Window([BoxColumn(border = true, background = "#9999FF",

["MAPLET GIAI HE PHUONG TRINH VI PHAN"]), BoxColumn(border = true,


background = "#9999FF", [Label("F1(x):", 'font' = Font("courier", 14)), TextField['f1'](width =
30, "diff(y(x),x)=z(x)-y(x)-x")], [Label("F2(x):", 'font' = Font("courier", 14)),
TextField['f2'](width = 30, "diff(z(x),x)=y(x)")], [Label("y(0)", 'font' = Font("courier", 14)),
TextField['dk1'](width = 10, "y(0)=0"), Label("z(0)", 'font' = Font("courier", 14)),
TextField['dk2'](width = 10, "z(0)=1")]), BoxColumn(border = true, background = "#9999FF",
[Label("Ket Qua", 'font' = Font("courier", 14))], [MathMLViewer[vp](height = 200)]),

[Button("Tinh", Evaluate('function' = 'DT(f1, f2, dk1, dk2)')),

Button("Exit", Shutdown())]]));

Maplets[Display](maplet);

42

You might also like