1

現在使用している線形連立方程式を解いています

   numpy.linalg.solve

線形システムの解を返します。反復を実行できるようなコントロールが必要です

別の選択肢を検討中

    scipy.optimize.minimize

ドキュメントには、反復ごとに呼び出される関数を指定でき、現在のパラメーターを指定できることが記載されています。現在の合成ベクトルを取得できるという意味かどうかはわかりません。たとえば、単純に、Ax=b を解いている間、反復ごとに x にアクセスしたいだけです。

誰かがそれを使って説明できるかどうか疑問に思っています!

ありがとう

4

1 に答える 1

2

callbackキーワード引数 toはscipy.optimize.minimize、各反復で関数を最小化する引数の現在の見積もりで呼び出される関数を指定します。

しかしminimize、スカラー関数 (単一の値を返す関数) を対象としているため、それがあなたの例にどのように適用されるかわかりません。scipy.optimize.fsolve代わりに試してみることをお勧めします。callbackただし、キーワードは受け入れません。これを回避するには、呼び出し可能な関数オブジェクト ( を返すAx-b) で線形方程式をラップし、呼び出し可能なオブジェクトに渡される引数を取得するだけです。

class Ab:
    def __init__(self, A, b):
        self.A = A
        self.b = b
    def __call__(self, x):
        print 'x =', x
        return A.dot(x) - b

次に、次のように使用します。

>>> A = np.array([[2, 3], [4, 9]], float)
>>> b = np.array([5, 5])
>>> f = Ab(A, b)
>>> optimize.fsolve(f, [0, 0])
x = [0 0]
x = [ 0.  0.]
x = [ 0.  0.]
x = [  1.49011612e-08   0.00000000e+00]
x = [  0.00000000e+00   1.49011612e-08]
x = [ 5.         -1.66666667]
x = [ 5.         -1.66666667]
array([ 5.        , -1.66666667])

fsolveは 5 回の反復しか行わなかったと報告されているため、最初の 2 つの呼び出しは実際には収束に使用されていないようです。

于 2013-02-21T18:00:52.230 に答える