1. Trang chủ
  2. » Công Nghệ Thông Tin

IT - Matlab Software (Phần 2) part 9 potx

8 366 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 162,32 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

tử 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 2

0 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 3

quả 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 4

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 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 5

SPY(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 6

p = 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 7

rank(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

Ngày đăng: 10/07/2014, 02:20

TỪ KHÓA LIÊN QUAN