2017-02-16 7 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, значения связывания Wich для аргументов функций:

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]' он хочет список вызываемых вызовов, а не список значений, ваш ответ не является тем, что он ищет. Так что фактически 'partial' - это способ пойти – Netwave

+0

Это проблема XY. При всем уважении, он думает, что он это делает, он этого не делает. Не имеет смысла требовать много разных вызовов, которые все делают одно и то же. –

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

  • Нет связанных вопросов^_^