【发布时间】:2015-06-12 19:26:42
【问题描述】:
我正在学习 scipy 中的优化函数。我想使用可以提供函数梯度的 BFGS 算法。作为一个基本示例,我想最小化以下函数: f(x) = x^T A x ,其中 x 是一个向量。
当我在 python 中实现它时(见下面的实现),我得到以下错误:
message: 'Desired error not necessarily achieved due to precision loss.'
将错误追溯到源头让我找到了 scipy 的函数,它执行线搜索以确定步长,但我不知道为什么在这样一个简单的示例中它会失败。
我的实现代码如下:
# coding: utf-8
from scipy import optimize
import numpy as np
# Matrix to be used in the function definitions
A = np.array([[1.,2.],[2.,3.]])
# Objectve function to be minimized: f = x^T A x
def f(x):
return np.dot(x.T,np.dot(A,x))
# gradient of the objective function, df = 2*A*x
def fp(x):
return 2*np.dot(A,x)
# Initial value of x
x0 = np.array([1.,2.])
# Try with BFGS
xopt = optimize.minimize(f,x0,method='bfgs',jac=fp,options={'disp':1})
【问题讨论】:
标签: python optimization scipy