SymPy: как я могу получить частные производные от одного уравнения, введенного пользователем заранее? - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь построить ограниченный оптимизационный калькулятор в python, используя модуль sympy.Идея состоит в том, что пользователь может ввести две функции, «f» и «g», которые затем объединяются, чтобы сформировать уравнение «L».

Я хочу, чтобы SymPy дал мне частные производные от x, y и lambda в "L", однако мой код, похоже, не работает.При попытке получить их частные производные я получаю следующие результаты:

0

0

-x - 4 * y + 500

Я использовал x+ 100 * yy ** 2 как функция 1 и x + 4 * y-500 и функция 2.

Здесь пока код:

import sympy as sp
from sympy.parsing import sympy_parser
x, y = sp.symbols("x y", real=True)
lam = sp.symbols('lambda', real=True)
insert = input("Insert function 1:") #function 1
f = sympy_parser.parse_expr(insert)  #transforming the function into a sympy expression
print(f)
insert2 = input("Insert function 2:") #function2
g = sympy_parser.parse_expr(insert2)  #transforming function 2
L = f - lam*g #getting the equation "L"
xx = sp.diff(L, x) #partial derivative L'x
yy = sp.diff(L, y) #partial derivative L'y
ll = sp.diff(L, lam) #partial derivative L'lam
print(xx)
print(yy)
print(ll)

Я пробовал оба "parse_expr"Команды "и" упрощения "для преобразования введенных пользователем функций из строки в выражения sympy.Я мог бы пропустить что-то еще.

1 Ответ

0 голосов
/ 07 мая 2019

Ваши локальные x и y реальны, но те, которые возвращает анализатор, являются ванильными, у них нет предположений.Поскольку символы совпадают по имени и предположениям, ваши входные функции не имеют (одинаковые) x и y:

>>> f.has(x)
False

Так что либо не делайте ваши локальные символы настоящими

>>> var('x')
x
>>> f = sympy_parser.parse_expr(insert)
>>> f.has(x)
True

Или передайте ваши локальные символы парсеру, чтобы он мог использовать их для построения ваших функций:

>>> f = sympy_parser.parse_expr(insert, dict(x=x,y=y))
>>> f.has(x)
True

И как только вы используете те же символы, остальные проблемы должны перейти кновый уровень: -)

...