Sử dụng MAPLE để đưa dạng toàn phương về dạng chính tắc PHAN ĐỨC CHÂU Đại học Kinh doanh và Công nghệ Hà Nội Dạng toàn phương là một trong những khái niệm cơ bản của Toán cao cấp.. Dạng
Trang 1Sử dụng MAPLE để đưa dạng toàn phương về dạng chính tắc
PHAN ĐỨC CHÂU Đại học Kinh doanh và Công nghệ Hà Nội
Dạng toàn phương là một trong những khái niệm cơ bản của Toán cao cấp Dạng toàn phương có nhiều ứng dụng trong kỹ thuật và kinh tế như nhận dạng các đường và mặt bậc hai, đưa ra các điều kiện đủ trong các bài toán tối ưu…
Sử dụng phần mềm MAPLE giúp cho việc nghiên cứu các dạng toàn phương
dễ dàng và hiệu quả hơn
Giả sử V n là một không gian n chiều và S là một cơ sở của nó Trong cơ sở S một dạng toàn phương là biểu thức có dạng
Ax x x x a x
x
i
j i
) , (
1 ,
=
=∑
= trong đó ma trận A = (a ) là một ma trận đối xứng Nếu trong Q(x,x) chỉ chứa các số ij
hạng bình phương thì nói Q(x,x) có dạng chính tắc trong cơ sở S
Rút gọn một dạng toàn phương là tìm một cơ sở S’ trong đó Q có dạng chính tắc
Để đưa một dạng toàn về về dạng chính tắc thường dùng 3 cách: Phương pháp chéo hóa trực giao, phương pháp Jacobi và phương pháp Lagrange
Bài này nêu việc sử dụng phần mềm MAPLE để đưa Q về dạng chính tắc theo phương pháp chéo hóa trực giao
Gọi P là ma trận chuyển từ cơ sở trực chuẩn S sang cơ sở trực chuẩn S’: x = Py Trong S’ dạng toàn phương trở thành (Py)’A(Py) = y’(P’AP)y Do S và S’ là trực chuẩn nên P
là một ma trận trực giao theo nghĩa P’P = E , E là ma trận đơn vị Vậy P− 1 =P' Nếu AP
P− 1 là một ma trận đường chéo, thì Q chỉ chứa các số hạng bình phương hay Q có
dạng chính tắc trong cơ sở S’ Khi đó nói P là ma trận làm chéo hóa trực giao ma trận A
Áp dụng quá trình trực giao hóa Gram-Schmidt để tìm ma trận P
Đoạn chương trình sau trong MAPLE sẽ thực hiện việc trên Có hai thủ tục:
a) cheohoatrucgiao để chéo hóa trực giao một ma trận đối xứng bất kỳ, ngoài ra đưa
thêm một số thông tin về đa thức đặc trưng, giá trị riêng, vectơ riêng của ma trận
đó,
b) chinhtac để đưa dạng toàn phương về dạng chính tắc Trong thủ tục này có một
phần để nhận đúng ma trận A của dạng toàn phương, nếu Q đưa vào sai sẽ báo lỗi
> restart:with(linalg):with(LinearAlgebra):
Trang 2> cheohoatrucgiao:=proc(M::Matrix)
local dt,n,lambda,vt,i,G,v,gt,u:
global P,T:
n:=ColumnDimension(M):
dt:=CharacteristicPolynomial(M,lambda):
print(`Da thuc dac trung: `,factor(dt)); (gt,vt):=Eigenvectors(M): print(`Gia tri rieng: `,gt,`Cot vecto rieng : `, simplify(vt));
for i from 1 to n do v[i]:=Vector[column](col(vt,i)): od: G:=GramSchmidt([seq(v[i],i=1 n)],normalized): P:=augment(seq(G[i],i=1 n)): P:=convert(P,Matrix):
print(`Ma tran lam cheo hoa P =`,simplify(P));
T:=DiagonalMatrix(gt): print(`Ma tran cheo hoa P'AP = `,T);
end proc: > chinhtac:=proc(tp)
local n,A,i,j,Ct,Ctrg,tp1,k:
n:=nops(indets(tp)):
tp1:=tp: for i from 1 to n do tp1:=subs(x[i]=k*x[i],tp1) od:
if is(tp1=(k^2)*tp)=false then ERROR(`Dang toan phuong cho sai`) fi:
A:=Matrix(n,n):
for i from 1 to n do A[i,i]:=coeff(tp,x[i]^2):
for j from (i+1) to n do A[i,j]:=coeff(coeff(tp,x[i]),x[j])/2:
A[j,i]:=A[i,j] :
od :
od:
print(`Ma tran dang toan phuong A =`,A):
cheohoatrucgiao(A);
Ct:=add(T[i,i]*y[i]^2,i=1 n); print(`Dang chinh tac sau khi cheo hoa truc giao :`,Ct);
Ctrg:=add(sign(evalf(T[i,i]))*z[i]^2,i=1 n); print(`Dang chinh tac rut gon :`,Ctrg);
end proc: Sau khi đã viết đoạn trên, để đưa các dạng toàn phương bất kỳ về dạng chính tắc, trước hết cần nạp dạng toàn phương đang xét, tiếp theo gọi thủ tục chinhtac Dưới đây nêu một số ví dụ: > `DANG TOAN PHUONG 2 AN`;
tp:=5*x[1]^2-4*x[1]*x[2]+8*x[2]^2:
`Vi du 1: Dang toan phuong `:=tp; chinhtac(tp); tp:=-x[1]^2-x[2]^2+6*x[1]*x[2]+3:
Trang 3`Vi du 2: Dang toan phuong `:=tp; chinhtac(tp):
tp:=5*x[1]^2+5*x[2]^2+4*x[1]*x[2]-2*x[2]:
`Vidu 3: Dang toan Phuong `:=tp; chinhtac(tp):
DANG TOAN PHUONG 2 AN
Vi du 1: Dang toan phuong := 5 x12 - 4 x1 x2 + 8 x22
Ma tran dang toan phuong A =, 5 -2
-2 8
Da thuc dac trung: , ( λ - 4 ) ( λ - 9 )
Gia tri rieng: , 4
9
, Cot vecto rieng :, 2
-1 2
Ma tran lam cheo hoa P =,
2
5 5 -
1
5 5 1
5 5
2
5 5
Ma tran cheo hoa P'AP = , 4 0
Dang chinh tac sau khi cheo hoa truc giao :, 4 y12 + 9 y22
Dang chinh tac rut gon :, z12 + z22
Vi du 2: Dang toan phuong := -x12 - x22 + 6 x1 x2 + 3 Error, (in chinhtac) Dang toan phuong cho sai
Vidu 3: Dang toan phuong := 5 x12 + 5 x22 + 4 x1 x2 - 2 x2
Error, (in chinhtac) Dang toan phuong cho sai
Kết quả ở Ví dụ 1 cho biết đó là dạng toàn phương xác định dương, còn các dạng toàn
phương ở Ví dụ 2 và 3 cho sai, cần nạp lại
> `DANG TOAN PHUONG 3 AN`;
tp:=x[1]^2+x[2]^2+x[3]^2-2*x[1]*x[2]-2*x[1]*x[3]-2*x[2]*x[3]:
`Vidu 4: Dang toan phuong`:=tp; chinhtac(tp);
DANG TOAN PHUONG 3 AN Vidu 4: Dang toan phuong := x12 + x22 + x32 - 2 x1 x2 - 2 x1 x3 - 2 x2 x3
Trang 4Ma tran dang toan phuong A =,
1 -1 -1 -1 1 -1 -1 -1 1
Da thuc dac trung: , ( λ + 1 ) ( λ - 2 )2
Gia tri rieng: ,
-1 2 2
, Cot vecto rieng :,
1 -1 -1
Ma tran lam cheo hoa P =,
1
3 3 -
1
2 2 -
1
6 6 1
3 3
1
2 2 -
1
6 6 1
3 3 0
1
3 6
Ma tran cheo hoa P'AP = ,
-1 0 0
Dang chinh tac sau khi cheo hoa truc giao :, -y12 + 2 y22 + 2 y32
Dang chinh tac rut gon :, -z12 + z22 + z32
Hãy thử áp dụng đối với dạng toàn phương 4 ẩn sau:
> `DANG TOAN PHUONG 4 AN`;
tp:=x[1]^2+x[2]^2+x[3]^2+x[4]^2+2*x[1]*x[2]+2*x[1]*x[3]+2*x[
1]*x[4]-2*x[2]*x[3]-2*x[2]*x[4]-2*x[3]*x[4]:
`Vi du 5: Dang toan phuong`:=tp; chinhtac(tp);
MAPLE là một phần mềm tính toán khá mạnh có khả năng tính toán trên số và trên các
ký hiệu Việc sử dụng MAPLE sẽ đem lại một công cụ rất hiệu quả trong nghiên cứu
khoa học và giảng dạy trên nhiều lĩnh vực khác nhau
TÀI LIỆU
[1] B.W.CHAR, K.O.GEDDES, G.H.GONNET, B.L.LEONG, M.B.MANAGAN,
S.M.WATT, Maple V Library Reference Manual, Springer-Verlag, 1993
[2] PHAN ĐỨC CHÂU, Sử dụng MAPLE trong Toán sơ cấp và Toán cao cấp, Nxb Khoa
học và kỹ thuật, 2005
[3] NGUYỄN ĐÌNH TRÍ , TẠ VĂN ĐĨNH, NGUYỄN HỒ QUỲNH, Toán học cao cấp,
Nxb Giáo dục, 2004