1

こんにちは、みんな!!!

次の形式の一般化された固有分解を計算したい:

Lf=ラムダAf

scipy.sparse.linalg.eigs関数を使用しますが、次のエラーが発生します:

/usr/local/lib/python2.7/dist-packages/scipy/linalg/decomp_lu.py:61:RuntimeWarning:対角線の数65は正確にゼロです。特異行列。RuntimeWarning)**DLASCLパラメーター番号4への入力時に不正な値がありました

対角行列、正半定値(PSD)行列、数値K(最初のK個の固有値)の3つの引数を渡します。Matlabのeigs関数は、同じ入力パラメーターを使用してうまく機能しますが、私が理解しているように、SciPyでは、PSDで計算するために、シグマパラメーターも指定する必要があります。

だから、私の質問は、MatLabのようにシグマパラメータの設定を回避する方法はありますか、そうでない場合は、シグマ値を取得する方法はありますか?

アドバイスやヒントをお待ちしております...よろしくお願いします!

4

1 に答える 1

1

エラーは、一般化された固有値の問題で

L x = lambda A x

行列 A は正定値ではありません (eigs docstring を確認してください。この場合、行列はおそらく特異です)。これは ARPACK モード 2 の要件です。ただし、sigma=0ARPACK モード 3 に切り替えるように指定することもできます (ただしwhich、この場合、パラメーターの意味が逆になることに注意してください!)。

さて、Matlab が何をしているのかはわかりませんが、可能性としては、 の逆ではなく疑似逆を計算している可能性がありAます。これをエミュレートするには、次のようにします。

from scipy.sparse.linalg import LinearOperator
from scipy.linalg import lstsq

Ainv = LinearOperator(matvec=lambda x: lstsq(A, x)[0], shape=A.shape)
w, v = eigs(L, M=A, Minv=Ainv)

結果を確認してください --- この場合どうなるかわかりません。

または、ゼロ以外の値を指定してみてくださいsigma。何を選択する必要があるかは、関連するマトリックスによって異なります。これは、選択される固有値に影響を与えます --- たとえば、大きい固有値がwhich='LM'ありますlambda' = 1/(lambda - sigma)lambda'それ以外の場合は、おそらく任意に選択できます。もちろん、関心のある変換された固有値が他の固有値から十分に分離されている場合は、クリロフの進行にとっておそらくより良いでしょう。

于 2012-10-24T20:59:03.050 に答える