2017-02-16 46 views
0

對於上下文,我基本上使用一個數值積分器,它接受一組定義爲函數的微分方程。一大組這些函數遵循一個規則模式,我想在一個循環中定義它們(或者任何最合適的方法)。例如;實現方程矩陣:使用循環定義函數(Python)

#system coordinates 
s = [y1,y2] 

#system equations 
def e1(s): 
    x1 = s[1]**2 + 1 
    return x1 

def e2(s): 
    x1 = s[2]**2 + 2 
    return x1 

#equations of motion 
eom = [e1,e2] 

並非所有的功能將遵循精確的模式,而這樣做的,雖然理想我需要這樣的東西,

def en(s) 
    x1 = s[n]**2 + n 
    return x1 

它可以遍歷一個範圍「N」的值。感謝您的任何建議。

回答

0

爲什麼不直接使用第二個參數的功能,像這樣:

def en(s, n) 
    x1 = s[n]**2 + n 
    return x1 

result = [] 
for i in range(100): # 100 is just for illustration purposes.. 
    result[0] = en(s, i) # you do not have to store them in a list. just an example 
+0

謝謝你,這就是我目前嘗試,現在問題是存儲這些方程與那些不遵循模式的方程,例如。 'eom = [e0,e1,e2]'是我稱之爲等式的列表,而'e0'與其他的不同。 – user12800

+0

您只需要一個具有更多參數的方程,而不是每個具有一個參數的100個方程。 –

+0

你甚至可以將索引從你添加的值中分離出來,例如'x1 = s [n] ** 2 + a',而'a'是傳遞給'en'函數的第三個參數 –

0

我會用partial,至極值綁定到函數的參數:

import functools 

def e1(s, n, v1, v2): 
    x1 = s[n]**v1 + v2 
    return x1 

[functools.partial(e1, n=i, v1=2, v2=1) for i in range(10)] # this was your first example 

#your second example 
[functools.partial(e1, n=n, v1=2, v2=n) for n in range(10)] 
+0

'partial'對於這個例子imho –

+0

@ Ev.Kounis,正如他在例子'eom = [e1,e2]中顯示的那樣''他想要一個可調用列表,而不是一列值,你的回答不是他正在搜索的。所以實際上'部分'是要走的路 – Netwave

+0

這是一個XY問題。在所有應有的尊重,他認爲他有,但他沒有。要求許多不同的可馴化物都可以做同樣的事情是沒有意義的。 –