SymPy: автоматическое построение уравнений - PullRequest
0 голосов
/ 20 апреля 2019

Я нашел в другом месте, что x = sp.symbols('x1:{}'.format(n)) создает коллекцию n переменных, связанных с переменной x. Теперь я хотел бы использовать https://docs.sympy.org/latest/modules/solvers/solveset.html#sympy.solvers.solveset.nonlinsolve решить систему нелинейных уравнений. Я могу построить строку, содержащую выражение для каждой строки в моей системе уравнений, например что-то вроде x1**2+4*x2**3 и т. д. Как мне заставить sympy преобразовать их в свои собственные уравнения? В приведенных в документации примерах пишем что-то вроде [x1**2+4*x2**3,2*x1+3*x3] и передать его solve(), но как построить эти выражения (и каков их тип?) автоматически, если не считать их жестким кодом?

1 Ответ

1 голос
/ 20 апреля 2019

Вышеприведенные выражения представляют собой суммы произведений символов, в некоторых случаях Add

Из документации :

Все символические вещи реализованыиспользуя подклассы базового класса.Во-первых, вам нужно создать символы, используя Symbol ("x") или числа, используя Integer (5) или Float (34.3).Затем вы создаете выражение, используя любой класс из SymPy.Например, Add (Symbol ("a"), Symbol ("b")) дает экземпляр класса Add.Вы можете вызывать все методы, которые поддерживает данный класс.

В вашем примере вам нужно объявить x1, x2, x3 как символы:

x1, x2, x3 = symbols('x1 x2 x3')

Как только символы определены, sympy автоматически преобразует строки в свои собственные выражения для вычислений.Чтобы проверить тип выражений sympy, используйте sympify

a = Symbol("a")
b = Symbol("b")
c = 'a**2 + b'
print c
(a + b)**2
type(c)
# string

from sympy import sympify
sympify(c)
type(sympify(c))
# <?????′?????.????.???.???′>
...