Tải bản đầy đủ (.doc) (15 trang)

Lập trình trong Maple ứng dụng giải các bài toán phức tạp

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (766.18 KB, 15 trang )

Lập trình trong Maple ứng dụng giải các bài toán phức tạp
MỤC LỤC
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
1
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
Phần 1: GIỚI THIỆU ĐỀ TÀI
1. Lý do chọn đề tài
Lập trình Symbolic cho Trí Tuệ Nhân Tạo là môn học đem lại nhiều sự sức thu húc
cho người học cũng như nghiên cứu. Môn học rèn luyện cho chúng ta sự tính toán một
cách nhanh chóng, hiệu quả. Nói đến toán học không chỉ đơn thuần là một môn khoa học
mà còn được ứng dụng vào hầu hết các lĩnh vực trong xã hội. Việc ra đời của chiếc máy
tính và ngôn ngữ lập trình phần nào giúp các nhà toán học giải quyết vấn đề một cách
nhanh chóng. Một bài toán nếu giải theo cách thông thường có thể mất không ít thời gian
và kết quả cũng chưa chắc đúng hoàn toàn, trong khi, nếu bài toán đó được giao cho máy
tính xử lý thì kết quả có độ chính xác cao hơn. Tuy nhiên, các ngôn ngữ lâu đời như C ,
Pascal … hay kể cả ngôn ngữ hiện đại như C#, Java …cũng rất khó khăn trong việc thực
hiện các dạng toán như giải tích sơ cấp, đại số tuyến tính ….Chúng không thể biểu diễn các
ký hiệu toán học đều này cũng gây nên cản trở cho các nhà toán học muốn áp dụng công
nghệ thông tin. Cần có một công cụ chuyên biệt có khả năng biểu diễn và giải các bài toán
theo ngôn ngữ toán học. Các công cụ Maple, Mathematica, Matlab ra đời nhằm mục đích
trên. Và đặc biệt hiện nay phần mềm Maple tích hợp rất nhiều tính năng để giải quyết bài
toán một cách nhanh chóng, cũng như đem lại cho người học CNTT sự thích thú, say mê
trong lập trình ứng dụng trên Maple.
2. Mục tiêu đề tài
- Tìm hiểu và làm rõ một số khái niệm, định nghĩa trong toán học
- Hiểu cách định nghĩa các hàm trong Maple
- Giải quyết bài toán một cách nhanh chóng và hiệu quả
- Ứng dụng phần mềm để giảng dạy hoặc nghiên cứu
- Lập trình viên có thể ứng dụng tạo ra một số hàm hay định nghĩa hàm phục vụ riêng khi
cần thiết.
- Tích hợp phát triển ứng dụng cao hơn.


GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
2
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
- Ứng dụng CNTT lập trình trong Maple mang tính chất “Trí tuệ nhân tạo” để giải quyết
một số bài toán phức tạp.
3. Ý nghĩa
- Đem lại cho người dung sự thích thú trong toán học. Từ đó làm động lực cho học
nghiên cứu sâu hơn trong toán học, giúp xã hội ngày càng phát triển.
- Giúp cho dân lập trình ngày càng có thông minh và trí tuệ giải quyết nhiều vấn đề.
- Nâng cấp phần mềm có thêm nhiều chức năng cho người dùng dễ sử dụng, đem lại hiệu
quả kinh tế cao.
4. phạm vi ứng dụng
- Ứng dụng cho việc giảng dạy toán học, tin học cho các trường học, trung tâm, viện
nghiên cứu,…
- Ứng dụng cho lập trình CNTT
- Học sinh, sinh viên.
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
3
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
Phần 2: LẬP TRÌNH TRONG MAPLE ỨNG DỤNG GIẢI TOÁN
1. Giải và biện luận phương trình theo tham số m
1.1 Phân tích yêu cầu:
Cho phương trình bậc 2 với tham số là m, Giải và biện luận phương trình cho tất cả các
trường hợp.
1.2 Cấu trúc dữ liệu:
Đầu vào phương trình phải có dạng tổng quát: vế trái là một biểu thức với tham số m,
vế phải bằng 0. ví dụ: mx
2
+(m-1)x-3=0
1.3 Thuật giải:

