微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Scipy.optimize中最小化,其中函数具有两个输入向量

如何解决从Scipy.optimize中最小化,其中函数具有两个输入向量

我正在学习python和scipy。在我的自学过程中,我尝试使用scipy.optimize

来最小化以下功能
>   def opti_min(sr1_opt,sr3_opt):
>     op = np.sqrt(np.sum(sr1_opt)+np.sum(sr3_opt))
>     return op


opt = minimize(opti_min,strip,method = 'nelder-mead')

sr1_opt是一个列表:- [6.536055555554877e-07, 6.668262226847675e-07, 4.935691987513913e-07, 6.422222222223324e-07, 7.493249219562971e-07, 7.812500000001055e-07, 8.513020291362223e-07]

sr3_opt也是一个列表:- [4.127111433753003e-06,4.419413067362789e-06,4.721714700973233e-06]

strip也是用于初始值的列表: 条= [0.0025,0.005]

sr1_opt值计算为(实际值-strip [0])** 2和 列表中每个条目的sr3_opt值计算为(实际值-strip [1])** 2。

因此,所需的输出是将最小化变量“ op”的条带值

我得到的错误是: TypeError:opti_min()缺少1个必需的位置参数:“ sr3_opt”

我想念什么?

更重要的是,如果我希望带材的输出大于零,应该使用哪种方法进行约束最小化? 在此先感谢

解决方法

您可以在文档底部看到一个示例,该示例用于最小化页面底部的两个参数的功能... https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html

在您的情况下,您将opti_min视为二维变量strip的函数:

values = [0.12,0.65,...] # whatever your values are

def opti_min(strip,values=values):
    # get your lists of edited values
    sr1_opt = [(value - strip[0])**2 for value in values]
    sr3_opt = [(value - strip[1])**2 for value in values]

    # perform your sum
    return np.sqrt(np.sum(sr1_opt)+np.sum(sr3_opt))
    
# init your initial estimate
strip0 = np.array([0.0025,0.005])

res = minimize(opti_min,strip0,method='nelder-mead')

# print result
print(res.x)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。