scipy“最小化一组方程的平方和”

2024-09-27 09:34:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我在scipy'leatsq'优化程序中遇到了一个问题,如果我执行以下程序

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

有时index out of range for an array。。。在

^{pr2}$

我不知道我的函数有什么问题优化.leatsq()打电话来,请帮帮我


Tags: of程序infoforinputindexrangescipy
3条回答

仅仅看一下least squares docs,可能是函数{}的定义不正确。假设您总是收到长度至少为2的数组,但是优化函数对于将要接收的数组的长度非常模糊。你可以试着写些东西来屏蔽apar是什么,看看你到底得到了什么。在

如果您使用的是ipython或pythonshell,那么应该得到堆栈跟踪,以准确地显示错误发生在哪一行,所以从这里开始。如果你不能从那里找到答案,发布堆栈跟踪可能会对我们有所帮助。在

因为您希望最小化一个简单的标量函数(func()返回一个值,而不是一个值列表),scipy.optimize.leastsq()应该被一个对fmin函数之一的调用(带有适当的参数)来代替:

x = optimize.fmin(func, Init)

正确工作!在

事实上,leastsq()最小化了一系列值的平方和。它似乎不适用于(包含)单个值的列表,就像在您的示例中一样(即使理论上可以)。在

leastsq与向量一起工作,因此剩余函数func需要返回长度至少为2的向量。因此,如果您将return eqn替换为return [eqn, 0.],那么您的示例将起作用。运行它可以:

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

这是关于绝对差最小的众多正确答案之一。在

如果你想最小化一个标量函数,fmin是最好的选择,optimize.fmin(func, Init)。在

这里的问题是,这两个函数虽然看起来相同,但对于标量来说,它们的目标是不同的。leastsq通常从一组理想曲线中找出最小平方误差,这只是实现“最佳拟合”的一种方法。另一方面,fmin找到标量函数的最小值。在

很明显你的例子是个玩具,这两个都没有意义,所以你走哪条路取决于你的最终目标是什么。在

相关问题 更多 >

    热门问题