2012-12-02 11 views
30

SciPy documentation के अनुसार कई चर के साथ कार्यों को कम करना संभव है, फिर भी यह नहीं बताता कि इस तरह के कार्यों पर अनुकूलित कैसे करें।साइपी के अनुकूलन में एकाधिक चर।

from scipy.optimize import minimize 
from math import * 

def f(c): 
    return sqrt((sin(pi/2) + sin(0) + sin(c) - 2)**2 + (cos(pi/2) + cos(0) + cos(c) - 1)**2) 

print minimize(f, 3.14/2 + 3.14/7) 

ऊपर कोड समारोह f कम करने की कोशिश करता है, लेकिन मेरी कार्य के लिए मैं तीन चर के संबंध में कम से कम करने की जरूरत है।

बस एक दूसरा तर्क पेश करना और तदनुसार समायोजित करना एक त्रुटि उत्पन्न करता है (TypeError: f() takes exactly 2 arguments (1 given))।

एकाधिक चर के साथ कम करने पर minimize कैसे काम करता है।

उत्तर

39

पैक एक एकल सरणी में कई चर:

import scipy.optimize as optimize 

def f(params): 
    # print(params) # <-- you'll see that params is a NumPy array 
    a, b, c = params # <-- for readability you may wish to assign names to the component variables 
    return a**2 + b**2 + c**2 

initial_guess = [1, 1, 1] 
result = optimize.minimize(f, initial_guess) 
if result.success: 
    fitted_params = result.x 
    print(fitted_params) 
else: 
    raise ValueError(result.message) 

पैदावार

[ -1.66705302e-08 -1.66705302e-08 -1.66705302e-08] 
संबंधित मुद्दे