Tải bản đầy đủ (.pdf) (25 trang)

thực hành tính toán đại số tuyến tính với maple

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 (142.72 KB, 25 trang )

Thực hành tính toán
ĐẠ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: ;
Website: www.math.hcmus.edu.vn/∼ttdeo/DSTT/


Mục lục
1 Mở đầu

2

2 Gói lệnh về đại số tuyến tính

3

3 Khai báo ma trận

4

4 Khai báo vectơ

6

5 Các lệnh thực hành tính toán

6


6 Các ví dụ

13


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 2

1 Mở đầu
Maple là chương trình tính toán được sử dụng rộng rãi ở các
trường đại học trên thế giới. Đây là một chương trình tính toán
vạn năng khá đồ sộ, có khả năng tính toán trên các ký hiệu
hình thức. Việc cài đặt và sử dụng chương trình cũng hoàn
toàn dễ dàng như bất kỳ chương trình ứng dụng nào khác. Nếu
biế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áo
trình giúp sinh viên có thể tự mình tiến hành các công việc
một cách nhẹ nhàng, không cần chuẩn bò gì đặc biệt về kiến
thức tin học, ngoài một vài quy ước quen biết như: phép nhân
biểu thò bằng dấu *, phép chia bằng dấu /, phép lũy thừa bằng
dấ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ết
thú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ên
dướ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úc

lệnh là dấu hai chấm (:) - điều này có lợi khi ta không muốn
mấ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.


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 3

