2015-12-05 3 views
2
import numpy as np 
import scipy.optimize as spo 

def function(x,y): 
    return (np.sin(x*y+y)*np.exp(-1*(x**2+y**2)))**-1 


xi=[0,0]  
answer=spo.fmin(function,xi) 
print 'the answer is', answer 

Я пытаюсь свести к минимуму эту функцию. Однако работает она воспитываетTypeError: function() принимает ровно 2 аргумента (1 задано) (python)

TypeError: function() takes exactly 2 arguments (1 given) 

ответ

1
scipy.optimize.fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None) 

параметр FUNC является вызываемая func(x,*args)

В этом случае fmin вызова function с одним параметром - x (который xi). Второй параметр должен быть передан как параметр args.

xi = 0 
args = (0,) 
answer = spo.fmin(function, x0=xi, args=args) 

http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.optimize.fmin.html

1

Является ли ваше намерение свести к минимуму за 2 переменных ('х', 'у'), или через только один (с 'у' в качестве дополнительного параметра)?

def fn1(x, y): 
    # x is minimization variable 
    # y is extra argument 
    return (np.sin(x*y+y)*np.exp(-1*(x**2+y**2)))**-1 

def fn2(xy): 
    # xy is minimization variable; assumed to be 2 elements 
    x,y = xy            
    return (np.sin(x*y+y)*np.exp(-1*(x**2+y**2)))**-1 

fmin с 1 переменной; терпит неудачу

In [35]: optimize.fmin(fn1, x0=0, args=(0,)) 
Warning: Maximum number of function evaluations has been exceeded. 
Out[35]: array([ 0.]) 

fmin с 2 элемента массива (x0 и функции); возвращает 2 элемента массива.

In [38]: optimize.fmin(fn2, x0=np.array([0,0])) 
Optimization terminated successfully. 
     Current function value: 2.227274 
     Iterations: 64 
     Function evaluations: 121 
Out[38]: array([ 0.29782369, 0.62167083]) 
Смежные вопросы