2015-09-11 2 views
0

Предположим, что у меня есть функция Python y из x, где x должно быть числом, а возвращаемое значение всегда является числом. y - математическая функция одной переменной.Решите для аргумента функции, которая даст определенное возвращаемое значение

Есть функция в Python (то есть, в numpy, scipy и т.д.), которые были бы в состоянии решить для конкретного значения (ов) для x, который производит желаемое значение возврата - с помощью, например, градиентный спуск ?

Я ищу для magic_function, что бы сделать что-то вроде этого:

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

Возможно, вам нужна функция поиска корня (http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.root.html#scipy.optimize.root)? – Evert

+0

@ Наверное, это будет работать для специального случая 'желательно = 0'. я думаю, что я хочу, это 'scipy.optimize.minimize', где' fun' передано 'minim''' y (x) - желательно'. – dbliss

+1

Конечно, нет: 'x = scipy.optimize.root (y-wish, xguess)', и он работает независимо от вашего 'желаемого' значения. – Evert

ответ

2

Вы можете обернуть функцию у (х), так что это компенсировалось нужное значение. Вот простой демо долгий путь, чтобы сделать это:

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) 
+1

Думаю, я бы только отметил, что в 'scipy.optimize' есть тонна функций в стороне от' root', которые могут выполнить эту общую функциональность: http://docs.scipy.org/doc/scipy/reference/ optimize.html. – dbliss

+0

@dbliss: достаточно справедливо. Я не знаю, scipy; Я использую mpmath. –

Смежные вопросы