【问题标题】:how to write the scipy.optimize.minimize()'s parameter如何编写 scipy.optimize.minimize() 的参数
【发布时间】:2014-12-29 10:27:41
【问题描述】:

我正在使用 scipy.optimize.minimize() 来获取最小值,它是 x,y

    def fun(self):
    cols=self.maintablewidget.columnCount()-1
    for k in range(3,cols):
        for i in range(1,k):
            d=string.atof(self.maintablewidget.item(i-1,k-1).text())
            xi=string.atof(self.xytablewidget.item(i-1,0).text())
            yi=string.atof(self.xytablewidget.item(i-1,1).text())
            f=lambda x,y: np.sum((np.sqrt((x-xi)**2+(y-yi)**2)-d)**2)

        res=optimize.minimize(f,0,0)#I do not know how to give the optimize.minimize's parameter
        print(res['x'][0])
        print(res['x'],res['fun'])

不知道怎么给optimize.minimize的参数。有人可以向我解释我该怎么做吗?

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    看看the documentation。本质上,如果您的函数依赖于两个参数,您需要将它们作为x[0]x[1] 而不是xy 传递。所以最终你的函数将依赖于单个向量参数x。例如:

    f = lambda x: np.sum((np.sqrt((x[0]-xi)**2+(x[1]-yi)**2)-d)**2)
    res = optimize.minimize(f, (initial_x, initial_y))
    

    最小值将在res.x 中,并将具有矢量[x, y] 的形式。

    【讨论】:

    • TypeError: minimize() 需要至少 2 个参数(给定 1 个)这是一个错误
    • 抱怨是因为你只给了f。您还必须输入初始值。
    • 我是这样写的。 res=optimize.minimize(f,(0,0)),但是还是有问题。 TypeError: () 只需要 2 个参数(给定 1 个)
    • 你是否重写了你的函数f,使它只需要一个参数x?它应该是这样的:f=lambda x: np.sum((np.sqrt((x[0]-xi)**2+(x[1]-yi)**2)-d)**2)
    • f=lambda x,y: np.sum((np.sqrt((x-xi)**2+(y-yi)**2)-d)**2) 我我是 scipy 的新手。感谢您的帮助。
    猜你喜欢
    • 2019-03-31
    • 1970-01-01
    • 2022-01-15
    • 2017-11-13
    • 1970-01-01
    • 2019-01-23
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多