Download miễn phí Bài giảng phần Ma trận
§14. PHÂN TÍCH SCHUR
Cho ma trận vuông [A], cấp n ta phân tích nó thành:
[A] = [T][T]*
Trong đó:
[T] ‐ ma trận unita và [T]* là ma trận chuyển vị liên hợp của [T](lâý chuyển vị của [T] rồi lấy liên hợp của các phần tử).
= [Λ] + [N]
[Λ] ‐ là ma trận đường chéo có các phần tử là các giá trị riêng của [A]
[N] ‐ ma trận tam giác phải, có các phần tử thuộc đường chéo chính bằng zero.
Mọi ma trận vuông đều có thể phân tích Schur. Tuy nhiên phân tích này
không duy nhất. Nếu [A] là ma trận trực giao thì là ma trận đường chéo
và các cột của [T] là các vec tơ riêng của [A]. Phân tích Schur khi này được gọi
là phân tích phổ. Nếu [A] xác định dương, phân tích Schur chính là phân tích SVD.
http://cloud.liketly.com/flash/edoc/jh2i1fkjb33wa7b577g9lou48iyvfkz6-swf-2014-02-11-bai_giang_phan_ma_tran.PHNwHFDzzu.swf /tai-lieu/de-tai-ung-dung-tren-liketly-58403/
Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí
Tóm tắt nội dung tài liệu:
pp = max(size(p));
v = nulld(aa, small);
jv,p) = v*(rand(size(v, 2), pp) ‐ 0.5)*16;
k = k + pp;
end
clear v;
for k = 1:dns(1)
v,1) = jv, k);
for p = 2:ec(k)
v, p) = a1*v, p‐1);
end
vv = fliplr(v, 1:ec(k)));
M = [M vv];
84
end
end
end
k = abs(det(M))^(‐1/n);
M = k*M;
Mi = inv(M);
D = Mi*a*M;
d0 = diag(D);
d1 = diag(D, 1);
D = diag(d0) + diag(d1, 1);
function Z = nulld(A, small)
norma = sqrt(mean(mean(abs(A))));
tiny = norma*eps;
if nargin<2
small = (1 + norma)*sqrt(eps);
end
[m, n] = size(A);
if m~= n
error(ʹMa tran phai vuong!ʹ)
end
p = find(abs(A)
A(p) = 0;
end
[U,S,V] = svd(A, 0);
S = diag(S);
s = S;
norma = max(s);
smax = max(s);
if smax == 0;
smax = 1;
end
s = s/smax;
snorm = s;
85
t = find(s>0);
if isempty(t);
Z = V;
return;
end
p = find(s
s(p) = tiny;
end
p = find(s == 0);
if ~isempty(p)
s(p) = small*min(s(t));
end
logs = log10(s);
sdifflog = ‐diff(logs);
smax = max(sdifflog);
r = find(sdifflog == smax);
if min(size(r))>0
r = r(end);
else
r = 0;
end
Z = V,r+1:n);
if snorm == ones(n, 1);
Z = zeros(n, 0);
end
if max(S) <= small;
Z = V;
end
§13. PHÂN TÍCH MA TRẬN THEO CÁC GIÁ TRỊ KÌ DỊ
Phân tích ma trận theo các giá trị kì dị (kì dị value) được thực hiện trên
các ma trận vuông hay chữ nhật. Ta có:
[Anp] = [Unn][Snp][Vpp]
Trong đó:
86
T = [Enn]
[V]T[V] = [Epp]
nghĩa là các ma trận và [V] là trực giao.
Các cột của là các vec tơ kì dị trái,
đường chéo và [V]T có các hàng là các vec tơ kì dị phải. Để tính các ma trận
,
của [A]T[A] tạo nên các cột của [V]. Các vec tơ riêng của [A][A]T tạo nên các
cột của . Các giá trị kì dị của
[A][A]T hay [A]T[A]. Các giá trị riêng trên đường chéo của
theo thứ tự giảm dần. Để hiểu được thuật toán này ta xét ví dụ sau:
Ta xây dựng hàm svddecomp() để thực hiện thuật toán này:
function [U, S , V] = svddecomp(A)
[m, n] = size(A);
if (m > n)
% ta can timcac vec to kì dị phai truoc
%[V D] = eigs(Aʹ*A)
[V, D] = eigs(Aʹ*A);
[dummy, perm] = sort(‐diag(D));
S = diag(sqrt(diag(D(perm, perm))));
V = V, perm);
sinv = diag(1./sqrt(diag(D)));
U = (A*V)*sinv;
else
% ta can tim cac vec to kì dị trai truoc
% [U D] = eigs(A*Aʹ)
[U, D] = eigs(A*Aʹ);
[dummy, perm] = sort(‐diag(D));
S = diag(sqrt(diag(D(perm, perm))));
U = U, perm);
sinv = diag(1./sqrt(diag(D)));
V = sinv*(Uʹ*A);
V = Vʹ;
end
87
Để phân tích một ma trận ta dùng chương trình ctsvddecomp.m:
clear all, clc
%a = [ 1 2 3 4 5; 6 7 8 9 0; 3 4 5 6 7; 8 9 0 1 2; 2 4 6 8 1];
a = [ 1 1; 0 1; 1 0];
[u, s, v] = svddecomp(a)
§14. PHÂN TÍCH SCHUR
Cho ma trận vuông [A], cấp n ta phân tích nó thành:
[A] = [T][T]*
Trong đó:
[T] ‐ ma trận unita và [T]* là ma trận chuyển vị liên hợp của [T](lâý
chuyển vị của [T] rồi lấy liên hợp của các phần tử).
= [Λ] + [N]
[Λ] ‐ là ma trận đường chéo có các phần tử là các giá trị riêng của [A]
[N] ‐ ma trận tam giác phải, có các phần tử thuộc đường chéo chính
bằng zero.
Mọi ma trận vuông đều có thể phân tích Schur. Tuy nhiên phân tích này
không duy nhất. Nếu [A] là ma trận trực giao thì là ma trận đường chéo
và các cột của [T] là các vec tơ riêng của [A]. Phân tích Schur khi này được gọi
là phân tích phổ. Nếu [A] xác định dương, phân tích Schur chính là phân tích
SVD.
Để phân tích ma trận theo thuật toán Schur ta thực hiện các bước sau:
- Tìm giá trị riêng λ1 của [A] và vec tơ riêng tương ứng [v1]
- Chọn n‐ 1 vec tơ [w1],...,[wn‐1] độc lập tuyến tính và trực giao với [v1]
- Tạo [V1] là ma trận có các cột là [v1], [w1],...,[wn‐1] và tính:
[ ] [ ][ ] [ ]11 1 1V A V 0 A
∗ λ ∗⎡ ⎤= ⎢ ⎥⎣ ⎦
Trong đó [A1] là ma trận (n‐1)×(n‐1)
- Lặp lại quá trình với ma trận [A1] ta có:
[ ] [ ][ ] [ ]22 1 2 2V A V 0 A
∗ λ ∗⎡ ⎤= ⎢ ⎥⎣ ⎦
Trong đó [A2] là ma trận (n‐2)×(n‐2)
88
- Do [ ] [ ] [ ]
[ ]
1
2 2 1
2
T A T 0
0 0 A
∗ ∗
λ ∗ ∗⎡ ⎤⎢ ⎥= λ ∗⎢ ⎥⎢ ⎥⎣ ⎦
Trong đó [ ]2 1 2ˆT V V⎡ ⎤ ⎡ ⎤= ⎣ ⎦ ⎣ ⎦ với [ ]2 2
1 0
Vˆ
0 V
⎡ ⎤⎡ ⎤ = ⎢ ⎥⎣ ⎦ ⎣ ⎦
- Tiếp tục quá trình ta tìm được [V1],...,[Vn]. Cuối cùng = [T]*[A][T]
2 1 2 n
ˆ ˆT V V V⎡ ⎤ ⎡ ⎤ ⎡ ⎤⎤⎡ =⎣ ⎦ ⎣ ⎦ ⎣ ⎦ ⎣ ⎦L
Ta xây dựng hàm schurdecom() thực hiện thuật toán trên:
function [T, U] = schurdecom(a)
% Phan tich Schur ma tran A
n = size(a, 1);
v = zeros(n, 1);
v(1) = 1;
b = zeros(n, n);
b, n) = v;
for k = 2:n
v = a*v;
b, n‐k+1) = v;
end
c = a*v;
rho = ‐b\c;
rho = [1 rhoʹ];
lambda = roots(rho);
n = size(lambda, 1);
evec = zeros(n);
c = evec;
e = eye(n);
for i = 1:n
b = a ‐ lambda(i)*e;
c = nulld(b);
evec, i) = c,1);
89
end
p = grams(evec);
T = conj(transpose(p))*a*p;
U = p;
Để phân tích ma trận ta dùng chương trình ctschur.m:
clear all, clc
a = [ 1 2 3 5; 4 5 6 2; 4 6 8 9; 9 3 6 7];
[t, u] = schurdecom(a)
§15. ĐỊNH THỨC CỦA MA TRẬN
Cho một ma trận vuông cấp n. Ta cần tìm định thức của nó. Trước hết
chúng ta nhắc lại một số tính chất quan trọng của định thức:
- nếu nhân tất cả các phần tử của một hàng (hay cột) với k thì định
thức được nhân với k
- định thức không đổi nếu ta cộng thêm vào một hàng tổ hợp tuyến
tính của các hàng còn lại.
- nếu đổi chỗ hai hàng cho nhau thì định thức đổi dấu
Trước khi đi đến định nghĩa về định thức ta tìm hiểu khái niệm về hoán
vị và phép thế.
Cho một dãy số, nếu ta đổi chỗ các số trong dãy cho nhau thì ta đã thực
hiện một phép hoán vị. Ví dụ 123, 132,.. là các hoán vị của dãy số {1, 2, 3}.
Trong hoán vị α1α2…αi…αj…αn ta nói αi làm một nghịch thế với αj nếu i < j
mà αi > αj. Ví dụ trong hoán vị 1432 số 4 làm với số 3 một nghịch thế , số 4
làm với số 2 một nghịch thế, số 3 làm với số 2 một nghịch thế. M