假设我有以下函数(非常简单,用来解释问题的要点):
def func(a=None, b=None, c=None):
return 100-(a+b*c)
此函数的最终目的是在已知其他两个参数(例如结果等于0)的情况下找到根,即对一个参数进行求解.
如果我想使用Scipy的fsolve函数来求解a
,当b
和c
已知时,这不是问题:
>>> from scipy import optimize
>>> dat = {"b":1, "c":2}
>>> optimize.fsolve(lambda x: func(x, **dat), x0=0)
array([98.])
如果我想要求解不在第一个位置的任何参数(例如,c
),它就会变成一个问题:
>>> dat = {"a":1, "b":2}
>>> optimize.fsolve(lambda x: func(x, **dat), x0=0)
TypeError: func() got multiple values for argument 'a'
我想一个解决方案是将值为None
的参数设置为固定的"第一位置"参数,但我不知道如何做到这一点,甚至不知道这是否可能.
当然,"愚蠢"的解决方案是创建三个不同的函数来考虑所有可能的用例(当a
是未知的,当b
是未知的,当c
是未知的),但在我看来这不是一种非常有效的方法.此外,我将来可能会遇到类似的问题,因为函数的参数比这个多得多.
当然,单个参数可以设置为None
,但我单独处理这个问题,所以我们可以假设始终有一个未知值--唯一的问题是,这个未知值的参数可以是任何一个参数.我希望能够"告诉"Scipy求解这None
个值,无论它的参数位于什么位置.