Python: увеличение количества функций symboli c для каждой итерации цикла - PullRequest
0 голосов
/ 26 марта 2020

Я новичок в программировании в целом, но я немного знаком с языком ANSYS APDL (производная Фортрана) и Python. По сути, я пытаюсь создать новую функцию symboli c для каждой итерации в al oop. Насколько я видел, Python (в частности, sympy) не может создать массив или список функций symboli c. Например, в APDL я могу написать:

*do,i,1,3
        f%i% = i*x + 2*i*y
*enddo

, что даст мне 3 функции: f1 = x + 2y, f2 = 2x + 6y, f3 = 3x + 9y Поэтому мне интересно, есть ли Python эквивалент для функции% i%, или если в Python есть простой обходной путь, которым я могу воспользоваться.

Моя конечная цель - собрать все эти функции вместе, чтобы решить систему, находясь еще в l oop. Каждая итерация будет увеличивать количество уравнений и переменных в системе, пока не будут выполнены определенные критерии. Я могу увеличить количество переменных с помощью psi = sympy.Array(sympy.symbols('psi0:%d'%i)), но мне еще предстоит найти способ сделать это с помощью функций symboli c.

Ответы [ 3 ]

1 голос
/ 26 марта 2020

С помощью sympy вы можете сделать следующее (обратите внимание, что в списке Python индексируются, начиная с 0):

from sympy import symbols

x, y = symbols('x y')
num = 3
f = [i*x + 2*i*y for i in range(1, num+1)]

print(f[0])
print(f[1])
print(f[2])

Вывод:

x + 2*y
2*x + 4*y
3*x + 6*y

Для "вызова" такого функция sympy, подставьте ее переменные для значений. Значения могут быть константами или выражениями, которые могут содержать (другие) переменные.

a = symbols('a')
print(f[0].subs({x: 7, y: 8}))
print(f[1].subs({x: a, y: a + 4}))
print(f[2].subs({x: 2*a, y: 3*a + 5}))

Вывод:

23
6*a + 16
24*a + 30
1 голос
/ 26 марта 2020

Если имя функции не имеет значения для вас, вы можете создавать лямбда-выражения и сохранять их в списке:

funcs = []
for i in range(8):
        new = lambda x,y : i*x + 2*i*y
        funcs.append(new)

, а затем вызывать их по

>>> x, y = 2, 3
>>> funcs[0](x, y)
56

0 голосов
/ 26 марта 2020

Вы можете просто создать список функций и вызывать их по индексу.

functionList = []
for i in range(10):
    def func(x,y):
        return i * x + 2 *i *y
    functionList.append(func)

functionList[0](4,5)
functionList[1](1,5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...