Giải bài tập đại số tuyến tính bằng maple

29 1 0
Giải bài tập đại số tuyến tính bằng maple

Đ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

MỤC LỤC I GIỚI THIỆU 3 II SƠ LƯỢC VỀ LẬP TRÌNH TRÊN MAPLE 3 1 Các lệnh lập trình cơ bản 3 1 1 Vòng lặp While 3 1 2 Vòng lặp for 4 1 3 Lệnh điều kiện if 5 1 4 Lệnh break 6 1 5 Lệnh next 6 1 6 Sử dụng c[.]

MỤC LỤC I II GIỚI THIỆU.I THIỆU.U SƠ LƯỢC VỀ LẬP TRÌNH TRÊN MAPLE LƯỢC VỀ LẬP TRÌNH TRÊN MAPLE.C VỀ LẬP TRÌNH TRÊN MAPLE LẬP TRÌNH TRÊN MAPLE.P TRÌNH TRÊN MAPLE 3 Các lệnh lập trình 1.1 Vòng lặp While 1.2 Vòng lặp for 1.3 Lệnh điều kiện if 1.4 Lệnh break 1.5 Lệnh next 1.6 Sử dụng hàm RETURN, ERROR 3 6 Cách thiết lập chu trình 2.1 Giới thiệu 2.2 Khai báo chu trình 2.3 Tham biến 2.4 Phạm vi biến 2.5 Định giá biến 2.6 Các chức khác 7 8 9 10 Giới thiệu lập trình Maplet Maple 11 3.1 Các ứng dụng Maplets gì? 11 3.2 Các thuật ngữ 12 3.3 Cách tạo ứng dụng Maplets 12 3.4 Maplets Package 12 III GÓI THƯ VIỆU.N HỖ TRỢ CHO VIỆC GIẢI BÀI TẬP ĐẠI SỐ TUYẾN TRỢC VỀ LẬP TRÌNH TRÊN MAPLE CHO VIỆU.C GIẢI BÀI TẬP ĐẠI SỐ TUYẾN I BÀI TẬP ĐẠI SỐ TUYẾN I TẬP TRÌNH TRÊN MAPLE.P ĐẠI SỐ TUYẾN I SỐ TUYẾN TUYẾN N TÍNH.NH 14 IV GIẢI BÀI TẬP ĐẠI SỐ TUYẾN I BÀI TẬP ĐẠI SỐ TUYẾN I TẬP TRÌNH TRÊN MAPLE.P ĐẠI SỐ TUYẾN I SỐ TUYẾN TUYẾN N TÍNH.NH BẰNG MAPLE.NG MAPLE 15 Một số phép biến đổi ma trận 1.1 Phép biến đổi dòng 1.2 Phép biến đổi cột 1.3 Ví dụ 15 15 15 16 Kiểm tra ma trận 16 Giải hệ phương trình tuyến tính 17 Phép tốn ma trận 20 Tìm hàm đặc trưng 21 Lược đồ trực giao Gram – Schmidt 22 Dùng Maplet giải tập đại số tuyến tính V TỔNG KẾT.NG KẾN T 23 27 Kết đạt 1.1 Về mặt lý thuyết 1.2 Về mặt thực hành 27 27 27 Hướng phát triển 27 I GIỚI THIỆU Như biết, năm gần đây, với phát triển Công nghệ thông tin (CNTT), nhiều phần mềm hỗ trợ cho việc tính tốn xuất ngày hoàn thiện Tại nước ta, chưa trở thành trạng phổ biến, nhiều trường Đại học Cao đẳng, nhiều cô giáo, thầy giáo thực “một cách tự phát” việc sử dụng CNTT nói chung phần mềm tính tốn nói riêng việc giảng dạy Tốn Nhiều người sử dụng phần mềm STATA, SPSS để xử lý số liệu thống kê, EVIEWS, MFIT để xử lý số liệu toán Kinh tế lượng, MATHEMATICA, MATLAB, MAPLE toán Toán cao cấp, Tốn tài Việc sử dụng phần mềm tính tốn đặt cho nhà quản lý giáo dục, thày cô giáo vấn đề cấp thiết sử dụng chúng công tác đổi phương pháp dạy học Toán trường Đại học, Cao đẳng Phổ thông Việc sử dụng phần mềm để xử lý số liệu tỏ rõ tính hiệu việc đổi cách dạy học số mơn học Tốn \ Cho đến cuối năm 2012, thị trường nước ta có phiên MAPLE 16 Theo em, MAPLE đủ đáp ứng cho tính tốn số ký hiệu Phần mềm Maple cơng cụ hỗ trợ cho việc giảng dạy, tính tốn lập trình để hỗ trợ tốn giảng dạy trường học Đây phần mềm thiết kế riêng cho việc hỗ trợ tính tốn, giúp cho việc tính tốn cách nhanh hiệu quả, mang lại kết thật xác Thơng qua giúp cho học sinh sinh viên tiếp cận với phương pháp nghiên cứu khoa học với công cụ hỗ trợ tính tốn ưu việt II SƠ LƯỢC VỀ LẬP TRÌNH TRÊN MAPLE Các lệnh lập trình 1.1 Vịng lặp While a Cú pháp While od; b Chức Vòng lặp while cho phép lặp chuỗi câu lệnh od mà điều kiện condition (tức biểu thức điều kiện cho giá trị true) Điều kiện condition kiểm tra đầu vịng lặp, thỏa mãn (giá trị đúng) câu lệnh bên thực hiện, sau lại tiếp tục kiểm tra điều kiện condition điều kiện khơng cịn thỏa mãn nữa.Vòng lặp while thường sử dụng số lần lặp hay chuỗi biểu thức không xác định rõ, đồng thời ta muốn biểu thức cần lặp điều kiện cịn thỏa mãn Điều kiện condition vòng lặp phải biểu thức boolean, tức giá trị sai, khơng sinh lỗi Trong trường hợp muốn khỏi vịng lặp từ vịng lặp, ta thực cách dùng câu lệnh RETURN, break quit Chú ý vịng lặp while- do- od; khơng bắt buộc phải nằm nhiều dòng lệnh người ta thường viết nhiều dòng để câu lệnh dễ đọc dễ hiểu Vòng lặp While cho phép lặp chuỗi câu lệnh nằm od mà điều kiện 1.2 Vòng lặp for a Cú pháp for name from start by change to finish statement sequence od; Hoặc dạng phát biểu khác: for name in expression statement sequence od; b Chức Vòng lặp for dùng để lặp chuỗi biểu thức đặt od, lần lặp tưng ứng với giá trị phân biệt biến số name đứng sau từ khoá for Ban đầu, giá trị start gán cho biến số Nếu giá trị biến name nhỏ hay giá trị finish chuỗi lệnh nằm od thực hiện, sau biến name gán giá trị cách cộng thêm vào giá trị change (name:=name+change) Sau đó, biến name so sánh với finish để định xem việc thực chuỗi lệnh có tiếp tục khơng Q trình so sánh biến số name thực chuỗi lệnh lặp liên tiếp giá trị biến name lớn giá trị finish Giá trị cuối biến name giá trị vượt finish Chú ý Nếu từ khóa from start by change bị bỏ qua mặc định from by dùng Vòng lặp for- in- do- od thực việc lặp với giá trị mà biến số name lấy từ biểu thức expression cho Chẳng hạn vòng lặp sử dụng hiệu mà giá trị biến name phần tử tập hợp danh sách Trong trường hợp muốn khỏi từ vịng lặp, ta dùng câu lệnh break, quit, RETURN giống vòng lặp while 1.3 Lệnh điều kiện if a Cú pháp if condition then statement sequence | elif condition then statement sequence | | else statement sequence | fi; (Ghi chú: Các câu lệnh cặp dấu ngoặc đứng lệnh tuỳ chọn Thí dụ: biểu thức | statement | cho biết statement câu lệnh tuỳ chọn) b Chức Nếu bạn muốn dãy biểu thức thực điều kiện thoả mãn dãy biểu thức khác thực trái lại dùng câu lệnh if- then- else- fi Trong câu lệnh trên, điều kiện condition chuỗi biểu thức đứng sau then thực hiện, trái lại điều kiện condition sau từ khố elif kiểm tra, chuỗi lệnh tương ứng sau then thực hiện, tiếp tục điều kiện condition khơng thỏa mãn, biểu thức sau lệnh else thực Lưu ý cấu trúc lệnh (tuỳ chọn) elif then lặp lại với số lần tuỳ ý Từ khoá elif dạng viết tắt else if Các biểu thức điều kiện condition sử dụng câu lệnh if phải tạo thành từ bất đẳng thức, đẳng thức (các phép toán quan hệ), biến số, phép tốn logic, hàm có giá trị trả lại giá trị logic Nếu trái lại gây lỗi 1.4 Lệnh break a Cú pháp break b Chức Trong lúc vòng lặp while/for thực hiện, lệnh break gọi chương trình khỏi vịng lặp while/for tận mà có chứa lệnh break (vì có nhiều vịng lặp while/for lồng nhau) Một ví dụ điển hình việc sử dụng lệnh break trình tìm kiếm search, rõ ràng bạn muốn dừng trình quét lại bạn tìm thấy đối tượng cần tìm Khi đó, thời điểm tìm thấy, bạn dùng lệnh break để nhảy khỏi vịng lặp tìm kiếm Trước lệnh break thường có câu lệnh điều kiện if then Nếu lệnh break dùng vịng lặp while/for sinh lỗi Chú ý: break khơng phải từ khố (từ dành riêng cho Maple), ta gán giá trị cho biến có tên break mà khơng sinh lỗi (mặc dù điều không nên) 1.5 Lệnh next a Cú pháp Next b Chức Cũng giống câu lệnh break, lệnh next thực vịng lặp while/for với mục đích bỏ qua số lệnh bên vòng lặp để nhảy qua lần lặp Khi gặp lệnh next vòng lặp, chương trình bỏ qua lệnh vịng lặp tận chứa next gặp từ khố xác định kết thúc vịng lặp (ở lệnh od) Đến vòng lặp tiếp tục nhảy qua lần lặp (nếu có thể) cách tăng số kiểm tra điều kiện để định xem có nên thực vịng lặp Lệnh next sinh lỗi gọi ngồi vịng lặp while/for Tương tự break, next khơng phải từ khóa, ta hồn tồn gán cho next giá trị (xem next biến) Ngay trước lệnh next thường câu lệnh điều kiện if then 1.6 Sử dụng hàm RETURN, ERROR Hàm RETURN sử dụng giá trị hàm trước thoát khỏi chu trình Nếu khơng có lệnh RETURN, chu trình tự động cho kết phép tính cuối chu trình Hàm ERROR sử dụng để đưa thơng điệp lỗi hình từ bên chu trình Cách thiết lập chu trình 2.1 Giới thiệu Maple ngơn ngữ lập trình hướng chu trình (procedure) Chúng ta làm việc với Maple hai chế độ khác nhau: Chế độ tương tác trực tiếp thông qua việc nhập lệnh đơn lẻ dấu nhắc lệnh Maple nhận kết lệnh Chế độ chu trình thực cách đóng gói dãy lệnh xử lí cơng việc vào chu trình (procedure) nhất, sau ta cần gọi chu trình Maple tự động thực lệnh có chu trình cách sau trả lại kết cuối Maple chứa lượng lớn hàm tạo sẵn đáp ứng cho u cầu tính tốn khác nhiều lĩnh vực Các hàm lưu trữ gói chu trình (package) người sử dụng dễ dàng gọi đến cần thiết Tuy nhiên, người dùng Maple tự tạo cho riêng gói chu trình trao đổi dùng chung gói chu trình đấy, phục vụ cho cơng việc mang tính đặc thù riêng Các khái niệm cần phải nắm vững để tạo chu trình (procedure) là:  Cấu trúc proc() end; với khai báo cấu trúc (global, local, option, )  Các cấu trúc liệu hàm có liên quan (dãy-sequence, tập hợpset, danh sách-list, mảng-array, bảng-table)  Các hàm lập trình (đã nêu trên) hàm liên quan đến việc xử lí liệu (eval, evalf, subs, map, convert, ) 2.2 Khai báo chu trình Lời gọi khai báo chu trình: procedure_name:=proc(parameter_sequence) [local local_sequence] [global global_sequence] [options options_sequence] statements_sequence; end; Giải thích khai báo: parameter_name: Là dãy kí hiệu, ngăn cách dấu phẩy, chứa tên tham biến truyền cho chu trình local_sequence: Là dãy tên khai báo biến cục chu trình, có giá trị sử dụng phạm vi chu trình xét (local sử dụng để khai báo cho biến sử dụng bên chu trình) global_sequen: Dãy tên biến tồn cục có giá trị sử dụng bên ngồi chu trình options_sequence: Dãy tuỳ chọn cho chu trình statements_sequence: Dãy câu lệnh người lập trình đưa vào 2.3 Tham biến Tham biến (parameter) biến đặt hai dấu ngoặc biểu thức proc( ) Tham biến dùng để nhận liệu truyền cho chu trình gọi chu trình Ví dụ ta khai báo chu trình tính tổng số [tong:=proc(x,y) x+y; end.] gọi chu trình để tính tổng hai số 10 ta phải truyền liệu cho tham biến (cho x nhận giá trị 10, y nhận giá trị 5), tức dấu nhắc lệnh ta phải viết tong(10, 5); sau thực chu trình trả lại kết 15 Tham biến có tính cục bộ: chúng sử dụng bên chu trình khai báo, bên ngồi chu trình chúng khơng mang ý nghĩa Kiểu tham biến khai báo trực tiếp 2.4 Phạm vi biến Biến toàn cục:  Biến toàn cục khai báo sau từ khố global khai báo chu trình  Biến toàn cục khai báo bên chu trình, có phạm vi giá trị tồn chương trình, tức bên ngồi phạm vi chu trình mà khai báo Biến cục bộ:  Biến cục khai báo sau từ khố local khai báo chu trình  Biến cục có giá trị bên chu trình mà khai báo Ngồi chu trình khơng mang ý nghĩa Tham biến:  Cũng giống biến cục bộ, tham biến có giá trị bên phạm vi chu trình mà khai báo Sau chu trình kết thúc, chúng khơng cịn giá trị  Tham biến cịn sử dụng để trả lại kết quả, ngôn ngữ lập trình truyền thống Ngồi ra, Maple có hàm có khả trả lại nhiều giá trị Ta gộp giá trị vào danh sách để trả lại phần tử 2.5 Định giá biến Định giá tên hàm tham biến: Như đề cập trước đây, tên biến biểu thức Maple định giá trước thực phép tính chúng Đối với việc thực hàm tương tự Trước tiên tên chu trình định giá Sau đến đối số danh sách đối số truyền cho chu trình (được định giá từ trái sang phải) Nếu tên chu trình định giá trỏ đến chu trình, chu trình thực thi đối số định giá Tuy nhiên có số chu trình ngoại lệ: hàm eval, assigned, seq Định giá biến cục biến toàn cục: Các biến cục tham biến truyền cho chu trình định giá cấp (định giá lần), biến tồn cục định giá hồn tồn (full evaluation) Hàm eval( ) dùng để ép định giá hoàn toàn cho biến cục tham biến, định giá mức cho biến toàn cục 2.6 Các chức khác Muốn in hình "vòng lệnh ẩn" ta sử dụng biến printlevel Đây cách đơn giản để xem xét trình thực lệnh Khi printlevel gán giá trị âm khơng cả, gán giá trị có kết câu lệnh Dị lệnh chu trình: trace(f) trace(f, g, h, ) Tham số: Các hàm f, g, h, hàm cần chạy bước Lệnh trace cho in cách thức lệnh chu trình hình Lệnh dị trace() hoạt động tương tự ta gán cho biến printlevel số đủ lớn để hình tất câu lệnh điểm vào điểm hàm mà ta thực Trong suốt trình thực hiện, điểm vào, kết câu lệnh, điểm hàm cần dị hình Các tham biến điểm vào chu trình, giá trị trả lại hàm điểm cuối chu trình Chú ý: Khơng thể dị bước số hàm có quy tắc định giá đặc biệt, bao gồm: assigned, eval, evalhf, evalf, evaln, traperror, seq, userinfo - Xem mã nguồn chu trình: showstat(procName) showstat(procName, statRange) Tham số: procName: Tên chu trình cần hiển thị mã nguồn StatRange: Phạm vi dòng lệnh cần hiển thị (từ dòng đến dòng nào) Phần lớn lệnh Maple viết ngơn ngữ Maple, đọc mã nguồn lệnh Maple cung cấp hàm showstat() để đoạn chương trình mã nguồn lệnh Nhờ có hàm mà Chú ý: Các hàm Package linalg sử dùng mà không càn phải kêu thư viện linalg vào (bằng lệnh with trên) : trước hàm lệnh ta cần rõ tên Package, ví dụ : linalg[det] (A), linalg[angle](u,v),… Hoặc kêu hàm lệnh để dùng, cách dùng, chẳng hạn with(linalg,det), kể từ dùng lệnh det mà khơng phải định thêm IV GIẢI BÀI TẬP ĐẠI SỐ TUYẾN TÍNH BẰNG MAPLE Một số phép biến đổi ma trận 1.1 Phép biến đổi dòng - Nhân hàng i ma trận A với số x RowOperation(A,i,x); - Hoán vị hàng i j RowOperation(A,[i,j]); - Bổ sung vào hàng i, hàng j sau nhận hàng j với x RowOperation(A,[i,j],x); - Chú ý : để nhớ thay đổi cho ma trân A sau tiến hành thay đổi, ta bổ sung thâm tham số inplace = true RowOperation(A,i,x,inplace=true); RowOperation(A,[i,j],inplace=true); RowOperation(A,[i,j],x,inplace=true); 1.2 Phép biến đổi cột - Nhân cột i ma trân A với số x ColumnOperation(A,i,x); - Hoán vị cột i j ColumnOperation(A,[i,j]); - Bổ sung vào cột i cột j sau nhân cột j với x ColumnOperation(A,[i,j],x); - Tương tự ta có: ColumnOperation(A,i,x,inplace=true); ColumnOperation(A,[i,j],inplace=true); ColumnOperation(A,[i,j],x,inplace=true); 1.3 Ví dụ > A:=RandomMatrix(4,generator=-5 5); > RowOperation(A,1,2); > RowOperation(A,[2,3]); > RowOperation(A,[1,4],a); > ColumnOperation(A,1,2); > ColumnOperation(A,[2,3]); > ColumnOperation(A,[1,4],a); > A:=RandomMatrix(4,generator=-5 5); > RowOperation(A,[1,4]); > A; > RowOperation(A,[1,4],inplace=true); > A; Kiểm tra ma trận > with(LinearAlgebra); > A:=Matrix(3,3,[[1,2,3],[1,1,1],[5,7,9]]); - kiểm tra ma trận vuông > type(A,’Matrix’(square)); > A:=DiagonalMatrix([2,3,4,5]); - kiểm tra ma trận đối xứng > type(A,’Matrix’(symmetric)); > A:=DiagonalMatrix([2,3,4,5]); B:=RandomMatrix(4); - kiểm tra ma trận xác định dương > IsDefinite(A); > IsDefinite(A,query = ‘positive_definite’); > IsDefinite(B); - kiểm tra ma trận trực giao > G := Matrix([[cos(theta),sin(theta),0],[-sin(theta),cos(theta),0],[0,0,1]]); > IsOrthogonal(G); - kiểm tra ma trận Unitary > Q := ; > IsUnitary(Q); > A:=; B:=; - kiểm tra tính đồng dạng hai ma trận > IsSimilar(A ,B ); > A := DiagonalMatrix([5,12,13]); > B := ; > IsSimilar(A ,B ); - lấy ma trận phép biến đổi trường hợp hai ma trận đồng dạng > (q, P) := IsSimilar(A, B, output=['query', 'C']); > A = P^(-1) B P; Giải hệ phương trình tuyến tính Hệ phương trình tuyến tính loại phương trình thường gặp, ta xét ví dụ sau: 2*x1-x2+x3-3*x4=23, x2-8*x4+x5=46, 3*x1-x2+x4=-34, 6*x2-x5=54, -x1+2*x4-7*x5=-20 Chúng ta nhanh chóng dùng lệnh solve để giải: >eqs:={2*x1-x2+x3-3*x4=23,x2-8*x4+x5=46,3*x1-x2+x4=-34,6*x2x5=54,-x1+2*x4-7*x5=-20}; >vars:={x1,x2,x3,x4,x5}; >solve(eqs,vars); Để nhanh chóng tách ma trận hệ số A cột vector tự b hệ tuyến tính, bạn dùng lệnh >A,b:=LinearAlgebra[GenerateMatrix](eqs,vars): >print(‘A’=A); # ma trận hệ số >print(‘b’=b); # cột vector tự Lúc này, ngồi lệnh solve, bạn cịn dùng lệnh LinearAlgebra [LinearSolve] để tìm nghiệm được: >LinearAlgebra[LinearSolve](A,b); Chú ý: kết vector nghiệm theo thứ tự x1,x2,… Rõ ràng phép gán eqs, vars thực thủ công Đối với hệ phương trình có số lượng pt số lượng biến lớn, ta phải làm ? Xét ví dụ: Giải hệ phương trình phương trình lấy từ file liệu hephuongtrinh.txt Các bạn tải đây: hephuongtrinh.doc Sau tải về, bạn tạo file hephuongtrinh.txt ổ C:\ copy liệu qua file (thơng cảm nha, WordPress không cho phép upload file text lên) Công việc lấy liệu từ file này: >data:=ImportVector(“C:\\hephuongtrinh.txt”); >eqs:=convert(data,set); Tiếp theo, ta viết thủ tục tìm ẩn chưa biết > timan:=proc(s) local vars; vars:=convert(lhs(s),list); # tách số hạng vế trái thành list vars:=map(`convert/list`,vars); # tách hệ số biến vars:=ListTools[Flatten](vars); # tạo list chung cho biến hệ số convert(remove(t->type(t,complex),vars),set); # chuyển kiểu tập hợp end proc; Thủ tục cho phép tìm ẩn bên vế trái phương trình >vars:=map(timan,eqs); # tìm ẩn phương trình >vars:=map(op,vars); # tìm ẩn hệ Đến đây, ta làm >solve(eqs,vars); >A,b:=LinearAlgebra[GenerateMatrix](eqs,vars): >print(‘A’=A); # ma trận hệ số >print(‘b’=b); # cột vector tự >LinearAlgebra[LinearSolve](A,b); Tất nhiên sử dụng phần mềm tính tốn ta phải tin tưởng vào kết mà giải Tuy nhiên ta sử dụng hàm định nghĩa sẵn để kiểm tra Sau số phương pháp áp dụng: - P1: dùng lệnh subs cấu trúc: subs(x=a,expr); subs({x=a,y=b,….},expr); chức năng: thay x a, y b, biểu thức expr > eqs:={2*x-3*y=3,12*x+5*y=13}; > sols:=solve(eqs,{x,y}); > subs(sols,eqs); Nếu ta thu đẳng thức lời giải - P2: dùng lệnh simplify, eval cách dung trên, cấu trúc simplify(expr,{x=a,y=b, }); eval(expr,{x=a,y=b, }); >eq:=x^3-x+2=0; >sols:=solve(eq,{x}); Rõ ràng phương trình có nghiệm, nên ta phải kiểm tra nghiệm >simplify(simplify(eq,sols[1])); simplify(simplify(eq,sols[2])); simplify(simplify(eq,sols[3])); >simplify(eval(eq,sols[1])); simplify(eval(eq,sols[2])); simplify(eval(eq,sols[3])); -P3: lệnh assign cấu trúc: assign(A=B); chức năng: gán A B ... TRỢ CHO VIỆC GIẢI BÀI TẬP ĐẠI SỐ TUYẾN TÍNH Maple có nhiều thư viện chun biệt cho lĩnh vực toán học (được gọi Package), phần tìm hiểu rõ thư viện Maple dùng để giải tập đại số tuyến tính (package... lệnh det mà khơng phải định thêm IV GIẢI BÀI TẬP ĐẠI SỐ TUYẾN TÍNH BẰNG MAPLE Một số phép biến đổi ma trận 1.1 Phép biến đổi dòng - Nhân hàng i ma trận A với số x RowOperation(A,i,x); - Hoán vị... Maple dùng để giải tập đại số tuyến tính (package “linalg”); thư viên tính tốn đại số tuyến tính (linear algebra) Và sau số hàm dùng gói “linalg”: Hàm lệnh with nạp thư viên linalg, kể từ ta

Ngày đăng: 26/02/2023, 21:12

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan