2015-01-09 2 views
1

, так что я просто немного запутался, как scipy.optimize.fmin принимает аргументыSciPy Fmin аргумент прохождения

говорят, у меня есть две функции:

def func_1(x, y): 
    return (x*x) + (y*y) 

def func_2(x, y, a): 
    return ((x-a)*(x-a)) + ((y-a) *(y-a)) 

в func_1 Я просто хочу, чтобы минимальные значения для x и y, а в func_2 мне бы хотелось передать значение a, а затем найти min vals для x и y. Я прочитал некоторые другие вопросы в связи с этим, и я все еще немного смущен.

попытки вызова: fmin(fund_1, [1,1]) результаты в: fmin() takes at least 2 arguments (1 given)

Большое спасибо!

ответ

2

Во-первых, изменить подпись func_1 и func_2 к чему-то вроде:

def func_1(t): 
    x,y=t 
    return (x*x) + (y*y) 

def func_2(t, a): 
    x,y=t 
    return ((x-a)*(x-a)) + ((y-a) *(y-a)) 

В первом случае используйте

from scipy.optimize import fmin 
from numpy import array 
fmin(func_1,array([1,1])) 

Во втором случае, вы должны перейти к fmin Аргумент args=(a,) , Он будет делать то, что вы описываете,

fmin(func_2,array([1,1]),args=(3,)) 
+0

И первый? Я продолжаю пытаться передать: fmin (func_1, [1,1]), а fmin() принимает не менее 2 аргументов (1 данный). Это очень запутывает меня –

+0

Ahhh, хорошо, поэтому fmin оптимизирует вектор? I.E любой параметр, который я пытаюсь решить, должен содержаться в массиве? –

+0

вид, да. первый аргумент 'func_1/func_2', который выше' t', является векторной величиной. Все остальные, появляющиеся в подписи 'func_2', которые в этом случае просто' a', являются дополнительными аргументами, которые должны быть переданы в 'fmin' через' args = (a,) 'как кортеж. – gg349

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