MATLAB Function Reference |
Syntax
d = eigs(A) d = eigs(A,B) d = eigs(A,k) d = eigs(A,B,k) d = eigs(A,k,sigma) d = eigs(A,B,k,sigma) d = eigs(A,k,sigma,options) d = eigs(A,B,k,sigma,options) d = eigs(Afun,n) d = eigs(Afun,n,B) d = eigs(Afun,n,k) d = eigs(Afun,n,B,k) d = eigs(Afun,n,k,sigma) d = eigs(Afun,n,B,k,sigma) d = eigs(Afun,n,k,sigma,options) d = eigs(Afun,n,B,k,sigma,options) d = eigs(Afun,n,k,sigma,options,p1,p2...) d = eigs(Afun,n,B,k,sigma,options,p1,p2...) [V,D] = eigs(A,...) [V,D] = eigs(Afun,n,...) [V,D,flag] = eigs(A,...) [V,D,flag] = eigs(Afun,n,...)
Description
d = eigs(A)
回傳一向量其元素為 A
六個較大的特徵值。
[V,D] = eigs(A)
回傳一對角線矩陣 D
其含有 A
的六個較大的特徵值其一矩陣 V
其欄為對應的特徵向量。
[V,D,flag] = eigs(A)
亦回傳收歛旗標。若 flag
為 0
則所有特徵值均收歛;否則並不是所有皆為收歛。
eigs(Afun,n)
接受函數 Afun
以取代矩陣 A
。y = Afun(x)
應該回傳 y = A*x
,其中 x
為一 n*1
的向量,而 n
即為 A
的尺寸。矩陣 A
藉由 Afun
來表示而且假設為實數且非對稱性。在所有呼叫的序列中,eigs(A,...)
可被 eigs(Afun,n,...)
取代。
eigs(A,B)
解廣義特徵值問題 A*V == B*V*D
。B
必須為對稱(或 Hermitian)正向定義且其尺寸等同於 A
。eigs(A,[],...)
表示標準的特徵值問題 A*V == V*D
。
eigs(A,k) and eigs(A,B,k)
回傳前 k
個大的特徵值。
eigs(A,k,sigma) and eigs(A,B,k,sigma)
根據 sigma
回傳 k
個特徵值,其可為下列值之一:
eigs(A,K,sigma,opts) 及 eigs(A,B,k,sigma,opts)
定義選項的結構:
eigs(Afun,n,k,sigma,opts,p1,p2,...)
及
eigs(Afun,n,B,k,sigma,opts,p1,p2,...)
提供額外的參數其傳送至 Afun(x,p1,p2,...)
。
Remarks
d = eig(full(A)) d = sort(d) d = d(end-k+1:end)
但卻最適合用在大型稀疏矩陣。若問題牽扯到記憶體,則其可用 eig(full(A))
以達到較快的運算。
Algorithm
eigs
提供反連結,其需要 Fortran 函式庫 ARPACK 中的程序 DSAUPD
, DSEUPD
, DNAUPD
, DNEUPD
, ZNAUPD
,
及 ZNEUPD
的支援。
Examples
A = delsq(numgrid('C',15)); d1 = eigs(A,5,'sm');
function y = dnRk(x,R,k) y = (delsq(numgrid(R,k))) * x;
則將傳送 dnRk
額外的參數 'C'
和 15
至 eigs
。
n = size(A,1); opts.issym = 1; d2 = eigs(@dnRk,n,5,'sm',opts,'C',15);
範例 2:west0479
為一實數 479*479
稀疏矩陣其含有實數及共軛複數的特微值。eig
計算所有 479 個特徵值,並選擇最大的特徵值。
此平面圖顯示由 eig
和 eigs
計算出來 west0479
其 8 個最大的特徵值。
load west0479 d = eig(full(west0479)) dlm = eigs(west0479,8) [dum,ind] = sort(abs(d)); plot(dlm,'k+') hold on plot(d(ind(end-7:end)),'ks') hold off legend('eigs(west0479,8)','eig(full(west0479))')
範例 3:A = delsq(numgrid('C',30))
為一尺寸為 632 的對稱正向定義矩陣其特徵值合理地分配在範圍 (0 8) 之間,但有 18 個特徵值重覆於 4。函數 eig
計算所有 632 個特微值。其計算並繪製 A
的前六大及前六小的特徵值:
A = delsq(numgrid('C',30)); d = eig(full(A)); [dum,ind] = sort(abs(d)); dlm = eigs(A); dsm = eigs(A,6,'sm'); subplot(2,1,1) plot(dlm,'k+') hold on plot(d(ind(end:-1:end-5)),'ks') hold off legend('eigs(A)','eig(full(A))',3) set(gca,'XLim',[0.5 6.5]) subplot(2,1,2) plot(dsm,'k+') hold on plot(d(ind(1:6)),'ks') hold off legend('eigs(A,6,''sm'')','eig(full(A))',2) set(gca,'XLim',[0.5 6.5])
然而,在 4 重覆的特徵值必須更小心地處理。eigs(A,18,4.0)
計算靠近
4.0 的 18 個特徵值以試著找出 A - 4.0*I
的特徵值。此關係著除法形式 1/(lambda - 4.0)
,其中 lambda
為 A
特徵值的近似值。當 lambda
接近 4.0 時,eigs
並沒有接近。必須使用 sigma
靠近但不等於 4 以找出那 18 個特徵值。
sigma = 4 - 1e-6 [V,D] = eigs(A,18,sigma)
平面圖顯示經由 eig
計算的 20 個特徵值其接近 4,由 eigs
計算 18 個特微值其靠近 4 - 1e-6。
See Also
References
[1] Lehoucq, R.B. and D.C. Sorensen, "Deflation Techniques for an Implicitly Re-Started Arnoldi Iteration," SIAM J. Matrix Analysis and Applications, Vol. 17, 1996, pp. 789-821.
[2] Lehoucq, R.B., D.C. Sorensen, and C. Yang, ARPACK Users' Guide: Solution of Large-Scale Eigenvalue Problems with Implicitly Restarted Arnoldi Methods, SIAM Publications, Philadelphia, 1998.
[3] Sorensen, D.C., "Implicit Application of Polynomial Filters in a k-Step Arnoldi Method," SIAM J. Matrix Analysis and Applications, Vol. 13, 1992, pp. 357-385.
eig | ellipj |