2017-05-07 1 views
1

scipy.optimize.broyden2을 사용하고 싶습니다. 문제는 내 함수가 배열을 인수로 사용하지 않고 더 많은 매개 변수를 사용한다는 것입니다.몇 가지 매개 변수를받는 함수로 scipy.optimize.broyden2를 사용합니다

어떻게해야합니까? 전역 변수를 정의 하시겠습니까?

이들은

내 기능은 다음과 같습니다

나는 x0initial_valueseulerbroyden2를 사용하려면
def F(S, I, R, alpha, beta): 
    return [- beta * S * I, beta * S * I - alpha * R, alpha * R] 

def euler(xi, xf, m, F, initial_values, alpha, beta): 
    h = (xf - xi)/m 

    t = np.linspace(xi, xf, m + 1) 
    t = np.delete(t, 0) 

    vect_y = [initial_values[0], initial_values[1], initial_values[2]] 

    for i in range(len(t)): 
     y_actual = [sum(x) for x in zip(vect_y, [element * h for element in F(vect_y[0], vect_y[1], vect_y[2], alpha, beta)])] 
     vect_y = y_actual 

    return vect_y 

.

+0

일반적 파이썬 용액 아니다. 문제에 대해 더 많이 알지 못하면 Pythonic 솔루션은 매개 변수를 취하는 함수를 정의하고,'scipy.optimize.broyden2'를 사용하도록 배열을 생성 한 다음'scipy.optimize.broyden2'의 결과를 반환합니다. 그러나 매개 변수 나 문제에 대해 알지 못해도 더 많은 것을 말하기는 어렵습니다. –

+0

당신은 * args 같은 것을 사용하도록 리팩터링 할 수 있습니다. 현재 코드를 보여줄 수 있습니까? 이론 공예에 열심히, 실제 문제를 더 잘 보게. – mwm314

+0

@ mwm314 제 기능을 추가했습니다. – OiciTrap

답변

1

의견에서 제안한 바와 같이 *list 구문을 사용하여 인수 목록을 압축 해제하고 main 함수를 호출하는 보조 함수를 사용할 수 있습니다. 다음은 최소 예제입니다. f은 루트가 발견 된 함수입니다.

from scipy.optimize import broyden2 
def f(x, y, z): 
    return [x-1, y-2, z-3] 
broyden2(lambda X: f(*X), [0, 0, 0]) 

출력 : 전역 변수를 정의 array([ 1., 2., 3.])

관련 문제