【问题标题】:Solve for the argument to a function that will produce a particular return value求解将产生特定返回值的函数的参数
【发布时间】:2015-12-07 16:09:41
【问题描述】:

假设我有一个x的Python函数y,其中x必须是一个数字,返回值总是一个数字。 y 是一个变量的数学函数。

Python 中是否有一个函数(例如,numpyscipy 等)能够求解产生所需返回值的x 的特定值——使用,比如梯度下降?

我正在寻找可以执行以下操作的 magic_function

>>> from my_module import y
>>> from magic_package import magic_function
>>> desired = 10
>>> x = magic_function(y, desired)
>>> y(x)
10

【问题讨论】:

  • 也许你想要root finding function
  • @Evert 很好,这适用于desired = 0 的特殊情况。我想我想要的是scipy.optimize.minimize,其中fun 传递给minimizey(x) - desired
  • 当然不是:x = scipy.optimize.root(y-desired, xguess) 它适用于您的 desired 值。
  • @Evert 啊,好电话。是的,我想我们的任何一个选择都有效。我忘了我的工作必须是abs(y(x) - desired)
  • y - desired 可能是错误的形式,但您可以轻松地将其包装起来:def newy(x): return y(x) - desired 或类似的。然后将newy 传递给scipy.optimize.root

标签: python numpy optimization scipy solver


【解决方案1】:

您可以将函数 y(x) 包装起来,使其偏移所需的值。下面是一个简单的演示,展示了如何做到这一点:

def y(x):
    return x*x

def offset_function(f, desired=0):
    def newf(x):
        return f(x) - desired
    return newf

y9 = offset_function(y, 9)

for x in range(5):
    print x, y(x), y9(x)

输出

0 0 -9
1 1 -8
2 4 -5
3 9 0
4 16 7

不过,使用lambda 会更简单:

y9 = lambda x: y(x) - 9

您可以像这样将它传递给您的根查找器:

scipy.optimize.root(lambda x: y(x) - 9, xguess)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 2019-11-06
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
相关资源
最近更新 更多