我面对SciPy的“leastsq”优化例程一个问题,如果我执行下面的程序,它说

    raise errors[info][1], errors[info][0]
TypeError: Improper input parameters.

和有时index out of range for an array ...

from scipy import *
import numpy
from scipy import optimize
from numpy import asarray
from math import *

def func(apar):
  apar = numpy.asarray(apar)
  x = apar[0]
  y = apar[1]
  eqn = abs(x-y)
  return eqn

Init = numpy.asarray([20.0, 10.0])
x = optimize.leastsq(func, Init, full_output=0, col_deriv=0, factor=100, diag=None, warning=True)
print 'optimized parameters: ',x
print '******* The End ******'

我不知道什么是我的FUNC optimize.leastsq()调用的问题,请大家帮我

有帮助吗?

解决方案

leastsq可与载体所以残留功能,func,需要返回长度的至少两个的向量。所以,如果你更换return eqn return [eqn, 0.],你的例子会工作。运行它给出:

optimized parameters:  (array([10., 10.]), 2)

这是最小的绝对差的许多正确答案中的一个。

如果你想以最小化标量函数,fmin是要走的路,optimize.fmin(func, Init)

这里的问题是,这两个功能,虽然它们看起来一样的标量是针对不同的目标。 leastsq发现最小二乘误差,通常从一组理想的曲线,而且是做一个“最适合”只是其中一种方法。在另一方面fmin找到一个标量函数的最小值。

显然,你是一个玩具例如,对于没有这些真的是有道理的,所以哪种方式你去将取决于你的最终目标是什么。

其他提示

由于要最大限度地减少一个简单的标量函数(func()返回一个值,而不是值的列表),scipy.optimize.leastsq()应当通过调用替换到的fmin功能之一(使用适当的参数):

x = optimize.fmin(func, Init)

正常工作!

在事实上,最小化leastsq()值的列表的平方的总和。它不会出现单一值(包含列表)上的工作,因为在你的例子(尽管它在理论上)。

scroll top