F. 疎行列関係の話

full()
疎行列形式のデータから普通の行列形式のデータを作る。
find()
行列の非零要素を求める。 [i,j,s]=find(A); としたとき、 $ A=(a_{ij})$ , $ \texttt{i}=(i_1,\dots,i_N)$ , $ \texttt{j}=(j_1,\dots,j_N)$ , $ \texttt{s}=(s_1,\dots,s_N)$ とおくと、 $ a_{i_kj_k}=s_k$ ( $ k=1,\cdots,N$ ) であり、 これが $ A$ の非零要素全体となる。
spy()
スパース・パターンの表示 (可視化)
sparse()
疎行列形式のデータを作る。
  1. A が普通の行列であるとき、S=sparse(A) とすると、 S は数学的には同じ (fulll(sparse(A))A と 同じということか) 内容の疎行列になる。
      [i,j,s]=find(A);
      [m,n]=size(A);
      S=sparse(i,j,s,m,n);
    
  2. sparse(i,j,s,m,n,nzmax) (i, j, s は次元が同じ ($ N$ とする) ベクトルで、 ij は成分が自然数 ( $ 1\le\texttt{i}\le m$ , $ 1\le\texttt{j}\le n$ , $ \texttt{nzmax}\ge N$ ) は $ \texttt{m}\times\texttt{n}$ 型の行列で、 非零成分全体が $ a_{i(k)j(k)}=s(k)$ ( $ k=1,2,\dots,N$ ) で あるような疎行列データを作る。 nzmax を省略した sparse(i,j,s,m,n) は、sparse(i,j,s,m,n,$ N$ ) と同じである。 さらに mn を省略した sparse(i,j,s) では、 sparse(i,j,s, $ \max\{\texttt{i}(k)\}$ , $ \max\{\texttt{j}(k)\}$ ) となる。

疎行列形式の単位行列を作るには、 speye(n,n) あるいは sparse(1:n,1:n,1) とする。

spalloc()
S=spalloc(m,n,nzmax); は、 S=sparse([],[],[],m,n,nzmax) と等価。
spdiag()
  n=5;
  e=ones(n,1);
  S=spdiag([-e,2*e,-e],-1:1,n,n);

桂田 祐史
2017-06-19