Sử dụng MAPLE để đưa dạng toàn phương dạng tắc PHAN ĐỨC CHÂU Đại học Kinh doanh Công nghệ Hà Nội Dạng toàn phương khái niệm Toán cao cấp Dạng toàn phương có nhiều ứng dụng kỹ thuật kinh tế nhận dạng đường mặt bậc hai, đưa điều kiện đủ toán tối ưu… Sử dụng phần mềm MAPLE giúp cho việc nghiên cứu dạng toàn phương dễ dàng hiệu Giả sử Vn không gian n chiều S sở Trong sở S dạng toàn phương biểu thức có dạng n Q( x, x) = ∑ aij xi x j = x' Ax i , i =1 ma trận A = ( aij ) ma trận đối xứng Nếu Q(x,x) chứa số hạng bình phương nói Q(x,x) có dạng tắc sở S Rút gọn dạng toàn phương tìm sở S’ Q có dạng tắc Để đưa dạng toàn về dạng tắc thường dùng cách: Phương pháp chéo hóa trực giao, phương pháp Jacobi phương pháp Lagrange Bài nêu việc sử dụng phần mềm MAPLE để đưa Q dạng tắc theo phương pháp chéo hóa trực giao Gọi P ma trận chuyển từ sở trực chuẩn S sang 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 S’ trực chuẩn nên P ma trận trực giao theo nghĩa P’P = E , E ma trận đơn vị Vậy P −1 = P' Nếu P −1 AP ma trận đường chéo, Q chứa số hạng bình phương hay Q có dạng tắc sở S’ Khi nói P ma trận làm chéo hóa trực giao ma trận A Áp dụng trình trực giao hóa Gram-Schmidt để tìm ma trận P Đoạn chương trình sau MAPLE thực việc Có hai thủ tục: a) cheohoatrucgiao để chéo hóa trực giao ma trận đối xứng bất kỳ, đưa thêm số thông tin đa thức đặc trưng, giá trị riêng, vectơ riêng ma trận đó, b) chinhtac để đưa dạng toàn phương dạng tắc Trong thủ tục có phần để nhận ma trận A dạng toàn phương, Q đưa vào sai báo lỗi > restart:with(linalg):with(LinearAlgebra): > 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 to n 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 to n 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 to n A[i,i]:=coeff(tp,x[i]^2): for j from (i+1) to n 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 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 viết đoạn trên, để đưa dạng toàn phương dạng tắc, trước hết cần nạp dạng toàn phương xét, gọi thủ tục chinhtac Dưới nêu số ví dụ: > `DANG TOAN PHUONG 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: `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 AN Vi du 1: Dang toan phuong := x1 - x1 x2 + x2 -2 8 Ma tran dang toan phuong A =, -2 Da thuc dac trung: , (λ - 4) (λ - 9) Gia tri rieng: , 4 , Cot vecto rieng :, 9 Ma tran lam cheo hoa P =, 5 5 -1 2 1 - 5 Ma tran cheo hoa P'AP = , 0 9 Dang chinh tac sau cheo hoa truc giao :, y1 + y2 Dang chinh tac rut gon :, z + z2 2 2 Vi du 2: Dang toan phuong := -x1 - x2 + x1 x2 + Error, (in chinhtac) Dang toan phuong cho sai 2 Vidu 3: Dang toan phuong := x1 + x2 + x1 x2 - x2 Error, (in chinhtac) Dang toan phuong cho sai Kết Ví dụ cho biết dạng toàn phương xác định dương, dạng toàn phương Ví dụ cho sai, cần nạp lại > `DANG TOAN PHUONG 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 AN 2 Vidu 4: Dang toan phuong := x1 + x2 + x3 - x1 x2 - x1 x3 - x2 x3 Ma tran dang toan phuong A =, -1 -1 -1 -1 -1 1 -1 Da thuc dac trung: , (λ + 1) (λ - 2) -1 Gia tri rieng: , 2 , Cot vecto rieng :, 2 Ma tran lam cheo hoa P =, 3 3 3 - -1 1 6 6 2 - -1 Ma tran cheo hoa P'AP = , -1 0 1 0 0 2 2 Dang chinh tac sau cheo hoa truc giao :, -y1 + y2 + y3 2 Dang chinh tac rut gon :, -z1 + z2 + z3 2 Hãy thử áp dụng dạng toàn phương ẩn sau: > `DANG TOAN PHUONG 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 phần mềm tính toán mạnh có khả tính toán số ký hiệu Việc sử dụng MAPLE đem lại công cụ hiệu nghiên cứu khoa học giảng dạy nhiều lĩnh vực khác 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 Toán sơ cấp Toán cao cấp, Nxb Khoa học 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 ... print(`Dang chinh tac rut gon :`,Ctrg); end proc: Sau viết đoạn trên, để đưa dạng toàn phương dạng tắc, trước hết cần nạp dạng toàn phương xét, gọi thủ tục chinhtac Dưới nêu số ví dụ: > `DANG TOAN... x1 x2 - x2 Error, (in chinhtac) Dang toan phuong cho sai Kết Ví dụ cho biết dạng toàn phương xác định dương, dạng toàn phương Ví dụ cho sai, cần nạp lại > `DANG TOAN PHUONG 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]:... cheo hoa truc giao :, -y1 + y2 + y3 2 Dang chinh tac rut gon :, -z1 + z2 + z3 2 Hãy thử áp dụng dạng toàn phương ẩn sau: > `DANG TOAN PHUONG 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[