2 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ến
tính, MAPLE cung cấp hai gói lệnh (packages) là linalg (gói
lệnh cơ bản) và LinearAlgebra (gói lệnh nâng cao). Khả năng
tính toán của các gói lệnh này được mô tả trong cửa sổ Help
của Maple. Ta có thể xem nhanh bằng cách gõ các dòng lệnh
tương ứng sau đây:
[> ?linalg;

[> ?LinearAlgebra;
Để gọi gói lệnh linalg hoặc LinearAlgebra, ta gõ dòng lệnh
[> with(linalg):
hoặc
[> with(LinearAlgebra):
Trong tài liệu này, chúng tôi sẽ trình bày các lệnh có trong gói
lệnh linalg. Độc giả có thể tự tham khảo các lệnh trong gói
lệnh LinearAlgebra sau khi đã làm quen với Maple thông qua
gói lệnh linalg.


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 4


3 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
m×n


a11 a12 . . . a1n
 a21 a22 . . . a2n 

A=
 ................... 
am1 am2 . . . amn
được tạo bởi các lệnh sau đây:
[> A:=array(1..m,1..n,list_of_rows);
hoặc
[> A:=array(list_of_rows);
hoặc
[> A:=matrix(list_of_rows);
Trong đó, list_of_rows là một danh sách dạng
[[a11, a12, ..., a1n], [a21, a22, ..., a2n], ..., [am1, am2, ..., amn]]


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 5
Ví dụ 1.
[> with(linalg): #Gọi gói lệnh đại số tuyến tính
[> A:=array(1..2,1..3,[[1,2,1],[2,3,5]]);
#Tạo ma trận A

A :=


1 2 1
2 3 5

[> B:=array([[1,2,3,4],[3,4,5,6],[1,2,3,1]]);
#Tạo ma trận B



1 2 3 4
B :=  3 4 5 6 
1 2 3 1

Một ma trận A loại m × n cũng có thể được khai báo bởi
lệnh
[> A:=matrix(m,n,list_of_entries);
Trong đó, list_of_entries là một danh sách dạng
[a11, a12, ..., a1n, a21, a22, ..., a2n, ..., am1, am2, ..., amn]
Ví dụ 2.
[> with(linalg):


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 6
[> A:=matrix(2,3,[1,2,3,4,5,6]);
1 2 3
4 5 6

4 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ệnh

sau:
[>
[>
[>
[>
[>

v:=array(1..n,[x1,x2, ..., xn]);
v:=array([x1,x2, ..., xn]);
v:=vector(n, [x1,x2, ..., xn]);
v:=vector([x1,x2, ..., xn]);
v:=[x1,x2, ..., xn];

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.


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 7
• 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.


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 8
• 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
rút gọn.
• delrows(A, r..s): Xóa các dòng của ma trận A từ dòng
thứ r đến dòng thứ s.
• delcols(A, r..s): Xóa các cột của ma trận A từ cột
thứ r đến cột thứ s.
• 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|...).


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 9
• 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


A
 B 
.

..
.
• submatrix(A, i..j,r..s): Ma trận con của ma trận A
gồm các dòng từ dòng thứ i đến dòng thứ j và các cột
từ cột thứ r đến cột thứ s.
• 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ủa
hệ 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ột
hệ 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ì vars
là {var1,var2, ...};
• det(A): Tìm đònh thức của ma trận A.


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 10
• 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 hai
củ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 .


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 11
• 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ọn
dù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ọn
dù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ả


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 12
về 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 , ..., vn bằng thuật toán GramSchmidt.
• GramSchmidt([v1, v2, ...,vn],’normalized’) hoặc
GramSchmidt({v1, v2, ...,vn}),’normalized’: Tìm
cơ sở trực chuẩn từ cơ sở gồm các vectơ v1 , v2, ..., vn bằng
thuật toán GramSchmidt.
• kernel(A) hoặc kernel(A, ’nulldim’): Tìm cơ sở cho
khô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ông
gian hạt nhân (Lệnh kernel thực hiện hoàn toàn giống
như 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.


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 13
• 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 −1 BP .

• 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


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 14
[> rank(A); #Tìm hạng của A
2
[> gausselim(A); #Tìm dạng bậc thang của A
1
2
3
0 −3 −6
[> swaprow(A,1,2); #Hoán vò dòng 1 và dòng 2 của A
4 5 6

1 2 3
[> B:=matrix(2,3,[1,-1,2,3,1,-2]); #Tạo ma trận B
4 5 6
1 2 3
[> matadd(A, B, 3, -4); #Tính 3A-4B
−1 10 1
0 11 26
[> concat(A, B); #Nối A với B thành ma trận mở rộng
(A|B)

1 2 3 1 −1
2
4 5 6 3
1 −2


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 15
[> delcols(A,3..3); #Xóa cột 3 của A
1 2
4 5

[> evalm(%^3); #Tính lũy thừa bậc 3 của ma trận vừa
được thực thi

57 78
156 213

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

1 2
4 5

.

Tương tự, nếu gọi một kết quả trước một dòng lệnh đang thực
hiện bao nhiêu bước thì ta sẽ dùng bấy nhiêu dấu % (trong các
phiên bản cũ của Maple, dấu % được thay bởi dấu ").
Ví dụ 2. Giải hệ phương trình

 2x + 3y − 4z = 2
3x + 2y − 3z = 5

5x − y + 2z = 1


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 16
Cách 1.
[> solve({2*x+3*y-4*z = 2, 3*x+2*y-3*z = 5,
5*x-y+2*z = 1}, [x, y, z]);

{x = 1, y = −8, z = −6}
Cách 2.
[> with(linalg):
[> A:=matrix(3,3,[2,3,-4,3,2,-3,5,-1,2]);
#Tạo ma trận các hệ số

2
3 −4
2 −3 

A :=  3
5 −1
2


[> b:=vector([2,5,1]); #Tạo vectơ các hệ số tự do
b := [2 5

1]

[> linsolve(A,b); #Giải hệ AX=b
[1

−8

− 6]

Ví dụ 3. Tạo ma trận các hệ số và cột các hệ số tự do cho hệ
phương trình:

 2x + 3y − 4z = 2
3x + 2y − 3z = 5

5x − y + 2z = 1


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 17
[> with(linalg):
[> eqns:={2*x+3*y-4*z = 2, 3*x+2*y-3*z = 5,
5*x-y+2*z = 1};

#Tạo hệ phương trình
eqns := {2x + 3y − 4z = 2, 3x + 2y − 3z = 5, 5x − y + 2z = 1}
[> A:=genmatrix(eqns, [x, y, z], b);
#Xác đònh ma trận các hệ số

2
3 −4
2 −3 
A :=  3
5 −1
2


[> print(b); #In vectơ các hệ số tự do
[2 5

1]

Ví dụ 4. Tạo hệ phương trình dạng Ax = b với

2
3 −4
2 −3  ,
A :=  3
5 −1
2


b := [2, 5, 1],


x = [x1, x2 , x3].

[> with(linalg):
[> A:=matrix(3,3,[2,3,-4,3,2,-3,5,-1,2]);

2
3 −4
A :=  3
2 −3 
5 −1
2



Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 18
[> b:=vector([2,5,1]);
b := [2 5

1]

[> geneqns(A, [x[1], x[2], x[3]], b);
#Xác đònh hệ phương trình dạng AX=b
{2x1 + 3x2 − 4x3 = 2, 3x1 + 2x2 − 3x3 = 5, 5x1 − x2 + 2x3 = 1}
Ví dụ 5.
[> with(linalg):
[> A := matrix(3,3, [1,2,3,4,5,6,7,8,9]);
#Tạo ma trận A




1 2 3
A :=  4 5 6 
7 8 9

[> det(A); #Tính đònh thức của A
0
[> minor(A,1,3); #Xác đònh ma trận có được từ A bằng
cách xóa dòng 1 và cột 3

4 5
7 8


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 19
[> adj(A); #Xác đònh ma trận phó của A



−3
6 −3
 6 −12
6 
−3
6 −3

[> B := array(1..2,1..2, [[1,4],[0,2]]); #Tạo ma
trận B

1 4
0 2


B :=

[> det(B); #Tính đònh thức của B
2
[> adjoint(B); #Xác đònh ma trận phó của B
2 −4
0
1

Ví dụ 6.
[> with(linalg):
[> A := matrix(3,3, [1,2,3,4,5,6,7,8,9]); #Tạo ma
trận A




1 2 3
A :=  4 5 6 
7 8 9


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 20
[> basis(A,’rowspace’); #Xác đònh cơ sở cho không
gian dòng của A

[[1 2

3], [4 5


6]]

[> basis(A,’colspace’); #Xác đònh cơ sở cho không
gian cột của A

[[1 4

7], [2 5

8]]

[> rowspan(A,’dim’); #Xác đònh cơ sở cho không gian
A

dòng của

{[1 2

3], [0

−3

− 6]}

[> print(dim); #In số chiều của không gian dòng của
A

2
[> rowspace(A,’dim’); #Xác đònh cơ sở cho không gian

dòng của A

{[0

1

2], [1 0

1]}

[> nullspace(A,’r’); #Xác đònh cơ sở cho không gian
nghiệm của hệ AX=0

{[1
[> print(r); #In

−2

1]}

số chiều của không gian nghiệm

của hệ AX=0

1
[> colspan(A); #Xác

đònh cơ sở cho không gian cột

của A


{[0

−3

− 6], [1 4

7]}


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 21
Ví dụ 7.
[> with(linalg):
[> A := matrix(3,3, [1,2,3,4,5,6,7,8,9]); #Tạo ma
trận A




1 2 3
A :=  4 5 6 
7 8 9
[> kernel(A,’r’); #Xác

đònh cơ sở cho không gian

hạt nhân của ánh xạ tuyến tính xác đònh bởi ma trận A

{[1


−2

1]}

[> print(r); #In số chiều của không gian hạt nhân
1
Ví dụ 8.
[> with(linalg):
[> A := matrix(3, 3, [3, 1, 1, 2, 4, 2, 1, 1, 3]);
#Tạo ma trận A

3 1 1
A :=  2 4 2 
1 1 3


[> charmat(A,x); #Xác đònh ma trận đặc trưng của A


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 22
(theo biến x)


x − 3 −1
−1
A :=  −2 x − 4 −2 
−1
−1 x − 3



[> charpoly(A,t); #Xác đònh đa thức đặc trưng của
A (theo biến t)

p := t3 − 10t2 + 28t − 24
[> factor(%); #Phân tích đa thức vừa có thành nhân
tử

(t − 6)(−2 + t)2
[> eigenvalues(A); #Xác

đònh tất cả các trò riêng

của A

6, 2, 2
[> eigenvectors(A); #Xác đònh hệ thống gồm các trò
riêng và cơ sở của không gian riêng tương ứng

[2, 2, {[−1

1

0], [−1 0

[> minpoly(A,t); #Xác

1]}], [6, 1, {[1 2

1]}]


đònh đa thức tối tiểu của A

(theo biến t)

12 − 8t + t2
[> factor(%); #Phân tích đa thức vừa có thành nhân
tử

(−2 + t)(t − 6)


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 23
Ghi 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




1 2 3
A :=  4 5 6 
7 8 9

[> B := matrix(3, 3, [6,3,2,18,6,6,9,3,3]); #Tạo
ma trận B




6 3 2
B :=  18 6 6 
9 3 3
[> issimilar(A, B,’P’); #Kiểm
dạng hay không?

true

tra A và B có đồng


Trònh Thanh Đèo - Thực hành tính toán ĐSTT với Maple .. 24
[> print(P); #In ma trận P

sao cho A=P−1 BP




1 0 0
 −1 0 1 
−1 1 0
Ví dụ 10.
[> with(linalg):

[> A := matrix(3,3, [1,0,0,0,2,0,0,0,3]); #Tạo ma
trận A


1 0 0
A :=  0 2 0 
0 0 3


[>definite(A, ’positive_def’); #Kiểm tra A có xác
đònh dương hay không

true
[>definite(A, ’positive_semidef’); #Kiểm tra A có
nửa xác đònh dương hay không

true
[>definite(A, ’negative_def’); #Kiểm tra A có xác
đònh âm hay không

false
[>definite(A, ’negative_semidef’); #Kiểm tra A có
nửa xác đònh âm hay không

false


×