B0: khai báo biến a,b,c,vt,m1,x1,x2,isConst=false;
B1: khởi tạo biến pt:= phương trình theo tham số m;
B2: p:=vế trái phương trình theo tham số m.
B3: gán cho biến a,b,c lần lượt là hệ số của x
2
,x
1
,x
0
B4: Delta=b*b-4*a*c;
B5: Kiểm tra kiểu dữ liệu của Delta, nếu hợp lệ thì isConst=true.
B6: Nếu isConst:=true thì
B6.1: Delta>0 thì pt có 2 nghiệm phân biệt: x1=(-b+sqrt(Delta))/2*a;
X2=(-b-sqrt(Delta))/2*a;
B6.2: Delta=0 thì pt có nghiệm kép x1=x2=-b/2*a;
B6.3: Delta<0 thì pt vô nghiệm.
B7: nếu isConst:=false thì return;
B8: TH Delta=0
B8.1 giải pt delta=0 theo m: m1=solve(Delta=0,bienm)
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
4
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
B8.2 nếu m1<>Null phương trình có nghiệm kép
X1=subs(bienm=m1[1],-b/2*a;
X2=subs(bienm=m1[2],-b/2*a;
B9: TH Delta>0
B9.1 giải bất phương trình Delta>0 tham số m: m1=solve(Delta>0,bienm)
B9.2 nếu m1<>Null pt có 2 nghiệm phân biệt
X1=(-b+sqrt(Delta,symbolic)/2*a;
X2=(-b-sqrt(Delta,symbolic)/2*a;

B10: TH Delta<0
B10.1 Giải bất pt Delta<0 tham số m: m1=solve(Delta<0,bienm)
B10.2 Nếu m1<>Null pt vô nghiệm
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
5
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
1.4 Thủ tục

GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
6
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
1.5 Dữ liệu mẫu
Delta theo m: m^2+4*m+4
Khi m bang -2 thi phuong trinh nghiem kep -3
Khi m bang -2 thi phuong trinh nghiem kep -3
Khi m thuoc RealRange(-infinity,Open(-2)) hoac
RealRange(Open(-2),infinity)thi phuong trinh co 2 nghiem la:
2*m+1 va m-1
2. Suy diễn tiến trên luật dẫn cơ bản
2.1 Phân tích yêu cầu
phát biểu vấn đề suy diễn:… về mặt cơ sở có sẳn tập F và R. vấn đề đặt ra là giả sử cho
trước tập giả thiết H, ta muốn suy ra một tập mục tiêu G. Tìm dãy các luật để từ H ta suy ra
được G (tìm lời giải cho bài toán suy diễn).
2.2 Cấu trúc hệ luật dẫn: (F,R)
Giả sử:
F={p, q, r, a, b…}
R={ các luật dẫn có dạng if gt then kl; gt và kl là các tập con của F}
2.3 Thuật giải:
+ Xác định biến (kiểu dữ liệu nhất định, cấu trúc điều khiển,…
Solution: ds các luật được áp dụng

Known:Lưu lại tập sự kiện đã biết
B1: Khởi tạo biến: Sol:=[];
Known:=H;
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
7
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
B2: while (chưa đạt được mục tiêu G) do
2.1: Tìm luật r thuộc R có thể áp dụng trên Known
2.2: If (không tìm được r) then
Dừng: không tìm được lời giải
2.3: Thêm r vào Sol; them kl(r) vào Known
End do;
B3: Cho kết quả tìm được lời giải Solution
2.4 Thủ tục:
Giả sử đã có (F,R), biến toàn cục
2.5 Dữ liệu mẫu:
GT={a,b}
Rules={a->c;b->d;a->e; a,d->e;b,c->f; e,f->g}
Sol={g};
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
8
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
3. Tìm chu trình Euler
3.1 Phân tích yêu cầu:
- Đường Euler của đa đồ thị là đường đi qua mỗi cạnh của đồ thị đúng một lần.
- Chu trình Euler của đa đồ thị là đường đi qua mỗi cạnh của đồ thị đúng một lần.
- Đa đồ thị G có chu trình vô hướng Euler khi và chỉ khi mọi đỉnh đều có bậc
chẵn.
- Đa đồ thị G có đường đi Euler vô hướng khi và chỉ khi số đỉnh bậc lẻ bằng 2.
 Phác họa lời giải:

void main()
{
Nhập đồ thị;
Kiemtradothi();
if( có chu trình Euler );
InchutrinhEuler();
}
 Chú thích:
+ Ta chưa khai báo các biến, khi cần biến nào ta sẽ khai báo biến đó.
+ Chưa cần khai báo các tham số của hàm, dần dần qua các bước ta sẽ thấy hàm cần
tham số gì => khi đó ta có thể điều chỉnh lại.
+ Đoạn mã trên chính là mã giả. Nó gần với ngôn ngữ tự nhiên hơn là với ngôn ngữ lập
trình và dần dần người ta sẽ biến chuyển nó ngày càng gần hơn với ngôn ngữ mà ta
chọn. Trong những phần sau, bạn sẽ được làm quen thêm với mã giả.
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
9
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
10
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
3.2 Cấu trúc dữ liệu
- Đầu vào chương trình là một đồ thị dạng Graph
- Đầu ra là tập hợp các đỉnh tạo thành chu trình
Định nghĩa các hàm cần sử dụng
- Thủ tục khởi tạo ban đầu, sử dụng các package cần thiết
> Init:=proc()
restart;
interface( warnlevel = 0 );
with(networks);
#with(LinearAlgebra);

end:
- H=duplicate(G): sao chép đồ thị G vào H
- V:=vertices(G): lấy tập các đỉnh vào V
- E:=edges(G); lấy tập các cạnh vào E
- Convert: chuyển đổi từ dạng danh sách sang tập hợp
3.3 Thuật giải
B1: Khởi tạo:
- V: Tập các đỉnh của đồ thị G
- E: Tập các cạnh/cung của đồ thị G
- H chứa đồ thị G(V,E)
- Đỉnh xuất phát là đỉnh 1:Vstart:= V[1];
- Chu trình bằng rỗng: ECycle=[];
B2: Thực hiện vòng lặp: trong khi E khác rỗng:
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
11
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
B2.1: cho i:=Vstart, C=[i]; CycleFound=false;
B2.2: Thực hiện vòng lặp: Trong khi Not CycleFound:
B2.2.1: Tìm đỉnh j kế cận đỉnh i, nếu đỉnh j=Vstart thì tìm được một chu trình.
B2.2.2: thêm đỉnh j vào C rồi xóa cạnh i,j
B2.2.3: Nếu j=Vstart thì cập nhật CycleFound=true; i=j;
B2.2.4: Nếu tìm được một chu trình C thì thêm vào ECycle
B2.2.5: Tìm đỉnh Vstart kế tiếp nếu còn chu trình
End do;
End do;
B3: In ra kết quả các chu trình đã tìm được.
3.4 Thủ tục
Thủ tục khởi tạo ban đầu, sử dụng các package cần thiết :
> Init:=proc()
restart;

interface( warnlevel = 0 );
with(networks);
#with(LinearAlgebra);
end:
Thủ tục tìm chu trình Euler
> Euler:=proc(G::graph)
local H,V,E,vStart,ECycle,C,S,cycleFound,i,j,k;
H:=duplicate(G);
V:=vertices(G);
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
12
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
E:=edges(G);
vStart:=V[1];
ECycle:=[];
while E<>{} do
i:=vStart;
C:=[i];
cycleFound:=false;
while not cycleFound do
#Tim dinh j ke can i, neu j=vStart -> duoc 1 chu trinh
S:=neighbors(i,H);
for j in S do
if j<>vStart then break; fi;
od;
#Them dinh j vao C, roi xoa canh (i,j)
if j=vStart then cycleFound:=true;
else C:=[op(C),j];
fi;
#Neu tim duoc 1 chu trinh C thi them vao ECycle,

if cycleFound then
#Them chu trinh C vao ECycle tai vi tri vStart
if ECycle=[] then ECycle:=C;
else
i:=1;
while ECycle[i]<>vStart do i:=i+1; od;
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
13
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
ECycle:=[op(1 i-
1,ECycle),op(C),op(i nops(ECycle),ECycle)];
fi:
#Tim dinh vStart ke tiep neu con chu trinh
if E<>{} then
V:={};
for i in E do V:=V union ends(i,H) od;
V:=V intersect convert(ECycle,set);
vStart:=V[1];
fi;
fi;
od;
od;
ECycle:=[op(ECycle),ECycle[1]];
return ECycle;
end:
3.5 Dữ liệu mẫu
> V:={1,2,3,4,5,6,7,8,9,10}:
E:=[{1,2},{1,4},{3,2},{3,4},{3,5},{3,6},{7,5},{7,6},{5,8},
{5,10},{8,9},{9,10}]:
H:=graph(V,E):

draw(H);
EulerRouting(H);
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
14
Lập trình trong Maple ứng dụng giải các bài toán phức tạp
Chu trinh Euler tim duoc :
[1, 2, 3, 5, 8, 9, 10, 5, 7, 6, 3, 4, 1]
TÀI LIỆU THAM KHẢO
[1] Hoàng Kiếm, Giáo trình Các hệ Cơ sở Tri thức, NXB ĐHQG, 2006.
[2] Stuart Russell & Peter Norvig, Artificial Intelligence – A modern approach (second
edition), Prentice Hall, 2003.
[3] Nhon Van Do, Model for Knowledge Bases of Computational Objects, IJCSI
International Journal of Computer Science Issues, Vol. 7, Issue 3, No 8, May 2010.
[4] Đỗ Văn Nhơn, Bài giảng môn học lập trình Symbolic 2013
GVHD: PGS.TS Đỗ Văn Nhơn HVTH: Lê Nhựt Trường – CH1101150
15

×