1. Trang chủ
  2. » Luận Văn - Báo Cáo

DÙNG MAPLE GIẢI MỘT SỐ BÀI TOÁN CƠ BẢN VỀ ĐỐ THỊ

31 454 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 31
Dung lượng 561,08 KB

Nội dung

MỤC LỤC 1 DÙNG MAPLE GIẢI MỘT SỐ BÀI TOÁN CƠ BẢN VỀ ĐỐ THỊ MỞ ĐẦU: Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu và có nhiều ứng dụng trong ngành công nghệ thông tin. Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất vào những năm đầu của thế kỷ 18 bởi nhà toán học lỗi lạc người Thụy Sỹ: Leonhard Euler. Chính ông là người đã sử dụng đồ thị để giải bài toán nổi tiếng về 7 cái cầu ở thành phố Konigberg. Những ứng dụng cơ bản của đồ thị như: - Xác định tính liên thông trong một mạng máy tính: hai máy tính nào đó có thể truyền dữ liệu cho nhau được không. - Tìm đường đi ngắn nhất trên mạng giao thông - Giải các bài toán tối ưu: lập lịch, phân bố tần số cho các trạm phát thanh, truyền hình. - Giải bài toán tô màu trên bản đồ: tìm số màu ít nhất để tô các quốc gia sao cho hai quốc gia kề nhau phải được tô khác màu. - … 1. Giới thiệu mapple – công cụ lập trình symbolic Maple là một hệ thống tính toán trên các biểu thức đại số và minh hoạ toán học mạnh mẽ của công ty Warterloo Maple Inc. (http://www.maplesoft.com). Maple ra đời năm 1991 đến nay đã phát triển đến phiên bản 15. Maple có cách cài đặt đơn giản, chạy được trên nhiều hệ điều hành, có cấu trúc linh hoạt để sử dụng tối ưu cấu hình máy và có trình trợ giúp (help) rất dễ sử dụng. Từ phiên bản 7, Maple cung cấp ngày càng nhiều các công cụ trực quan, các gói lệnh tự học gắn liền với toán học phổ thông và đại học. Ưu điểm đó làm cho nhiều người trên thế giới lựa chọn sử dụng Maple cùng các phần mềm toán học khác áp dụng trong dạy học toán và các công việc tính toán đòi hỏi của thực tiễn và sự phát triển của giáo dục. Có thể nhận thấy rằng ngoài các tính năng tính toán và minh hoạ rất mạnh mẽ bằng các câu lệnh riêng biệt (thường chỉ cho ta kết quả cuối cùng), Maple còn là một ngôn ngữ lập trình hướng thủ tục (procedure). Thủ tục là một dãy các lệnh của Maple theo thứ tự mà người lập trình định sẵn để xử lí một công việc nào đó, 2 khi thực hiện thủ tục này Maple sẽ tự động thực hiện các lệnh có trong thủ tục đó một cách tuần tự và sau đó trả lại kết quả cuối cùng. Mapple có các chức năng cơ bản sau: Là một hệ thống tính toán trên các biểu thức đại số. Có thể thực hiện được hầu hết các phép toán cơ bản trong chương trình toán đại học và sau đại học. Cung cấp các công cụ minh họa hình học thuận tiện gồm: vẽ đồ thị động và tĩnh của các đường và mặt được cho bởi các hàm tùy ý và trong các hệ tọa độ khác nhau. Là một ngôn ngữ lập trình đơn giản và mạnh mẽ, có khả năng tương tác với các ngôn ngữ lập trình khác. Cho phép trích xuất ra các định dạng khác nhau như word, HTML… Một công cụ biên soạn giáo án và bài giảng điện tử, thích hợp với các lớp học tương tác trực tiếp. Một trợ giáo hữu ích cho học sinh sinh viên trong việc tự học. Một số lệnh để lập trình: • Lệnh IF: if <dieukien> then <cac_cau_lenh> | elif <dieukien> then <cac_cau_lenh> | | else < cac_cau_lenh > | end if; • Lệnh For: | for <biến> | | from <bieu_thuc> | | by < bieu_thuc > | | to < bieu_thuc > | | while < bieu_thuc > | do <statement sequence> end do; hoặc | for <name> | | in < bieu_thuc > | | while < bieu_thuc > | do < cac_cau_lenh > end do; • Thủ tục: 3 proc (danh_sach_tham_so) local ds_bien_cuc_bo; global ds_bientoancuc; #neu co options ds_cac_bien_tuy_chon; description Chuoi_mo_ta_thu_tuc; end proc: 2. Chương trình: > DOTHI:=module() local ModuleLoad,index,dangchuyendoi; export taodothi, ladothivohuong, ladothicohuong, loaidothi, dinh, sodinh, canh, socanh, themcanh, xoacanh, themdinh, xoadinh, timdinhke, timduongdi, lienthong, tplienthong, caybaotrum, timchutrinh, baccuadinh, lacau, timchutrinhEuler, vedothi; global `type/Dinh`, `type/Canh`, `type/Dothi`; options package; ============================= ModuleLoad:=proc() global `type/Dinh`,`type/Canh`,`type/Dothi`; `type/Dinh`:={integer,name}; `type/Canh`:=proc(c) if type(c,{list(Dinh),set(Dinh)})= false then return false; end if; if nops(c)<>2 or op(1,c) = op(2,c) then return false; end if; return true; end proc; `type/Dothi`:=proc(G) local tdinh,test,i,tapdinh,tapcanh; 4 if type(G,[set(Dinh),set(Canh)])=false and type(G, [set(Dinh),Canh])=false and type(G,[Dinh,set])=false then return false; end if; tapcanh:=G[2]; if type(G[2],Canh) then tapcanh:={G[2]}; elif type(G[2],{}) then tapcanh:={}; end if; if type(G[1],Dinh) then tapdinh:={G[1]}; else tapdinh:=G[1]; end if; tdinh:={}; for i in tapcanh do tdinh:={op(tdinh),op(i)}; end do; test:=tdinh minus tapdinh; if test={} then return true; end if; return false; end proc; end proc; ============================== # Thủ tục tạo đồ thị: taodothi:=proc(G) local i,huong,H,tapdinh,tapcanh; if type(G,Dothi)=false then return "DoThi_KhongDung"; 5 end if; if type(G[1],Dinh) then tapdinh:={G[1]}; else tapdinh:=G[1]; end if; if type(G[2],Canh) then tapcanh:={G[2]}; else tapcanh:=G[2]; end if; huong:=false; H:=[tapdinh,tapcanh]; for i in tapcanh do if type(i,list) then huong:=true;break; end if; end do; if huong=true then for i in tapcanh do if type(i,set) then H:=[tapdinh,{op(tapcanh minus{i}), [op(1,i), op(2,i)],[op(2,i), op(1,i)]}]; end if; end do; end if; return H; end proc; # index:=proc(G::Dothi,chiso::integer) local i,j,ind,n; n:=sodinh(G); ind:=array(1 n); j:=0; for i in dinh(G) do j:=j+1; 6 ind[j]:=i; end do; return ind[chiso]; end proc; dangchuyendoi:=proc(G::Dothi) local D,index,tapdinh,tapcanh,i,j,c,new,n; n:=sodinh(G); j:=0; index:=array(1 n); for i in dinh(G) do j:=j+1; index[j]:=i; end do; tapcanh:={}; for c in canh(G) do if ladothivohuong(G) then new:={};else new:=[];end if; for i from 1 to n do if index[i]=op(1,c) then if ladothivohuong(G) then new:={op(new),i}; else new:=[op(new),i]; end if; break; end if; end do; for i from 1 to n do if index[i]=op(2,c) then if ladothivohuong(G) then new:={op(new),i}; else new:=[op(new),i]; end if; break; end if; 7 end do; tapcanh:={op(tapcanh),new}; end do; return taodothi([{seq(k,k=1 n)},tapcanh]); return D; end proc; # Thủ tục xác định có là đô thị có hướng không ladothicohuong:=proc(G::Dothi) local i; for i in canh(G) do if type(i,list) then return true; end if; end do; return false; end proc; # Thủ tục xác định có là đô thị vô hướng không ladothivohuong:=proc(G::Dothi) if ladothicohuong(G) then return false; end if; return true; end proc; # Thủ tục xác định loại đồ thị loaidothi:= proc(G::Dothi) if ladothivohuong(G) then return "Do Thi Vo Huong"; 8 end if; return "Do Thi Co Huong"; end proc; # Thủ tục xác định tập đỉnh của đồ thị dinh:= proc(G::Dothi) op(1,G); end proc; # Thủ tục xác định số đỉnh của đồ thị sodinh:= proc(G::Dothi) nops(dinh(G)); end proc; # Thủ tục xác định số cạnh của đồ thị socanh:= proc(G::Dothi) nops(canh(G)); end proc; # Thủ tục xác định tập cạnh của đồ thị canh:= proc(G::Dothi) op(2,G); end proc; # Thủ tục thêm cạnh của đồ thị themcanh:= proc(G::Dothi,tapcanh) local i,c,tapdinh; if type(tapcanh,set(Canh))=false and type(tapcanh,Canh) = false then print("Canh them vao khong hop le."); return G; end if; tapdinh:=dinh(G); if type(tapcanh,Canh) then for i in tapcanh do if member(i,tapdinh)=false then tapdinh:={op(tapdinh),i}; end if; end do; return taodothi([tapdinh,{op(canh(G)),tapcanh}]); 9 end if; for c in tapcanh do for i in c do if member(i,tapdinh)=false then tapdinh:={op(tapdinh),i}; end if; end do; end do; return taodothi([tapdinh,{op(canh(G)),op(tapcanh)}]); end proc; # Thủ tục xóa cạnh trong đồ thị xoacanh:=proc(G::Dothi,tapcanh) local tc,i,j,tapcanhbandau; if type(tapcanh,Canh)=false and type(tapcanh,set(Canh))=false then print("Canh can xoa khong hop le."); return G; end if; if type(tapcanh,Canh) then tc:={tapcanh}; else tc:=tapcanh; end if; if ladothicohuong(G) then for i in tc do if type(i,set) then tc:={op(tc minus {i}), [op(1,i),op(2,i)], [op(2,i),op(1,i)]}; end if; end do; end if; tapcanhbandau:=canh(G); for i in tc do for j in canh(G) do if i=j then 10 [...]... sót Nhưng qua đó cũng giúp cho em hiểu thêm về một công cụ hỗ trợ tính toán mạnh mẽ với thư viện phong phú để có thể giải quyết các bài toán một cách dễ dàng Tài liệu tham khảo: [1] PGS.TS Đỗ Văn Nhơn, Tập tài liệu giảng dạy môn Lập trình Symbolic cho Trí tuệ nhân tạo, Đại học Công nghệ thông tin – Đại học Quốc gia TP.HCM [2] PGS.TS Đỗ Văn Nhơn, Giáo trình Toán rời, Đại học Công nghệ thông tin – Đại... Kết luận Bài thu hoạch đã trình bày những bước cơ bản để lập trình trong Mapple cũng như cách viết các thủ tục, cách gọi thực thi các thủ tục Từ nền tảng này có thể xây dựng nên nhiều chương trình khác phục vụ cho công việc học tập và nghiên cứu khoa học và trong nhiều lĩnh vực khác Tuy nhiên, do còn nhiều hạn chế như bản thân không nhiều thời gian trong việc học tập sử dụng chương trình nên bài tập... trình Toán rời, Đại học Công nghệ thông tin – Đại học Quốc gia TP.HCM [3] Tập tài liệu giảng dạy môn Toán rời rạc của thầy TS Nguyễn Viết Đông – Đại học Khoa học tự nhiên – Đại học Quốc gia TP.HCM [4] Nguyễn Ngọc Trung, Giáo trình Maple, Đại Học Sư Phạm Tp Hồ Chí Minh [5] Nguyễn Ngọc Trung, Lý thuyết đồ thị, Đại Học Sư Phạm Tp Hồ Chí Minh [6] http://mapplesoft.com [7] Mục Help của chương trình Mapple... kq:=[op(kq),index[i]]; end do; return kq; end if; return []; end proc; # Thủ tục xác định liên thông trong đồ thị lienthong:=proc(G::Dothi) local i,j; for i in dinh(G) do for j in dinh(G) do 13 if timduongdi(G,i,j)=[] then return false; end if; end do; end do; return true; end proc; # Thủ tục xác định thành phần liên thông trong đồ thị tplienthong:=proc(G::Dothi) local i,j,H,tapdinh,tapcanh,taplienthong; if lienthong(G)... taodothi([dinh(G),tapcanhbandau]); end proc; # Thủ tục thêm đỉnh trong đồ thị themdinh:=proc(G::Dothi,d) local tapdinh; if type(d,Dinh)=false and type(d,set(Dinh))=false then print("Dinh them vao khong hop le"); return G; end if; if type(d,Dinh) then tapdinh:={d}; else tapdinh:=d; end if; return taodothi([dinh(G) union tapdinh,canh(G)]); end proc; # Thủ tục xóa đỉnh trong đồ thị xoadinh:=proc(G::Dothi,d) local tapdinh,i,j,D;... end do; kq:={}; for i in T do kq:={op(kq),{index(D,op(1,i)),index(D,op(2,i))}}; end do; print(GraphTheory:-DrawGraph(GraphTheory:-Graph(kq))); return kq; end proc; # Thủ tục xác định chu trình trong đồ thị timchutrinh:=proc(G::Dothi,d) local i,tapdinhketruoc,duongdi; if member(d,dinh(G))=false then print("Dinh khong thuoc Do Thi"); return []; end if; tapdinhketruoc:={}; for i in canh(G) do if i[2]=d... print("Dinh khong thuoc Do Thi"); return 0; end if; bac:=0; for i in canh(G) do if op(1,i)=d or op(2,i)=d then bac:=bac+1; end if; end do; return bac; end proc; # Thủ tục xác định cạnh c có là cầu của đồ thị không lacau:=proc(G::Dothi,c) local D; if type(c,Canh)=false then print("Canh khong hop le"); return false; end if; if member(c,canh(G))=false then 17 print("Canh khong thuoc Do Thi"); return false;... kq:=[op(kq),[d,dnext]]; H:=xoacanh(H,c); if baccuadinh(H,d)=0 then H:=xoadinh(H,d); end if; d:=dnext; end if; end if; if canh(H)={} then break; end if; end do; end do; return kq; end proc; # Thủ tục vẽ đồ thị: vedothi:=proc(G::Dothi) if G[{},{}] then GraphTheory:-DrawGraph(GraphTheory:Graph([op(dinh(G))],canh(G))); end if; end proc; end module: 3 Dữ liệu thử: Ví dụ 1: G1:=[{1,2,5,4,3},{{3,2},{4,2},{1,4},{1,5},{4,5},{4,3}}]; . LỤC 1 DÙNG MAPLE GIẢI MỘT SỐ BÀI TOÁN CƠ BẢN VỀ ĐỐ THỊ MỞ ĐẦU: Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu và có nhiều ứng dụng trong ngành công nghệ thông tin. Những tư tưởng cơ bản. nhất trên mạng giao thông - Giải các bài toán tối ưu: lập lịch, phân bố tần số cho các trạm phát thanh, truyền hình. - Giải bài toán tô màu trên bản đồ: tìm số màu ít nhất để tô các quốc gia sao. cụ lập trình symbolic Maple là một hệ thống tính toán trên các biểu thức đại số và minh hoạ toán học mạnh mẽ của công ty Warterloo Maple Inc. (http://www.maplesoft.com). Maple ra đời năm 1991

Ngày đăng: 10/04/2015, 01:26

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w