Запретить Sympy изменять уравнение

Возможно, я упускаю из виду очевидное, но как предотвратить перестановку уравнений Симпи?

Я использую Sympy в блокноте iPython, поэтому я могу легко скопировать и вставить код Latex в Lyx, но я хочу, чтобы уравнения были в том же порядке, в котором я их определил.

Например, формула зависимости излучения серого тела от его температуры:

введите здесь описание изображения

Sympy автоматически помещает компонент Temperature на передний план, что дает очень необычное представление формулы. Есть ли способ предотвратить это?


person Rutger Kassies    schedule 31.01.2013    source источник


Ответы (2)


В настоящее время в SymPy нет возможности печатать данные точно так, как они введены, потому что эта информация даже нигде не сохраняется.

Я верю в умножение, символы упорядочены в алфавитном порядке, с заглавными буквами перед строчными буквами (в основном, порядок от ord). Лучший трюк, который я могу придумать, это использовать параметр symbol_names для latex, который позволяет вам изменить имя, используемое для символа в его представлении LaTeX. Порядок по-прежнему будет основываться на имени исходного символа, так что вы можете обмануть его:

>>> from sympy.abc import epsilon, omega, t
>>> latex(epsilon*sigma*t**4, symbol_names={t:"T"})
\epsilon \sigma T^{4}

Если вы хотите, чтобы это красиво печаталось в блокноте, вам придется написать пользовательскую версию расширения для печати, которое передает ваш symbol_names dict в latex. См. https://github.com/sympy/sympy/blob/master/sympy/interactive/printing.py (в идеале можно было бы просто передать параметры latex в init_printing, для этого я открою проблему в системе отслеживания ошибок SymPy).

person asmeurer    schedule 02.02.2013
comment
Я открыл это и эта проблема SymPy для вещей, которые я упомянул в своем ответе. - person asmeurer; 03.02.2013
comment
Большое спасибо за ответ и открытие темы. Я думаю, что это было бы хорошим дополнением, хотя визуализация на самом деле не то, чем является Sympy. Будущее ноутбука выглядит хорошо, и преобразование его в pdf/блог или слайд-шоу, вероятно, станет обычным делом в ближайшем будущем. - person Rutger Kassies; 03.02.2013
comment
Однако мы заботимся о визуализации. SymPy не был бы так полезен без возможности печати. - person asmeurer; 04.02.2013

Если вы хотите, чтобы аргументы продукта отображались в заданном порядке, вы можете создать Mul из этих аргументов, а затем сообщить принтеру, что вы не хотите, чтобы они были переупорядочены, как показано здесь для добавления. Итак, для вашего примера вы можете сделать

>>> var('epsilon, sigma, T')
(epsilon, sigma, T)
>>> this = Mul(epsilon, sigma, T**4, evaluate=False)
>>> StrPrinter({'order':'none'})._print_Mul(this)
epsilon*sigma*T**4
person smichr    schedule 24.10.2019