Tải bản đầy đủ (.doc) (8 trang)

KHAI THÁC PHẦN MỀM MAPLE TRONG DẠY HỌC ĐẠI SỐ TUYẾN TÍNH

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 (103.28 KB, 8 trang )

KHAI 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à PA (λ) thỏa mãn:

PA (λ) = (−1)n λn + p1λn−1 + ... + pn−1λ + pn



đa thức đặc trưng của A. Khi đó, PA (A) = 0 “. Vậy mọi đa thức Q( λ ) chia
hết

cho

Pn(λ)

thì

ta

cũng




Q(A)

=

0.

Đặc

biệt:

Q(λ) = S(λ).Pn(λ) + 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 xn 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

1



 3
+1

A :=  2
 1

 2

5 

2 
3 
− 1
2



[> Luythua(A, 2002); # Thực hiện thủ tục tính luỹ thừa với số mũ là 2002
1
 − 3
2

3
 −

2

5 3 


2 

1
+ 3
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;

2


else 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


A := -1 0 0
-2 0 0


[> 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

A :=  0
0


0
3
0

0

0
3

0
0
1

0

0
0

[>B:=matrix(3,3,[0,0,0,0,0,0,0,1,0]); 


0

B :=  0
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 ');

3


print(‘ 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]); 
1 0 0

 1 -2 3
A := 
0 1 1


-1 -2 0

0

-2
-1

1

[> CheohoaK(A); 

true
Dạng chéo của ma trận là
1

0



0




0



0
3

0

0
0
3 1
− +
2 2

0

0
0
13

0


0

3 1

2 2













13 



n

6. Tính định thức của ma trận min(i,j) i,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
[> det(A);

1
2
2
2
2

1
2
3
3
3

1
2
3
4
4

1

2
3

4


5

1

4


Ta 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

0

0


0


0


1
1
0
0
0

1
1
1
0
0

1
1
1
1
0

1

1
1

1

1

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); 

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ụ:
5


- 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
A := 

 0 2
[> 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ó

∑a
i≠ j

ij

=1, min( aii ) =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]); 

6

0
A := 
0

0

-1 0 1

7 1 -1
-1 -9 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.

6


Kế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( aii ) >

∑a
i≠ j

ij

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
7


Ví dụ 1: [> Q:=x1^2 + 4*x2^2+ x3^2+ 4*x1*x2 + 2*x1*x3 + 2*x2*x3; 

Q := x1 2 +4 x22 +x3 2 +4 x1 x2 +2 x1 x3 +2 x2 x3
[> sqsum(Q); 

( x3 +x2 ) 2 ( −x3 +x2 ) 2
( x1 +2 x2 +x3 ) −
+
2
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 ( −x + y ) 2

−z2
4
4

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 .

8




×