我正在解决目前正在使用的线性方程组
numpy.linalg.solve
它返回线性系统的解。 我希望有一个控件,以便我可以执行迭代
考虑另一种选择
scipy.optimize.minimize
文档描述了我们可以指定一个被调用的函数 每次迭代后我们都可以获得当前参数。 我不确定他们是否意味着我们可以得到当前的合成矢量。 例如,我想在每次迭代后访问x,而我们正在解决Ax = b
我想知道是否有人使用它并且可以解释!
由于
答案 0 :(得分:2)
callback
的{{1}}关键字参数指定了一个函数,该函数将使用参数的当前估计来调用,该参数在每次迭代时最小化函数。
但是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])
报告只进行了5次迭代,因此看起来前两次调用可能实际上并未用于收敛。