Kiểm tra tính lũy linh của một ma trận vuông Xét bài toán kiểm tra một ma trận vuông có phải là một ma trận lũy linh hay không?. Trước hết ta dùng các hàm của Maple tạo một ma trận với
Trang 1KHAI THÁC PHẦN MỀM MAPLE TRONG DẠY HỌC ĐẠI SỐ TUYẾN TÍNH
ThS Trịnh Thanh Hải
ĐHSP Thái Nguyên
1 Dẫn nhập
Trong phạm vi bài viết này, chúng tôi không có tham vọng trình bày các khả năng ứng dụng của phần mềm Maple mà chỉ giới thiệu một ví dụ nhỏ
về việc sử dụng Maple trong dạy học đại số tuyến tính
2 Tính lũy thừa của ma trận vuông
Thuật toán: (Ứng dụng định lí Hamiltơn - Cayley):“Giả sử A là ma trận vuông và P ( )A thỏa mãn: n n n 1
P ( ) ( 1) p p p
là
đa thức đặc trưng của A Khi đó, P (A)A = 0 “ Vậy mọi đa thức Q() chia hết cho P ( )n thì ta cũng có Q(A) = 0 Đặc biệt:
n Q( ) S( ).P ( ) R( ) Q(A) R(A)
Chương trình được thiết kế nhằm thực hiện tuần tự các nội dung:
- Tính đa thức đặc trưng của A
- Tìm dư khi chia x n cho đa thức đặc trưng của A (khi đó đa thức dư sẽ
có bậc nhỏ hơn cấp của ma trận một đơn vị)
- Tính An theo đa thức dư
Mã chương trình:
[> restart; with(LinearAlgebra):
Luythua:=proc(A, n)
local p, r, f, x;
p:=CharacteristicPolynomial(A, x); r:=rem(x^n, p, x); f := unapply(r, x); f(A); end:
Minh hoạ việc sử dụng chương trình (thực hiện chương trình với các
tham số):
[> with(LinearAlgebra):
[> A:=<<(sqrt(3)/2) + 1, 1/2>|<-5/2, (sqrt(3)/2-1)>>;# Khai báo ma trận A
Trang 23 5 1
A :
1
[> Luythua(A, 2002); # Thực hiện thủ tục tính luỹ thừa với số mũ là 2002
3
3 1
3
2 2
Ta có thể mở rộng cho bất kì một đa thức bậc n với ẩn là ma trận A,
bằng cách thay r:=rem(x^n, p, x) bằng r:=rem( f(x) , p, x)
3 Kiểm tra tính lũy linh của một ma trận vuông
Xét bài toán kiểm tra một ma trận vuông có phải là một ma trận lũy linh hay không? Nếu ma trận đó là ma trận lũy linh thì chỉ ra bậc của ma trận lũy linh đó (Xét đến ma trận lũy linh bậc 100000000)
Thuật toán:
- Tìm tất cả các giá trị riêng của ma trận
- Nếu tất cả các giá trị riêng của ma trận đều bằng 0 thì ma trận là lũy linh, ngược lại ma trận là không lũy linh
- Nếu ma trận là lũy linh thì ta tìm bậc lũy linh:
+ Tính lũy thừa ma trận (số lũy thừa lặp từ 2 đến 100000000)
+ Lập ma trận không cấp bằng với ma trận đã cho
+ Nếu tồn tại chỉ số i sao cho lũy thừa bậc i thì ma trận đã cho bằng ma trận không Lấy chỉ số i đó ta được bậc lũy linh của ma trận đã cho
Mã chương trình:
[> restart;with(linalg): with(LinearAlgebra):
LLkhong:=proc(A)
local i, M, p, k, L, u, J, Q, P;
p:=CharacteristicPolynomial(A, x); k:=solve(p=0,{x}); L:={k}; u:=nops(L);
M:=Matrix(1 rowdim(A), 1 coldim(A), shape=zero);
if equal(M, A)=true then print(‘ Trường hợp tầm thường ‘);
else if u=1 and L[1]={x=0} then
for i from 2 to 100000000 do if equal(M, A^i)=true then
print(‘ Ma trận đã cho là ma trận lũy linh có bậc là ‘, i); break; fi; od;
Trang 3else print(‘ Ma trận đã cho không phải là ma trận lũy linh ‘); fi; fi; end:
Minh hoạ việc sử dụng chương trình
[> with(LinearAlgebra): A:=<<0,-1,-2>|<-2,0,0>|<1,0,0>>;# Khai báo ma trận
:=
0 -2 1
[> LLkhong(A);# Thực hiện chương trình con#
Ma trận đã cho là ma trận lũy linh có bậc là, 3
4.Kiểm tra tính giao hoán trong phép nhân các ma trận
Mã chương trình:
[> with(linalg):
[>GiaohoanK:=proc(A,B)
local C, D, n1, n2, m1, m2; n1:=rowdim(A); m1:=coldim(B);
m2:=rowdim(B); n2:=coldim(A);
if n1- n2 <> 0 or m1- m2 <> 0 or n1-m1 <> 0 then print(‘ Nhap lai cac ma tran ‘) else C:=multiply(A, B); D:=multiply(B, A);
if equal(C, D)=true then print('true') else print('false'); fi; fi; end:
Minh hoạ việc sử dụng chương trình
[> A:=matrix(3,3,[2,0,0,0,3,0,0,0,3]);
:=
2 0 0
0 3 0
0 0 3
[>B:=matrix(3,3,[0,0,0,0,0,0,0,1,0]);
:=
0 0 0
0 0 0
0 1 0 [> GiaohoanK(A,B);
true
5 Kiểm tra tính chéo hóa được của một ma trận vuông bất kỳ và đưa ma trận đó về dạng ma trận chéo (nếu ma trận đó chéo hóa được)
Mã chương trình:
[> CheohoaK:=proc(A)
local B;
B := diag(eigenvalues(A)); if issimilar(A, B)= true then print(' true ');
Trang 4print(‘ Dạng chéo của ma trận là ‘); print(B); else print(' false '); fi; end:
Minh hoạ việc sử dụng chương trình
[> with(linalg,matrix,issimilar,eigenvalues,diag):
[> A := matrix(4,4,[1,0,0,0,1,-2,3,-2,0,1,1,-1,-1,-2,0,1]);
:=
A
1 -2 3 -2
0 1 1 -1 -1 -2 0 1 [> CheohoaK(A);
true
Dạng chéo của ma trận là
0 0 3
2
1
2
1
2 13
6 Tính định thức của ma trận min(i, j) ni,j 1
.
Trước hết ta dùng các hàm của Maple tạo một ma trận với cấp xác định thỏa mãn điều kiện bài toán sau đó tính định thức của ma trận đó Dựa trên
kết quả để suy luận sau đó tổng quát hóa cho ma trận có cấp n bất kì
Mã chương trình:
[> with(linalg):
[> n:=5: A:=array(1 n,1 n):
for i to n do
for j to n do
if i < j then A[i, j]:= i;
else A[i, j]:= j; fi; od; od; print(A);
Kết quả thực hiện thủ tục:
1 1 1 1 1
1 2 2 2 2
1 2 3 3 3
1 2 3 4 4
1 2 3 4 5
Trang 5Ta thấy kết quả của định thức bằng 1 Ta xét thêm ma trận cấp cao hơn (cấp 10) bằng cách thay n:=10 vào đầu các câu lệnh trên Kết quả ta được một
ma trận cũng có định thức bằng 1 Đến đây nảy sinh vấn đề: Vậy liệu đối với
một ma trận có dạng như vậy với cấp bất kỳ thì kết quả trên còn đúng không ?
Nếu điều đó đúng thì chắc chắn ma trận A sẽ phân tích được thành hai hay nhiều ma trận có định thức đều bằng 1 Để tìm hiểu, ta thực hiện các lệnh sau:
[> A1 := LUdecomp(A, L='A2',U='u'):
[> evalm(A1);
1 1 1 1 1
0 1 1 1 1
0 0 1 1 1
0 0 0 1 1
0 0 0 0 1
[> evalm(A2);
1 0 0 0 0
1 1 0 0 0
1 1 1 0 0
1 1 1 1 0
1 1 1 1 1 Với lệnh trên ta thấy rõ ràng là ma trận A là tích của hai ma trận A1 và A2, trong đó các ma trận A1 (ma trận tam giác trên) và A2 (ma trận tam giác dưới) đều là các ma trận có định thức bằng 1 Bằng việc thay đổi các bậc của
A, ta thấy rằng kết quả trên vẫn đúng Do vậy, ta nhân hai ma trận A1, A2 cấp
n và thu được kết quả là ma trận A Như vậy, bài toán đã giải quyết xong.
7 Xét tính khả ngịch của một ma trận
Ta thấy ma trận đơn vị có các phần tử trên đường chéo chính bằng 1, còn các phần tử khác bằng 0 Rõ ràng đây là một ma trận khả nghịch Vấn đề đặt ra là liệu có mối quan hệ nào giữa các phần tử trên đường chéo chính với các phần tử còn lại trong một ma trận vuông sao cho ma trận đó là khả nghịch không?
Ta xây dựng chương trình bao gồm các nhiệm vụ:
Trang 6- Tính tổng các trị tuyệt đối của các phần tử nằm ngoài đường chéo.
- Tính giá trị nhỏ nhất về trị tuyệt đối của các phần tử trên đường chéo
- Xét tính khả nghịch của ma trận đó
Mã chương trình:
[> with(linalg):
[> Chuan:=proc(A)
local i, j, M, N, K;
if rowdim(A) <> coldim(A) then print(‘ Nhap ma tran vuong ‘);
else M:=0; K:=0; N:=abs(A[1, 1]);
for i to rowdim(A) do
if N > abs(A[i, i]) then N:=abs(A[i, i]); fi; K:=K + abs(A[i, i]);
for j to rowdim(A) do M:= M +abs(A[i, j]); od; od;
print(‘ Phần tử trên đường chéo chính có trị tuyệt đối bé nhất là ‘, N);
print(‘ Tổng trị tuyệt đối của các phần tử ngoài đường chéo chính là ‘, M-K);
print(‘ Định thức của ma trận A là ‘, det(A)); fi; end:
Minh hoạ việc sử dụng chương trình
[> A:=matrix(2,2,[-4,-1,0,2]);
:=
-4 -1
[> Chuan(A);
Phần tử trên đường chéo chính có trị tuyệt đối bé nhất là , 2.
Tổng trị tuyệt đối của các phần tử ngoài đường chéo chính là , 1.
Định thức của ma trận A là , -8.
Ta thấy ma trận trên khả nghịch, có ij
i j
a
=1, min( a )ii =2
Có sự vượt trội về trị tuyệt đối của các phần tử nằm trên đường chéo chính Ta tiếp tục thử với các ma trận khác:
[> A:=matrix(4,4,[6,-1,0,1,0,7,1,-1,0,-1,-9,0,0,0,0,7]);
:=
A
6 -1 0 1
0 7 1 -1
0 -1 -9 0
0 0 0 7
[> Chuan(A);
Phần tử trên đường chéo chính có trị tuyệt đối bé nhất là , 6.
Tổng trị tuyệt đối của các phần tử ngoài đường chéo chính là , 5.
Định thức của ma trận A là , -2604.
Trang 7Kết quả trên cho thấy nếu các phần tử trên đường chéo chính có sự vượt trội về trị tuyệt đối so với các phần tử nằm ngoài đường chéo chính thì định thức của ma trận đó khác không Ta tiếp tục lập các ma trận thỏa mãn nhận xét trên và xem định thức của nó có khác không không ?
[> A:=matrix(4,4,[-16,-1,0,1,0,12,1,-1,0,-1,-19,0,-2,1,3,17]):
Chuan(A);
Phần tử trên đường chéo chính có trị tuyệt đối bé nhất là , 12.
Tổng trị tuyệt đối của các phần tử ngoài đường chéo chính là , 11.
Định thức của ma trận A là, 61584.
Tương tự ta thấy rằng các ma trận thỏa mãn nhận xét đều có định thức khác
không Từ đó ta cơ sở để đi đến một dự đoán là: " Một ma trận vuông cấp n
A=(aij) thỏa mãn min( a )ii > ij
i j
a
thì ma trận đó khả nghịch ".Đây là cách
phát biểu khác của định lí Hađamard
8 Đưa biểu thức toạ độ của dạng toàn phương về dạng chính tắc
(Theo phương pháp Lagrange)
Mã chương trình:
[> restart;with(linalg):
sqsum:=proc(f::quadratic)
local i,l,n,x,J,S,K,F,kk;
if ldegree(f)<>2 then error "f is not quadratic form" end if;
S:=f;K:=0; indets(f): x:=convert(%,list): n:=nops(x):
while S<>0 do
while has(S,{seq(x[i]^2,i=1 n)}) do
for i to n do
if has(S,x[i]^2) then K:=K+diff(S,x[i])^2/4/coeff(S,x[i]^2);
S:=expand(Q-K); end if; end do; end do;
if S<>0 then if type(S,`+`) then op(1,S) else S; fi;
indets(%);
l := [coeff(coeff(%%,%[1]),%[2]),%[1],%[2]];
K:=K+(diff(S,l[2])+diff(S,l[3]))^2/(4*l[1])-(diff(S,l[2])-diff(S,l[3]))^2/(4*l[1]);
S:=expand(f-K); end if; end do; K:=map(simplify,K);
RETURN(K);end:
Minh hoạ sử dụng chương trình
Trang 8Ví dụ 1: [> Q:=x1^2 + 4*x2^2+ x3^2+ 4*x1*x2 + 2*x1*x3 + 2*x2*x3;
:=
Q x124 x22 x32 4 x1 x2 2 x1 x3 2 x2 x3
[> sqsum(Q);
(x1 2 x2 x3 )2 (x3 x2 )2
2
(x3 x2 )2
2
Ví dụ 2: [> Q:=x*y+y*z+x*z;
:=
Q x y y z x z
[> sqsum(Q);
(x 2 z y )2
4
( x y)2
9 Kết luận
Maple là phần mềm có một môi trường tính toán khá phong phú, hỗ trợ hầu hết các lĩnh vực của toán học như: Giải tích số, đồ thị, đại số hình thức
do đó ta dễ dàng tính được các giá trị gần đúng, rút gọn biểu thức, giải phương trình, bất phương trình, hệ phương trình, tính giới hạn, đạo hàm, tích phân của hàm số, vẽ đồ thị, tính diện tích, thể tích, biến đổi ma trận, khai triển các chuỗi, tính toán thống kê, xử lý số liệu, số phức, phương trình vi phân, phương trình đạo hàm riêng và lập trình giải các bài toán với cấu trúc chương trình đơn giản Ngoài ra, với phần mềm này ta dễ dàng biên soạn các sách giáo khoa điện tử với chức năng Hyperlink tạo các siêu văn bản rất đơn giản mà không cần đến sự hỗ trợ của bất kỳ một phần mềm nào khác (chẳng hạn PageText, Word, FrontPage )
Với các chức năng trên, Maple là công cụ đắc lực hỗ trợ cho những người làm toán
Tài liệu tham khảo
1 Hướng dẫn thực hành tính toán trên chương trình Maple V.
Phạm Huy Điển, Đinh Thế Lục, Tạ Duy Phượng
NXB Giáo dục 1998
2 Tính toán, lập trình và giảng dạy toán học trên Maple
Phạm Huy Điển chủ biên
NXB KH&KT 2002