Chương 3 GIẢI TÍCH MA TRẬN VÀ ĐẠI SỐ TUYẾN TÍNH 3.1 GIẢI TÍCH MA TRẬN Để các bạn làm quen với các công cụ của Matlab trong đại số tuyến tính, trước hết chúng tôi cần nhắc lại một số kh
Trang 1Chương 3 GIẢI TÍCH MA TRẬN VÀ ĐẠI SỐ TUYẾN TÍNH
3.1 GIẢI TÍCH MA TRẬN
Để các bạn làm quen với các công cụ của Matlab trong đại số tuyến tính, trước hết chúng tôi cần nhắc lại một số khái niệm về ma trận và các phép toán trên ma trận
3.1.1 Chuyển vị ma trận
Cho ma trận A=(a ij ) mxn Ma trận chuyển vị của A là ma trận A' =(a' ij ) nxm sao
cho a' ij =a ji Nếu A’=A thì A được gọi là một ma trận đối xứng
Thí dụ 2 Sau đây là ma trận A và các ma trận con M 23 và M 12 tương ứng
Định thức của ma trận A vuông cấp n, gọi là định thức cấp n, được định
nghĩa theo phương pháp qui nạp như sau:
- Nếu A là ma trận cấp 1 hay A=(a 11 ), thì det(A)=a 11;
Trang 2lớn, người ta cố gắng tránh các phương pháp có sử dụng định thức
3.1.3 Ma trận trận nghịch đảo
Giả sử A là ma trận vuông cấp n Nếu tồn tại ma trận B vuông cấp n sao cho
AB=BA=E (E là ma trận đơn vị cấp n) thì A được gọi là ma trận khả nghịch Khi
đó B được gọi là ma trận nghịch đảo của A và được kí hiệu là B =A -1
Chỉ ma trận có định thức khác không (hay ma trận không suy biến) mới khả
nghịch đảo và ma trận nghịch đảo của A có thể tính được bằng công thức:
Trang 3Bảng 3-1
Một số hàm ma trận và vector trong Matlab
inv(A) Tính ma trận nghịch đảo của ma trận vuông A
det(A) Tính định thức của ma trận vuông A
A' hoặc A.' Tạo ma trận chuyển vị của ma trận A
trace(A) Hàm vết của ma trận hay tổng các phần tử trên đường chéo
của ma trận A
rank(A) Tính hạng của ma trận A
[m,k]=min(x) Tính giá trị nhỏ nhất m trong các toạ độ của vector x và vị trí
k đạt min Nếu x là ma trận thì kết quả là vector hàng gồm giá
trị min của các cột
[M,k]=max(
x)
Tính giá trị lớn nhất M trong các toạ độ của vector x và vị trí
k đạt max Nếu x là ma trận thì kết quả là vector hàng gồm giá
trị max của các cột
mean(x) Tính giá trị trung bình của các phần tử của vector x Nếu x là
ma trận thì kết quả là vector hàng gồm giá trị trung bình của các cột
[y,k]=sort(x) Sắp xếp lại các phần tử của x theo thứ tự tăng dần, kết quả trả
cho vector y Vector k là vector số thứ tự cũ trong x của các phần tử trong y Nếu x là ma trận thì các cột của x được sắp
xếp tăng dần
sum(x) Tính tổng các phần tử của vector x Nếu x là một ma trận thì
kết quả là 1 vector hàng, mà mỗi phần tử của vector là tổng các phần tử của một cột tương ứng
cumsum(x) Cộng dồn các phần tử của vector x
prod(x) Tính tích các phần tử của vector x Nếu x là một ma trận thì
kết quả là 1 vector hàng, mà mỗi phần tử của vector là tích các phần tử của một cột tương ứng
cumprod Nhân dồn các phần tử của vector x
Trang 4>> inv(A)
ans = -3/32 -1/8 13/32 -1/16 1/4 -1/16 13/32 -1/8 -3/32
Trang 5>> sort(x)
ans = -8 -7 -6 -2 0 0 1 3 4 5
>> [y,k]=sort(x)
y = -8 -7 -6 -2 0 0 1 3 4 5
Trang 6Trong không gian vector V, tích vô hướng của 2 vector x và y, được ký hiệu
là <x,y>, là một số thực hoàn toàn xác định đối với mọi cặp vector x và y, thoả
(3.3)
3.1.5 Chuẩn của vector
Cho một hàm vector hàm f(x) xác định trên không gian vector V, ký hiệu là
x Nếu nó thoả mãn các tính chất sau đây với xV:
1) x 0, x 0 x0,
2) x x , R,
3) x y x y (gọi là bất đẳng thức tam giác),
thì x được gọi là chuẩn của vector x
Trang 7Từ định nghĩa về chuẩn vector, với mỗi số p>0 có một chuẩn loại p tương ứng trong R n như sau:
p p n
x
/ 1
A , với j là các trị riêng của ma trận đối xứng A T A j
còn được gọi là các trị kì dị (single value) của ma trận A
Các chuẩn của ma trận cũng thỏa mãn các tính chất 1)-3) của chuẩn vector Ngoài ra, giữa chuẩn loại p=0,1,2 của vector và chuẩn loại tương ứng của ma trận thoả mãn tính chất sau:
Bất đẳng thức trên gọi là tính tương thích của chuẩn ma trận đối với chuẩn
vector Chuẩn loại 2 cúa vector trong không gian R n:
1 2
2 x n
còn được gọi là chuẩn Euclide
Thí dụ 4 Để tính các tích vô hướng và các chuẩn ma trận và chuẩn vector trong Matlab có thể làm như sau:
Trang 8Giải thích Hàm NORM tính chuẩn loại p của ma trận và vector V
- Nếu V là một vector p > 0 hoặc inf thì
norm(V) = norm(V,2) : Chuẩn Euclide;
Trang 9norm(V,inf) = max(abs(V)) : Chuẩn loại vô cùng;
norm(V,-inf) = min(abs(V))
- Nếu V là một ma trận thì p chỉ có thể 1, 2, inf hoặc 'fro' và
norm (V) = max(svd(V)) : Trị kì dị lớn nhất của V;
norm (V,2) = norm (V);
norm (V,1) = max(sum(abs(V)));
norm (V,inf) = max(sum(abs(V')));
norm (V,'fro')= sqrt(sum(diag(V'*V))) : chuẩn Frobenius
3.1.6 Phân loại ma trận
Khi nghiên cứu các bài toán trong đại số tuyến tính, người ta thường chia
ma trận thành 2 loại:
- Ma trận lưu trữ được: Các ma trận mà các phần tử của chúng có thể lưu
trữ và xử lí được trong bộ nhớ của MTĐT Kích thước của các ma trận này
thường không lớn lắm n = 0(103)
- Ma trận thưa: Ma trận có kích thước rất lớn, nhưng phần lớn các phần tử
của chúng đều bằng 0 hoặc ma trận có phần tử không cần lưu trữ mà có thể tính được bằng qui tắc nào đó
Thí dụ 5 Một ma trận thưa có dạng 3 đường chéo:
4 1 0 0 0 0 0
1 4 1 0 0 0 0
0 1 4 1 0 0 0
0 0 1 4 0 0 0 0
3.1.7 Số điều kiện của ma trận
Giả sử là một chuẩn nào đó của vector và ma trận và A là một ma trận vuông Nếu đặt :
Trang 10Giả sử x là nghiệm đúng của hệ phương trình tuyến tính Ax = b và x+ x là
nghiệm của hệ phương trình xấp xỉ A x( x) b b Khi đó b Ax M x
Biểu thức trên cho thấy sai số tương đối của nghiệm có thể lớn bằng sai số
tương đối của vế phải nhân với cond(A) Ma trận A được gọi là ma trận có số điều kiện xấu (ill-conditioned-matrix ) nếu cond(A)>>1 Vì vậy việc giải gần đúng một hệ phương trình với ma trận hệ số A có số điều kiện xấu rất kém ổn định; Vế phải b chỉ cần thay đổi nhỏ cũng có thể gây sai số khá lớn cho lời giải
của hệ phương trình
Số điều kiện của ma trận có các tính chất:
i) cond(A) 1;
ii) Nếu A là ma trận trực giao (tức là A'=A -1 ) thì con(A)=1;
iii) Với mọi c 0R : ta đều có cond(cA) = cond(A);
iv) Nếu D = diag n
i
d 1 thì cond(D) =
max min
i i
0 , khi đó det(A)=10 -100 nên A là ma trận gần suy biến Tuy nhiên do A=0,1E nên A là ma trận có số điều kiện rất tốt và hệ phương trình Ax=1 dễ dàng giải được một cách chính xác là: x i =10, i 1,100
Hàm COND
Cú pháp:
cond(A,p)
Giải thích Hàm COND tính số điều kiện của ma trận A theo chuẩn loại p
cond(A,p)= norm(A,p)*norm(inv(A),p), nếu p=1,2, inf hoặc 'fro';
cond(A) = cond(A,2)
Trang 11Ta thấy ma trận Hilbert là ma trận có số điều kiện rất xấu
3.2 MỘT SỐ MA TRẬN ĐẶC BIỆT TRONG MATLAB
invhilb(n) Ma trận nghịch đảo của ma trận Hilbert cấp n
kron(x,y) Ma trận tích tensor Kronecker của ma trận x và y
vander(x) Ma trận Vandermonde của vector x
Ma trận ma phương là ma trận vuông cấp n sinh bởi các số 1, 2, 3, , n2 có các tổng của cột, các tổng hàng và các tổng đường chéo đều bằng nhau
Trang 12Ma trận Hadamard là ma trận vuông H cấp n gồm các phần tử 1 và -1 sao cho H'*H= n*eye(n) Nó chỉ tồn tại khi n chia hết cho 4 Matlab chỉ tính được
ma trận Hadamard khi n, n/12 hay n/20 là lũy thừa của 2
Trang 132 1
2 2 2 1 2
1 1 1
n n n
n
n
x x x
x x x
x x x
Ma trận Vandermonde được sử dụng trong nội suy bằng đa thức
Tích tensor Kronecker của 2 ma trận A mxn và B là ma trận có dạng:
diag(A,p) Nếu A là 1 ma trận thì hàm sẽ tạo ra 1 vector cột từ đường chéo thứ
p của ma trận A Nếu A là 1vector thì hàm sẽ tạo ra 1 ma trận vuông
có đường chéo thứ p là vector A, còn các phần tử khác đều bằng 0 Mặc định của p là 0 (đường chéo chính)
triu(A,p) Hàm sẽ tạo ra một ma trận cùng cỡ với ma trận A, có các phần tử từ
đường chéo thứ p trở lên được lấy từ A, còn các phần tử khác (phía dưới đường chéo thứ p) đều bằng 0 Mặc định của p là 0
tril(A,p) Hàm sẽ tạo ra một ma trận cùng cỡ với ma trận A, có các phần tử từ
đường chéo thứ p trở xuống được lấy từ A, còn các phần tử khác (phía trên đường chéo thứ p) đều bằng 0 Mặc định của p là 0
Trang 15j j
A
A
(3.5)
trong đó Aj là ma trận vuông cấp n suy từ A bằng cách thay cột thứ j của A
bởi vector vế phải b
Xét về hiệu quả tính toán thì phương pháp này rất tồi Người ta tính được
số phép tính số học (+, -, và / ) của phương pháp này là:
N C (n)=(n+1)!n
Bạn hãy tưởng tượng, nếu phải giải hệ phương trình 15 ẩn (n=15) theo phương pháp Cramer trên MTĐT có tốc độ tính toán là 1 tỷ phép tính/giây thì phải mất 3,6 ngày tính toán liên tục; Còn nếu số ẩn là n=20 thì thời gian tính toán
là 32 nghìn năm Những con số thật khủng khiếp Tuy nhiên công thức Cramer
có ý nghĩa khi ta nghiên cứu một số tính chất của lời giải
Trang 163.3.2 Phương pháp ma trận nghịch đảo
Đây là một hình thức thể hiện khác của phương pháp Cramer Nếu A là ma trận không suy biến thì từ biểu thức Ax=b suy ra hệ phương trình có duy nhất nghiệm xác định bởi biểu thức x=A -1 b Vì vậy bạn dễ dàng có thể sử dụng Matlab
để tính nghịch đảo của ma trận A và giải hệ phương trình như sau:
Xét hệ phương trình Ax =b trong trường hợp A là ma trận tam giác trên và
các hệ số trên đường chéo chính đều khác 0:
Khi đó hệ phương trình Ax=b có thể giải một cách đơn giản bằng phương
pháp thế ngược từ dưới lên theo công thức sau đây mà không phải tính một định thức nào:
Tương tự, nếu A là ma trận tam giác dưới với các phần tử trên đường chéo
chính khác 0, thì có thể giải hệ phương trình bằng phương pháp thế xuôi từ trên
Trang 17xuống như sau:
- - - -
k
k kj j j
Nếu A không phải một ma trận tam giác, có thể dùng các phép biến đổi sơ
cấp về hàng của ma trận để biến đổi dần ma trận mở rộng A =[A,b] của ma trận
A về dạng ma trận tam giác trên, rồi dùng phương pháp thế ngược nói trên để tính
vector x Công việc đó được gọi là quá trình xuôi của phương pháp Gauss:
Nếu trong quá trình tính toán các phần trử trụ akk k 1đều khác không thì khi
kết thúc quá trình xuôi ta được ma trận A (n-1) có dạng tam giác trên
Phương pháp Gauss -Jordan (Còn gọi là phương pháp Gauss cải tiến
hay phương pháp Chọn trụ tối đại)
Trong quá trình tính toán của phương pháp Gauss, nếu gặp phần tử trụ
Trang 18+ Nếu a rk =0 thì ma trận A suy biến, nên phải ngừng giải; Ngược lại, nếu
rk thì tiến hành đổi chỗ 2 hàng r và k của ma trận A (k-1) ;
3.3.4 Phương pháp phân tích QR và phương pháp phân tích LU
Để giải hệ phương trình tuyến tính trên MTĐT người ta thường phân tích
ma trận A thành tích của 2 ma trận, mỗi ma trận đó dễ nghịch đảo hơn ma trận A
Do đó sẽ giảm nhẹ khối lượng tính toán Có 2 phương pháp phân tích ma trận:
Phương pháp phân tích QR
Phân tích ma trận A thành tích của ma trận trực giao Q (ma trận unitar) và
ma trận tam giác trên R Ta có thể viết lại hệ phương trình gốc như sau:
Trang 19Giải thích:
- A là một ma trận vuông cần phân tích;
- Q là ma trận trực giao và R là ma trận tam giác trên;
- P là ma trận giao hoán thỏa mãn Q*R = P*A
Sở dĩ cần phải sử dụng thêm ma trận giao hoán vì trong quá trình tính toán, giống như phương pháp Gauss, khi gặp trường hợp phải chia cho 0 thì cần phải hoán vị các hàng của ma trận
Phương pháp phân tích LU
Hãy xem xét lại phương pháp khử Gauss Tại bước thứ k=1,n1 của
phương pháp Gauss, ta giữ lại k hàng đầu của ma trận A (k-1) và biến đổi phần tử
k 1
ik
a (i>k) thành 0 Mỗi bước như vậy tương đương với việc nhân bên trái ma
trận A (k-1) với một ma trận sơ cấp có dạng tam giác dưới E k Quá trình đó đưa dần
dần ma trận A về dạng ma trận tam giác trên U có các phần tử trên đường chéo bằng 1 Nói cách khác E n E n-1 E 1 A= MA=U hay A =M -1 U=LU
Phép phân tích này thực hiện được nếu như tất cả các phần tử trụ
a , giống
như phương pháp Gauss cải tiến, ta cần đổi chỗ hàng k với một hàng r nào đó ở
dưới Vì vậy cũng cần lưu trữ các phép đổi chỗ bằng một ma trận giao hoán để sử dụng cho việc biến đổi tương ứng vector vế phải của hệ phương trình
Để tìm các ma trận L và U ta có thể dùng thủ tục Crout gồm n-1 bước Vì L
là ma trận tam giác dưới có các phần tử đường chéo bằng 1 và U là ma trận tam
giác trên nên trong khi tính toán ta có thể lưu trữ chúng chung vào ma trận kí
Trang 20trong đó Dk là ma trận vuông cấp n-k+1 (tức là có k-1 hàng và k-1 cột của B
đã được tính toán xong) Tiếp tục biến đổi Dk=
T k kk
H s
u u
T k kk
D l
u u
Ux=y bằng quá trình thế ngược để tìm nghiệm x Như vậy chúng ta cũng không
cần phải tính ma trận nghịch đảo nào cả
Để xác định các ma trận L và U có thể sử dụng lệnh của Matlab theo cú
pháp như sau:
[L,U,P] =lu(A)
Giải thích:
- A là một ma trận vuông cần phân tích ;
- L là ma trận tam giác dưới và U là ma trận tam giác trên;
- P là ma trận giao hoán thỏa mãn L*U = P*A
Trang 21Tuy nhiên, để giải hệ phương trình Ax=b bằng phương pháp phân tích LU
ta có thể dùng dòng lệnh của Matlab sau:
>> x = A\ b %% Giải phương trình bằng phương pháp phân tích LU và
%% hai thủ tục giải tiến và lùi luân phiên nhau
Cần chú ý là cả hai phương pháp ma trận nghịch đảo và phương pháp phân tích LU đều dẫn đến một kết quả vì đều là các phương pháp chính xác Tuy
nhiên tính bằng phương pháp phân tích LU có hiệu quả hơn Do đó nên chọn phương pháp này để giải hệ phương trình tuyến tính Việc phân tích LU đặc biệt
có lợi nếu ta phải giải nhiều hệ phương trình có ma trận hệ số A giống nhau,
nhưng vector vế phải khác nhau
Hãy xem xét một thí dụ về ứng dụng của giải hệ phương trình
Thí dụ 12 Hãy tính các cường độ dòng điện i1, i 2, i 3 của một mạch điện như trên hình vẽ:
Trang 22% MATLAB code for electric circuit analysis
R1 = input( 'Enter resistor R1');
R2 = input( 'Enter resistor R2');
R3 =input( 'Enter resistor R3');
R4 = input( 'Enter resistor R4');
R5= input( 'Enter resistor R5');
V1= input( 'Enter voltage source V1');
V2= input( 'Enter voltage source V2');
b= [ V1; 0; -V2]; %% Forming the right-hand-side vector A=[ R1+R2 -R3 0
-R2 R2+R3+R4 -R4
0 -R4 R4+R5]; %% Forming the matrix
3.3.5 Phương pháp Cholesky (Phương pháp căn bậc 2)
Đâylà một trường hợp riêng của phương pháp phân tích LU Nếu A là ma trận đối xứng, tức là A=A T, người ta đã chứng minh được rằng khi đó tồn tại tam
giác trên S =(s ij ) nxn sao cho A=S T S Khi đó hệ phương trình Ax=b trở thành
S T Sx=b Đặt Sx=y thì S T y=b Cần chú ý là s ij =0 nếu i>j và ma trận S T là ma trận
tam giác dưới Nên có thể tính vector y như sau:
Trang 23Vấn đề còn lại là tìm cách tính ma trận S như thế nào Từ phương trình
S T S=A ta có:
, ij
kj ki kj ik
với j >i ; s ij = 0 với j <i
Chú ý rằng nếu các phần tử trên đường chéo chính (s ii ) của ma trận S đều khác không thì det(A)=
2
1 ii
n
i s 0 khi đó hệ phương trình có duy nhất nghiệm
Phương pháp Cholesky tính toán được cả trong trường hợp sij có thể là các số phức Tổng khối lượng tính toán của phương pháp là:
Xét hệ phương trình Ax=b Bằng cách nào đó ta đưa hệ về dạng tương đương x=Bx+g Sau đó tính toán theo thủ tục lặp đơn như sau:
- Chọn nghiệm xấp xỉ đầu x (0) ;
- Bước lặp k=1,2,3 : tính x (k) = Bx (k-1 +g;
Thuật toán sẽ dừng lại khi x (k) đạt được sai số cho phép