Создание символов SymPy относится только к набору действительных чисел - PullRequest
0 голосов
/ 06 июня 2019

При работе с символами в Sympy для библиотеки иногда было бы полезно понять, что символ относится только к определенному подмножеству комплексных чисел. Пример: theta = sympy.symbols('theta') при вводе в функцию sin и взятии комплексного конъюгата sympy.conjugate(sympy.sin(theta)) в идеале даст sin(theta), поскольку theta будет только когда-либо действительным числом, а комплексный конъюгат только отрицает мнимую компоненту комплексного числа. Вместо этого он дает sin(conjugate(theta)), что указывает на то, что sympy не имеет семантического понимания, что theta никогда не будет иметь ненулевой мнимый компонент.

Это может привести к проблемам, поскольку sin(theta) не обязательно совпадает с sin(conjugate(theta)). Есть ли способ сообщить SymPy, что данный символ является действительным числом, такое, что sin(conjugate(theta)) автоматически упрощается до sin(theta)?

1 Ответ

2 голосов
/ 06 июня 2019

Вы должны использовать real=True при объявлении, то есть:

import sympy as sym
from sympy import conjugate, sin

theta = sym.Symbol('theta', real=True)

sin(conjugate(theta))
# evaluates to: sin(theta)

conjugate(sin(theta))
# evaluates to: sin(theta)

, а:

zeta = sym.Symbol('zeta')

sin(conjugate(zeta))
# evaluates to: sin(conjugate(zeta))

conjugate(sin(zeta))
# evaluates to: conjugate(sin(zeta))

, если символ не объявлен как real.

РЕДАКТИРОВАТЬ : это можно найти в одном из старых руководств .Я не уверен, почему это не было описано в новых руководствах, но в SymPy 1.4 это работает.

...