Lệnh này thường dùng với các ma trận thưa [I,J,V] = FINDX cũng trả về một vectơ cột gồm các phần tử khác 0 của X.. Làm việc với các phần tử khác 0 của ma trận thưa NNZ Số phần tử khác
Trang 1tử khác không, hoặc chỉ định, các phần tử đặt trên p đường chéo
B là ma trận min(m,n) hàng và p cột, thương đầy đủ (nhưng không cần thiết), có các cột là các đường chéo của A d là vectơ độ dài p có các thành phần nguyên chỉ định các đường chéo trong A Một cách thô sơ, A, B và d quan hệ bởi
for k = 1:p
B(:,k) = diag(A,d(k))
end
Bốn thao tác khác nhau, phân biệt theo số đối số nhập, có thể dùng với SPDIAGS là:
Lấy ra tất cả các đường chéo khác không:
[B,d] = spdiags(A);
Lấy ra đường chéo chỉ định:
B = spdiags(A,d);
Thay các đường chéo chỉ định:
A = spdiags(B,d,A);
Tạo một ma trận thưa từ các đường chéo của nó:
A = spdiags(B,d,m,n);
Quan hệ chính xác trong A, B và d là:
if m >= n
for k = 1:p
for j = max(1,1+d(k)):min(n,m+d(k))
B(j,k) = A(j-d(k),j);
end
end
if m < n
for k = 1:p
for i = max(1,1-d(k)):min(m,n-d(k))
B(i,k) = A(i,i+d(k));
end
end
end
Vài phần tử của B, ứng với các vị trí “ b ên ngoài ” A, không xác định được bằng các vòng lặp này Chúng không được tham chiếu khi B là đối số nhập và được dặt giá trị 0 khi B là đối số xuất
Ví dụ, các lệnh này phát sinh một biểu hiện 3 đường chéo thưa của phép vi phân cấp 2 cổ điển tại n điểm
e = ones(n,1);
A = spdiags([e -2*e e], -1:1, n, n)
Lệnh này đổi ma trận A thành ma trận kiểm tra Wilkinson (xem WILKINSON(n))
A = spdiags(abs(-(n-1)/2:(n-1)/2)',0,A)
Cuối cùng, lệnh này sửa lại 3 đường chéo
B = spdiags(A)
Ví dụ thứ hai không vuông
A = [ 11 0 13 0
0 22 0 24
0 0 33 0
41 0 0 44
Trang 20 52 0 0
0 0 63 0
0 0 0 74]
có m = 7, n = 4 và p = 3
Lệnh [B,d] = spdiags(A) cho d = [-3 0 2]' và
B = [ 41 11 0
52 22 0
63 33 13
74 44 24 ]
Ngược lại, với B và d như trên thì biểu thức spdiags(B,d,7,4) cho lại A về giá trị gốc
Chuyển ma trận đầy đủ thành ma trận thưa
SPARSE
Xây dựng ma trận thưa từ các số khác 0 và các chỉ số
S = SPARSE( ) là hàm gắn liền phát sinh các
ma trận thuộc lớp lưu trữ thưa của MATLAB Hàm này có thể gọi với 1, 2, 3, 5 hoặc 6 đối số
S = SPARSE(X) chuyển ma trận thưa hoặc đầy đủ sang dạng thưa bằng cách bỏ đi các phần tử 0
S = SPARSE(i,j,s,m,n,nzmax) dùng các dòng của [i,j,s] để phát sinh một ma trận thưa cỡ mxn với
không gian phân bố cho nzmax phần tử khác 0 Hai vectơ chỉ số nguyên, i và j, và vectơ thực hoặc phức, s, tất cả cùng độ dài, nnz, là số phần tử khác 0 trong ma trận thưa kết quả Có một số
cách gọi đơn giản 6 đối số này
S = SPARSE(i,j,s,m,n) dùng nzmax = length(s)
S = SPARSE(i,j,s) dùng m = max(i) và n = max(j)
S = SPARSE(m,n) cách tắt của SPARSE([],[],[],m,n,0) Lệnh này phát sinh ma trận thưa cơ bản cỡ mxn gồm tất cả các số 0 Đối số s và một trong hai đối số i và j có thể là
đại lượng vô hướng, trong trường hợp này chúng được bung ra để cả 3 đối số đầu có cùng độ dài Ví dụ, trích ra và sau đó ráp lại một ma trận thưa:
[i,j,s] = find(S);
[m,n] = size(S);
S = sparse(i,j,s,m,n);
Bởi vậy, như các lệnh này, nếu dòng và cột cuối cùng có các phần tử khác 0:
[i,j,s] = find(S);
S = sparse(i,j,s);
Tất cả các thao tác gắn liền của MATLAB về số học, logic và về chỉ số đều có thể áp dụng
cho các ma trận thưa, hoặc cho các ma trận vừa thưa vừa đầy đủ Các thao tác trên ma trận thưa trả về ma trận thưa, đầy đủ trả về đầy đủ Trong hầu hết các trường hợp thì các thao tác trên các ma trận vừa thưa vừa đầy đủ trả về đầy đủ Ngoại trừ trường hợp có đưa vào, kết
Trang 3quả của các thao tác trộn thưa với đầy đủ có cấu trúc thưa, nghĩa là A * S ít nhất thưa như S Một số thao tác, như S >= 0, phát sinh các ma trận thưa lớn ("Big Sparse", hay "BS" ) ma trận thuộc tổ chức lưu trữ thưa nhưng ít phần tử 0
FULL
Chuyển ma trận thưa sang lớp lưu trữ đầy đủ
A = FULL(X) là hàm gắn liền chuyển một ma trận thưa sang cơ cấu lưu trữ đầy đủ và cho ra một ma trận đầy đủ không thay đổi
FIND
Tìm các chỉ số của các phần tử khác 0
I = FIND(X) trả về chỉ số của các phần tử khác 0 của vectơ X
Ví dụ, I = FIND(A>100) , trả về các chỉ số của các phần tử lờn hơn 100 của A Xem RELOP
[I,J] = FIND(X) trả về các chỉ số dòng và cột của các phần tử khác 0 trong ma trận X Lệnh này thường dùng với các ma trận thưa
[I,J,V] = FIND(X) cũng trả về một vectơ cột gồm các phần tử khác 0 của X Lưu ý rằng find(X) và find(X~=0) sẽ cho ra cùng I và J, nhưng hàm sau cho V với tất cả các số 1
SPCONVERT
SPCONVERT Chuyển dạng thưa mở rộng
S = SPCONVERT(D) chuyển một mảng (nnz hoặc nnz+1)x (3 hoặc 4) với các dòng chứa [i,j,s] hoặc [i,j,real(s(i,j)),imag(s(i,j))] sang ma trận thưa tương ứng Một dòng bất kỳ trong D có dạng [m n 0] hoặc [m n 0 0] có thể dùng để chỉ điûnh kích thước của S Nếu D đã thưa rồi thì không chuyển,
vì vậy SPCONVERT có thể dùng sau khi D được nạp từ tệp MAT hoặc tệp ASCII
Trang 4Làm việc với các phần tử khác 0 của ma trận thưa
NNZ
Số phần tử khác 0
nz = NNZ(S) là số phần tử khác 0 trong S
NONZEROS
NONZEROS Các phần tử khác 0
NONZEROS(S) là một vectơ cột đầy đủ các phần tử khác 0 trong S Hàm này cho s, nhưng không cho
i và j như [i,j,s] = find(S)
NZMAX
Tổng số không gian lưu trữ các phần tử khác 0
Đối với ma trận thưa, NZMAX(S) là số vị trí lưu trữ phân bố cho các phần tử khác 0 trong S Với
ma trận đầy đủ, NZMAX(S) là prod(size(S)) Trong cả hai trường hợp, nnz(S) <= nzmax(S) <= prod(size(S))
SPONES
Thay thế các phần tử khác 0 với các số 1
R = SPONES(S) phát sinh một ma trận với cấu trúc thưa giống S, nhưng với các số 1 tại vị trí khác 0
SPALLOC
SPALLOC Phân bố bộ nhớ cho các phần tử khác 0
s = SPALLOC(m,n,nzmax) tạo một ma trận thưa cỡ mxn tất cả các phần tử 0 với chỗ trống để lưu nzmax phần tử khác 0 Ví dụ:
s = spalloc(n,n,3*n);
for j = 1:n
s(:,j) = (một vectơ cột thưa gồm 3 phần tử khác 0);
end
ISSPARSE
ISSPARSE Đúng nếu ma trận là ma trận thưa
ISSPARSE(S) bằng 1 nếu lớp lưu trữ của S là thưa và ngược lại thì bằng 0
SPFUN
Áp dụng một hàm chỉ cho các phần tử khác 0
F = SPFUN('fun',S) ước lượng hàm fun(s) trên các phần tử khác 0 của S Nghĩa là
F = SPFUN('exp',S) có cùng mẫu thưa như S (trừ trường hợp tràn dưới), ngược lại EXP(S) có giá trị 1 tại nơi S có giá trị 0
Xem các ma trận thưa
SPY
Trang 5SPY(S) vẽ mẫu thưa của ma trận S bất kỳ
SPY(S,color) dùng màu đánh dấu chỉ định thay cho màu vàng
SPY(S,marksize) dùng kích thước đánh dấu chỉ định thay cho kích thước phụ thuộc vào kích thước hình ảnh và kích thước ma trận
SPY(S,color,marksize) và SPY(S,marksize,color) là cho phép
GPLOT
Vẽ đồ thị theo “lý thuyết đồ thị ”
GPLOT(A,xy) vẽ đồ thị chỉ định bởi A và xy Một đồ thị, G, gồm mộtì tập các nút (đỉnh) được đánh số từ 1 đến n, và một tập các cung, hoặc cạnh, nối các đỉnh lại Để vẽ đồ thị G, cần 2
ma trận Ma trận kề, A, có a(i,j) khác 0 nếu và chỉ nếu đỉnh i được nối với đỉnh j Mảng tọa độ, xy, là một ma trận cỡ nx2 với vị trí cho đỉnh
i tại dòng thứ i xy(i,:) = [x(i) y(i)]
GPLOT(A,xy,lc) dùng kiểu đường và màu thay cho ngầm định là 'r-' Ví dụ, lc = 'g:' Xem PLOT
[X,Y] = GPLOT(A,xy) trả về các vectơ đánh dấu NaN X và Y mà không vẽ Các vectơ này có thể dùng để phát sinh đồ thị sau này nếu muốn
Các thuật toán sắp xếp lại
COLMMD
Bậc tối thiểu về cột
p = COLMMD(S) Bậc tối thiểu về cột của S Đối với một ma trận không đối xứng S, hàm này trả về một cột hoán vị p để S(:,p) có các nhân tử LU thưa hơn S
SYMMMD
Bậc đối xứng tối thiểu
p = SYMMMD(S), đối với một ma trận xác định dương đối xứng S thì trả về một hoán vị để S(p,p) có nhân tử Cholesky thưa hơn S Đôi khi SYMMMD cũng làm việc tốt đối với các ma trận đối xứng không xác định
SYMRCM
Đảo thứ tự Cuthill-McKee
p = SYMRCM(S) trả về một hoán vị p để S(p,p) có profile nhỏ hơn S Hàm này sắp trước tốt cho việc tách nhân tử LU hoặc Cholesky đối với các
ma trận nhận được từ các bài toán dài và gầy ("long, skinny") Nó làm việc cho cả hai loại S đối xứng và không đối xứng
COLPERM
COLPERM Bâc các cột dựa vào cách đếm các phần tử khác 0
Trang 6p = COLPERM(S) phát sinh một hoán vị để sắp lại
các cột của ma trận S thưa (hoặc đầy đủ) theo
thứ tự không tăng của việc đếm các phần tử
khác 0 Thường sắp trước việc tách nhân tử LU:
lu(S(:,p)) Không phải tốt nhất trong thực hành
thông thường, nhưng tính trên máy nhanh và thực
hiện công việc khá đẹp
RANDPERM
RANDPERM Vectơ hoán vị ngẫu nhiên
RANDPERM(n) là một hoán vị ngẫu nhiên của các
số nguyên từ 1 đến n Ví dụ, RANDPERM(6) có thể
là [2 4 5 6 1 3] Lưu ý rằng RANDPERM gọi hàm RAND
và do đó thay đổi giá trị khởi tạo ngẫu nhiên
của hàm RAND
DMPERM
Tách Dulmage-Mendelsohn của ma trận A
p = DMPERM(A) trả về một phù hợp tối đa; nếu
A có hạng cột đầy đủ thì A(p,:) vuông với đường
chéo khác 0
[p,q,r,s] = DMPERM(A) trả về các hoán vị để đặt
A(p,q) vào dạng khối tam giác trên:
Đối với A vuông hạng đầy đủ, A(p,q) có đường
chéo khác 0 và thành phần Hall mạnh thứ i là
khối thứ i (bi,bi) của A(p,q), với bi =
r(i):r(i+1)-1 Với A chữ nhật tổng quát, thành
phần Hall mạnh thứ i là khối (r(i):r(i+1)-1,
s(i):s(i+1)-1)
Chuẩn, số điều kiện, và hạng
NORMEST
NORMEST Ước lượng chuẩn 2 (2-norm)
NORMEST(S) là một ước lượng chuẩn-2 của ma
trận S
NORMEST(S,tol) dùng sai số tương đối tol thay cho
1.e-6
[nrm,cnt] = NORMEST(S) cũng cho số lần dùng lặp
lũy thừa
CONDEST
CONDEST Ước lượng số điều kiện chuẩn-1 Cách
sửa đổi của Higham từ phương pháp của Hager
[C, V] = CONDEST(A) tính giới hạn dưới C cho số
điều kiện chuẩn-1 của A, và vectơ V để
NORM(A*V)=NORM(A)*NORM(V)/C V là vectơ xấp xỉ 0
nếu C lớn
SPRANK
Hạng cấu trúc thưa
r = SPRANK(A) hạng về cấu trúc của ma trận thưa
A Còn gọi là luồng cực đại, phân công cực đại,
và kích thước của một phù hợp cực đại trong
đồ thị phân đôi của A Luôn luôn có sprank(A) >=
Trang 7rank(A), và trong số học sprank(A) ==
rank(sprandn(A)) với số học xác suất
Các thao tác trên cây
TREELAYOUT
TREELAYOUT Trình bày một cây hoặc rừng
[x,y,h,s] = treelayout(parent,post) với parent là
vectơ các nút cha, với 0 cho gốc post là hoán vị
hậu tự trên các nút của cây (nếu bỏ qua post
thì tính nó ở đây) x và y là các vectơ gồm
các tọa độ trong hình vuông đơn vị mà ở đó trình
bày các nút của cây để tạo ra một hình ảnh đẹp
mắt Các đối số tùy chọn, h là độ cao của cây
và s là số nút con của nút gốc
TREEPLOT
TREEPLOT Vẽ hình ảnh của một cây
TREEPLOT(p,c,d) p là vectơ các điểm cha, với
p(i) == 0 cho gốc c là màu và ký tự cho các
nút, hoặc c='' để không vẽ nút d là màu và
ký tự cho các cạnh, hoặc d='' để không vẽ cạnh
c hoặc d có thể bỏ qua, và các giá trị ngầm
định hợp lý được sử dụng
ETREE
Cây khử của một ma trận
p = etree(A) trả về một cây khử đối với một
ma trận vuông đối xứng có tam giác trên là tam
giác trên của A p(j) là cha của cột j trên cây,
hoặc 0 nếu j là gốc
p = etree(A,'col') trả về cây khử của A'*A
p = etree(A,'sym') giống p = etree(A)
[p,q] = etree( ) cũng trả về hoán vị hậu tự
q trên cây
ETREEPLOT
ETREEPLOT Vẽ một cây khử
etreeplot(A): Vẽ cây khử của A (hoặc A+A', nếu
A không đối xứng)
etreeplot(A,c,d): Xem treeplot cho các tham số
tùy chọn c và d
Trang 8
Các thao tác linh tinh
SYMBFACT
SYMBFACT Phân tích nhân tử Symbol
count = SYMBFACT(A) trả về vectơ gồm số đếm dòng của nhân tử tam giác trên nhân tử Cholesky của một ma trận đối xứng có tam giác trên là tam giác trên của A, giả sử bỏ qua trong tiến trình phân tích thừa số Phục vụ này nhanh hơn chol(A)
count = SYMBFACT(A,'col') phân tích A'*A (mà không tạo tạo nó một cách rõ ràng)
count = SYMBFACT(A,'sym') giống như p = symbfact(A) Có một số giá trị trả về tùy chọn:
[count,h,parent,post,R] = symbfact( ) cũng trả về độ cao của cây khử, chính cây khử, một hoán vị của cây khử, và ma trận 0-1 R có cấu trúc của chol(A)
SPPARMS
SPPARMS Đặt các tham số cho các phục vụ ma trận thưa
SPPARMS('key',value) đặt một hoặc nhiều tham số
"tunable" dùng cho các toán tử phương trình tuyến tính thưa, là \ và /, và các sắp xếp bậc đối xứng tối thiểu, COLMMD và SYMMMD
SPPARMS, in ra mô tả các cài đặt hiện thời
Nếu không có đối số nhập thì values = SPPARMS trả về một vectơ có các thành phần cho trong các cài đặt hiện thời
[keys,values] = SPPARMS trả về vectơ đó, và cũng trả về một ma trận ký tự có các dòng là các từ khóa cho các tham số
SPPARMS(values), không có đối số xuất, đặt tất cả các tham số vào các giá trị chỉ định bởi vectơ đối số
value = SPPARMS('key') trả về cài đặt hiện thời của một tham số
SPPARMS('default') đặt tất cả các tham số về các cài đặt mặc định của nó
SPPARMS('tight') đặt các tham số bậc tối thiểu về các cài đặt chặt chẽ của chúng, chúng có thể đẫn đến các bậc ít hơn bậc thay thế, nhưng làm cho các hàm thực hiện nhiều lần hơn Các tham số với các giá trị ngầm định và các giá trị chặt chẽ là:
từ khóa
ngầm định chặt
values(1) 'spumoni' 0
values(2) 'thr_rel' 1.1 1.0
values(3) 'thr_abs' 1.0 0.0
values(4) 'exact_d' 0
1