Main Content

spfun

スパース行列の非ゼロ要素に関数を適用

説明

F = spfun(func,S) は、関数 func をスパース行列 S の非ゼロ要素に適用します。入力引数 func は関数ハンドルであり、この関数は 1 つの入力引数を取ります。

この操作は、関数 funcS の非ゼロ要素にゼロを返す場合を除き、元の行列 S のスパース性を保持します。

すべて折りたたむ

4 行 4 列のスパース対角行列を作成します。

S = diag(sparse(1:4))
S = 
   (1,1)        1
   (2,2)        2
   (3,3)        3
   (4,4)        4

指数関数を S の非ゼロ要素に適用します。結果の行列は、S と同じスパース パターンをもちます。

F = spfun(@exp,S)
F = 
   (1,1)       2.7183
   (2,2)       7.3891
   (3,3)      20.0855
   (4,4)      54.5982

spfunS の非ゼロ要素だけに適用されるため、S(i) がゼロの場合は F(i) の値がゼロになります。これは関数を S のすべての要素に適用することとは異なります。たとえば、指数関数を S のすべての要素に適用することと、この結果を比較します。関数 exp(S) は、S0 である要素に対して 1 を返します。

full(exp(S))
ans = 4×4

    2.7183    1.0000    1.0000    1.0000
    1.0000    7.3891    1.0000    1.0000
    1.0000    1.0000   20.0855    1.0000
    1.0000    1.0000    1.0000   54.5982

密度が 0.02 のランダムな 5050 列のスパース行列を作成します。この行列は 50 個の非ゼロ要素をもちます。行列 S のスパース パターンをプロットします。

rng default;
S = sprand(50,50,0.02);
spy(S)

Figure contains an axes object. The axes object with xlabel nz = 50 contains a line object which displays its values using only markers.

二次関数 x2+x+1S の非ゼロ要素で評価します。spfun を使用して評価した関数は、行列 S と同じスパース パターンをもちます。

fun = @(x) x.^2 + x + 1;
F = spfun(fun,S);
spy(F)

Figure contains an axes object. The axes object with xlabel nz = 50 contains a line object which displays its values using only markers.

入力引数

すべて折りたたむ

入力行列。この行列は通常スパースですが、必ずしもスパースに限りません。

S が非スパース行列の場合、F = spfun(func,S) は関数 funcS の非ゼロ要素に適用して、F をスパース行列として返します。

データ型: double | logical
複素数のサポート: あり

入力配列の要素に適用する関数。関数ハンドルとして指定します。関数は S を要素単位で処理しなければなりません。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

例: @(n) n+1

ヒント

  • func がゼロである入力に対してゼロを返す場合、func(S) を使用して、スパース行列 S での spfun の呼び出しと同じ結果を返すことができます。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入