2017-05-07 83 views
1

我想用scipy.optimize.broyden2功能使用scipy.optimize.broyden2,問題是,我的功能不只是把數組作爲參數,但多了很多參數。與接收幾個參數

我該怎麼辦?定義全局變量?

這些都是我的功能:

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 

我想用broyden2euler,其中x0initial_values

+0

定義全局變量一般不Python化的解決方案。不知道更多關於你的問題,Python化的解決方案可能是定義一個函數,它接受您的參數,創建一個數組,使用'scipy.optimize.broyden2',然後返回scipy.optimize.broyden2'的'結果。但如果不瞭解您的參數或問題,很難多說。 –

+0

你可以重構使用*參數或類似的東西。你能告訴我們你現在的代碼嗎?很難理論上的工藝,更好地看到實際問題。 – mwm314

+0

@ mwm314我加了我的功能。 – OiciTrap

回答

1

正如在評論中建議,您可以使用解包的使用*list語法參數列表,並與調用您的主要功能的輔助功能。一個最小的例子如下所示,其中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.])