首页 文章

使用args传递单个参数时,Scipy.optimize.minimize给出错误

提问于
浏览
0

给出以下值

a = 100.0
b = 50.0
c = 200.0

以下代码有效(它没有做任何有趣的事)

def excessRevenue1(taxH,blah1,blah2):
    return taxH**2 + blah1 + blah2
    print optimize.minimize( excessRevenue1,c,args=(a,b) ).x

但是下面的代码产生错误<< TypeError:只能将元组(不是“float”)连接到元组>> . 但唯一的区别似乎是我只传递了一个参数而不是两个 .

def excessRevenue2(taxH,blah1):
    return taxH**2 + blah1
print optimize.minimize( excessRevenue2,c,args=(a) ).x

1 回答

  • 0

    现在Python认为 args 参数是一个浮点数,而不是一个元组,所以你只需要添加一个逗号 .

    print optimize.minimize( excessRevenue2,c,args=(a,)).x
    

    那么,现在函数将按预期工作,即:

    from scipy import optimize
    
    a = 100.0
    b = 50.0
    c = 199.9
    
    def excessRevenue1(taxH,blah1,blah2):
        return taxH**2 + blah1 + blah2
    
    def excessRevenue2(taxH,blah1):
        return taxH**2 + blah1
    
    print optimize.minimize( excessRevenue2,c,args=(a,)).x
    print optimize.minimize(excessRevenue1,c,args=(a,b)).x
    

    会回来:

    >>> print optimize.minimize( excessRevenue2,c,args=(a,)).x
    [ -1.65480420e-07]
    >>> print optimize.minimize(excessRevenue1,c,args=(a,b)).x
    [ -1.65480420e-07]
    

相关问题