Как заменить в sympy с Function.diff ()? - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть этот код:

import sympy as *
from sympy.abc import t

init_printing(pretty_print=False)
theta = Function('theta')(t)
A = Matrix([theta, 1, cos(theta)])
A.diff().subs([(theta, 1), (theta.diff(), 2)])

Я ожидал, что выходной сигнал будет

>>> Matrix([
[        2],
[        0],
[-sin(1/2)]])

Вместо этого он был

>>> Matrix([
[            Derivative(1, t)],
[                           0],
[-sin(1/2)*Derivative(1, t)/2]])

Однако вывод указан что Derivative(theta, t) было заменено на Derivative(1, t), что очень странно. Что еще интереснее, если я заменю последнюю строку на A.diff().subs(theta.diff(), 2).subs(theta, 1), вывод будет правильным. Подстановка должна быть в этом порядке, чтобы получить желаемый результат. Почему я не смог использовать первоначальный подход и есть ли лучший обходной путь?

1 Ответ

0 голосов
/ 07 февраля 2020

Замены указаны в заказе c. В текущей версии разработки SymPy, если вы передадите набор замен вместо списка, он (как правило) отработает правильный порядок, поэтому сначала выполняются более сложные шаблоны: .subs({(theta, 1), (theta.diff(), 2)}). Но вы всегда можете контролировать порядок, передавая список.

В переданном вами списке вы сказали заменить тета на 1, чтобы Derivative(theta,t) стало Derivative(1, t), а затем theta.diff() ничего не соответствовало поскольку больше не было тэты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...