Kết quả trả về là một tập hợp gồm các vectơ dòng của A.. Kết quả trả về là một tập hợp gồm các vectơ cột của A.. Kết quả trả về là một tập hợp gồm các vectơ dòng khác 0 trong dạng bậc th
Trang 1ĐẠI SỐ TUYẾN TÍNH
với MAPLE
Trịnh Thanh Đèo
Khoa Toán - Tin học,Trường Đại học Khoa học Tự nhiên Tp.HCM,
227 Nguyễn Văn Cừ, Quận 5, Tp Hồ Chí Minh
e-mail: ttdeo@math.hcmus.edu.vn; ttdeo@yahoo.com Website: www.math.hcmus.edu.vn/∼ttdeo/DSTT/
Trang 21 Mở đầu 2
2 Gói lệnh về đại số tuyến tính 3
5 Các lệnh thực hành tính toán 6
Trang 31 Mở đầu
Maple là chương trình tính toán được sử dụng rộng rãi ở cáctrường đại học trên thế giới Đây là một chương trình tính toánvạn năng khá đồ sộ, có khả năng tính toán trên các ký hiệuhình thức Việc cài đặt và sử dụng chương trình cũng hoàntoàn dễ dàng như bất kỳ chương trình ứng dụng nào khác Nếubiết sử dụng Maple một cách thành thạo, người dùng có thểtiếp cận dễ dàng với mọi chương trình tính toán khác (nhưMathematica, Mathlab, ) Với các hướng dẫn chi tiết, giáotrình giúp sinh viên có thể tự mình tiến hành các công việcmột cách nhẹ nhàng, không cần chuẩn bị gì đặc biệt về kiếnthức tin học, ngoài một vài quy ước quen biết như: phép nhânbiểu thị bằng dấu *, phép chia bằng dấu /, phép lũy thừa bằngdấu ^,
Ta bắt đầu việc tính toán thực hành bằng cách đưa vào
một cụm xử lý (bằng cách nhấn chuột vào biểu tượng `[>' trên
thanh lệnh của giao diện làm việc) Một dấu nhắc lệnh `[>'sẽ hiện ra chờ ta đưa lệnh vào thực hiện Các lệnh được kếtthúc bằng dấu hai chấm (:) hoặc dấu chấm phẩy (; ), và lệnhđược thực hiện bằng cách nhấn phím ENTER khi con trỏ đượcđặt ở cuối dòng lệnh Kết quả tính toán sẽ hiện thị ngay bêndưới dòng lệnh nếu dấu kết thúc lệnh là dấu chấm phẩy (;), vàkết quả được thực hiện nhưng không hiển thị nếu dấu kết thúclệnh là dấu hai chấm (:) - điều này có lợi khi ta không muốnmất thì giờ để cho máy hiển thị những cái không cần thiết Đểgán giá trị cho 1 biến nào đó ta sử dụng dấu `:=' Để đặt chúthích cho một dòng lệnh, ta dùng dấu `#' Khi đó, những ký tựnằm sau dấu `#' sẽ được Maple bỏ qua trong qua trình thực thi
Trang 42 Gói lệnh về đại số tuyến tính
Để thực hành tính toán các vấn đề liên quan đến đại số tuyếntính, MAPLE cung cấp hai gói lệnh (packages) là linalg (góilệnh cơ bản) và LinearAlgebra (gói lệnh nâng cao) Khả năngtính toán của các gói lệnh này được mô tả trong cửa sổ Helpcủa Maple Ta có thể xem nhanh bằng cách gõ các dòng lệnhtương ứng sau đây:
Trang 53 Khai báo ma trận
Trong Maple, một ma trận là một danh sách các danh sách,
mỗi danh sách là một dòng của ma trận Một ma trận A loại
Trang 74 Khai báo vectơ
Trong Maple, một vectơ là một danh sách các số Một vectơ
v = (x1, x2, , xn)có thể được khai báo bởi một trong các lệnhsau:
5 Các lệnh thực hành tính toán
• diag(a1,a2, ,an): Tạo ma trận đường chéo với các
phần tử trên đường chéo lần lượt là a1, a2, , an
• row(A, i): Vectơ dòng thứ i của ma trận A.
• row(A, i k): Các vectơ dòng thứ i đến thứ k của ma trận A.
• col(A, i): Vectơ cột thứ i của ma trận A.
Trang 8• col(A, i k): Các vectơ cột thứ i đến thứ k của ma trận A.
• rowdim(A) và coldim(A): Xác định số dòng và số cột
của ma trận A.
• vectdim(v): Xác định chiều của vectơ v.
• equal(A, B): Kiểm tra hai ma trận A và B có bằng nhau
không?
• transpose(A): Xác định ma trận chuyển vị của ma trận A.
• scalarmul(A, r) hoặc evalm(r*A): Nhân ma trận A với một số (hoặc một biểu thức) r.
• trace(A): Xác định vết của ma trận A.
• iszero(A): Kiểm tra ma trận A có là ma trận không hay
không?
• randmatrix(m, n): Tạo một ma trận ngẫu nhiên loại
m × n
• randvector(n): Tạo một vectơ ngẫu nhiên n chiều.
• rank(A) : Xác định hạng của ma trận A.
• multiply(A,B, ) hoặc evalm(A&*B&* ): Tích ma
trận A.B
• matadd(A,B) hoặc evalm(A+B): Tính tổng ma trận A + B.
• matadd(A,B,r,s) hoặc evalm(r*A+s*B): Tính tổng ma
trận rA + sB (với r, s là các số thực hoặc các biến).
• swaprow(A,i,j): Hoán vị hai dòng i và j của ma trận A.
Trang 9• swapcol(A,i,j): Hoán vị hai cột i và j của ma trận A.
• mulrow(A, i, m): Nhân dòng thứ i của ma trận A với một số m.
• mulcol(A, j, m): Nhân cột thứ j của ma trận A với một số m.
• addrow(A,j,i,m): Thay dòng i của ma trận A bởi dòng
i cộng với m lần dòng j của A.
• addcol(A,j,i,m): Thay cột i của ma trận A bởi cột i cộng với m lần cột j của A.
• pivot(A, i, j): Nếu phần tử ở vị trí (i, j) của ma trận
A là khác 0 thì lệnh này dùng để đưa tất cả các vị trí còn
lại ở cột thứ j của A về 0 (ngoại trừ vị trí (i, j)) bằng cách lấy các dòng cộng k lần dòng i.
• gausselim(A): Đưa ma trận A về dạng bậc thang.
• gaussjord(A) hoặc rref(A): Đưa ma trận A về ma trận
• inverse(A): Xác định ma trận nghịch đảo của ma trận A.
• augment(A, B, ) hoặc concat(A, B, ): Nối hai
hay nhiều ma trận có cùng số dòng (A, B, ) thành một
ma trận mới dạng (A|B| ).
Trang 10• stackmatrix(A, B, ): Nối hai hay nhiều ma trận
có cùng số cột (A, B, ) thành một ma trận mới dạng
• evalm(A^k): Xác định lũy thừa ma trận Ak
• linsolve(A, b) hoặc linsolve(A, B) : Giải hệ phương
trình tuyến tính dạng AX = b với A là một ma trận loại
m × n , b là một vectơ cột m chiều, B là một ma trận loại
m × k
• geneqns(A, x) geneqns(A, x,b): Tạo hệ phương trình
với ẩn là x, ma trận các hệ số là A và cột các hệ số tự do là b (nếu b không ghi thì nó được ngầm hiểu là 0)
• genmatrix(eqns, vars) hoặc
genmatrix(eqns,vars,b): Tạo ma trận các hệ số củahệ phương trình tuyến tính eqns với các ẩn là vars.Thông số tùy chọn b để tạo vectơ cột các hệ số tự do
• solve(eqns, vars): Giải một phương trình hoặc mộthệ phương trình, hệ bất phương trình eqns với các ẩn làvars Nếu có nhiều phương trình (bất phương trình) thìeqns là {eqn1,eqn2, }; nếu có nhiều biến thì varslà {var1,var2, };
• det(A): Tìm định thức của ma trận A.
Trang 11• minor(A, r, c): Xác định ma trận có được từ ma trận
A bằng cách xóa dòng thứ r và cột thứ c của A.
• adj(A) hoặc adjoint(A): Xác định ma trận phó của ma
trận A
• u+v: Cộng hai vectơ u và v.
• r*u+s*v: Tính ru + sv, với u, v là 2 vectơ, r, s là 2 số
thực (hoặc biến)
• dotprod(u, v): Tính tích vô hướng của hai vectơ u và v.
• crossprod(u, v): Tính tích hữu hướng của hai vectơ u và v trong không gian R3
• norm(u, 2): Tính độ dài (chuẩn) của vectơ u Đối số `2'
dùng để chỉ việc tính độ dài theo công thức căn bậc haicủa tổng bình phương các tọa độ
• normalize(u): Chuẩn hóa vectơ u Kết quả trả về là
vectơ v = 1
||u|| .u
• angle(u, v): Tính số đo góc giữa 2 vectơ u và v (dựa
theo công thức cos(u, v) = u.v
|u|.|v|)
• basis(V): Tìm cơ sở cho không gian sinh bởi các vectơ
thuộc tập hợp V Kết quả trả về là một tập hợp con của V
Trang 12• basis(A,’rowspace’): Tìm cơ sở cho không gian sinh
bởi các dòng của ma trận A Kết quả trả về là một tập hợp gồm các vectơ dòng của A.
• basis(A,’colspace’): Tìm cơ sở cho không gian sinh
bởi các cột của ma trận A Kết quả trả về là một tập hợp gồm các vectơ cột của A.
• rowspan(A) hoặc rowspan(A, ’dim’) : Tìm cơ sở cho
không gian sinh bởi các dòng của ma trận A Kết quả trả
về là một tập hợp gồm các vectơ dòng khác 0 trong dạng
bậc thang của A Thông số `dim' là thông số tùy chọn
dùng để xác định số chiều của không gian dòng
• rowspace(A) hoặc rowspace(A, ’dim’): Tìm cơ sở cho
không gian sinh bởi các dòng của ma trận A Kết quả trả
về là một tập hợp gồm các vectơ dòng khác 0 trong dạng
rút gọn của A Thông số `dim' là thông số tùy chọn dùng
để xác định số chiều của không gian dòng
• colspan(A) hoặc colspan(A, ’dim’): Tìm cơ sở cho
không gian sinh bởi các cột của ma trận A Kết quả trả
về là một tập hợp gồm các vectơ dòng khác 0 trong dạng
bậc thang của A> Thông số `dim' là thông số tùy chọndùng để xác định số chiều của không gian cột
• colspace(A) hoặc colspace(A, ’dim’): Tìm cơ sở cho
không gian sinh bởi các cột của ma trận A Kết quả trả
về là một tập hợp gồm các vectơ dòng khác 0 trong dạng
rút gọn của A> Thông số `dim' là thông số tùy chọndùng để xác định số chiều của không gian cột
• nullspace(A) hoặc nullspace(A, ’nulldim’): Tìm
cơ sở cho không gian nghiệm của hệ phương trình tuyến
tính dạng AX = 0 (với A là một ma trận) Kết quả trả
Trang 13về là tập hợp tất cả các vectơ nghiệm căn bản của hệ
AX = 0 Thông số `nulldim' là thông số tùy chọn dùngđể xác định số chiều của không gian nghiệm
• sumbasis(S1, S2, ): Tìm cơ sở cho không gian
tổng của các không gian sinh bởi các tập hợp S1, S2,
.
• GramSchmidt([v1, v2, ,vn]) hoặc
GramSchmidt({v1, v2, ,vn}): Tìm cơ sở trực giao
từ cơ sở gồm các vectơ v1, v2, , vnbằng thuật toán Schmidt
Gram-• GramSchmidt([v1, v2, ,vn],’normalized’) hoặcGramSchmidt({v1, v2, ,vn}),’normalized’: Tìm
cơ sở trực chuẩn từ cơ sở gồm các vectơ v1, v2, , vnbằngthuật toán GramSchmidt
• kernel(A) hoặc kernel(A, ’nulldim’): Tìm cơ sở chokhông gian hạt nhân của ánh xạ tuyến tính xác định bởi
ma trận A Kết quả trả về là tập hợp tất cả các vectơ
cơ sở của không gian hạt nhân Thông số `nulldim' làthông số tùy chọn dùng để xác định số chiều của khônggian hạt nhân (Lệnh kernel thực hiện hoàn toàn giốngnhư lệnh nullspace)
• charmat(A, x): Xác định ma trận đặc trưng của ma trận
A , đó là ma trận dạng (xI − A).
• charpoly(A, x): Xác định đa thức đặc trưng của ma
trận A, đó là đa thức dạng p(x) = det(xI − A).
• eigenvalues(A) hoặc eigenvals(A): Xác định các trị
riêng của ma trận A.
Trang 14• eigenvectors(A) hoặc eigenvects(A): Xác định các
vectơ riêng (tương ứng với từng trị riêng) của ma trận A.
• issimilar(A, B) hoặc issimilar(A, B, ’P’): Kiểm
tra hai ma trận A và B có đồng dạng nhau hay không Thông số tùy chọn ’P’ dùng để xác định ma trận P sao cho A = P−1BP
• minpoly(A, x): Xác định đa thức tối tiểu của ma trận
A Đa thức tối tiểu của ma trận A là đa thức m(x) có bậc nhỏ nhất sao cho m(A) = 0.
• definite(A, ’positive_def’): Kiểm tra ma trận A
có xác định dương hay không?
• definite(A, ’positive_semidef’): Kiểm tra ma trận
A có bán xác định dương hay không?
• definite(A, ’negative_def’): Kiểm tra ma trận A
có xác định âm hay không?
• definite(A, ’negative_semidef’): Kiểm tra ma trận
A có bán xác định âm hay không?
6 Các ví dụ
Ví dụ 1.
[> with(linalg): #Gọi gói lệnh Đại số tuyến tính
[> A:=matrix(2,3,[1,2,3,4,5,6]); #Tạo ma trận A
1 2 3
4 5 6
Trang 15
[> rank(A); #Tìm hạng của A
2[> gausselim(A); #Tìm dạng bậc thang của A
Trang 16[> delcols(A,3 3); #Xóa cột 3 của A
Ghi chú Để gọi lại một kết quả liền trước một dòng lệnh
nào đó, ta có thể dùng dấu %, chẳng hạn trong ví dụ trên, dấu
% được hiểu là gọi ma trận
Ví dụ 2 Giải hệ phương trình
2x + 3y − 4z = 2 3x + 2y − 3z = 5 5x − y + 2z = 1
Trang 20[> adj(A); #Xác định ma trận phó của A
Trang 21[> basis(A,’rowspace’); #Xác định cơ sở cho không gian dòng của A
Trang 22Ví dụ 7.
[> with(linalg):
[> A := matrix(3,3, [1,2,3,4,5,6,7,8,9]); #Tạo ma trận A
Trang 24Ghi chú.
• Lệnh factor(%) dùng để đưa đa thức có được từ kết quảliền trước lệnh này thành tích
• Kết quả trả về của lệnh eigenvectors(A) là các danh
sách có dạng [lambda, k, {v1, v2, }], trong đó lambda là giá trị riêng, k là số bội của trị riêng lambda, {v1, v2, } là tập hợp các vectơ cơ sở của không gian riêng E(lambda).
Ví dụ 9.
[> with(linalg):
[> A := matrix(3, 3, [1,2,3,4,5,6,7,8,9]); #Tạo ma trận A
Trang 25[> print(P); #In ma trận P sao cho A=P−1BP