Подставим матрицу M на (-M) в SymPy и отобразим ее однозначно - PullRequest
0 голосов
/ 29 октября 2018

Предположим, у меня есть следующее матричное выражение:

import sympy
sympy.init_printing(use_unicode=True)
x = sympy.MatrixSymbol('x', 2, 2)
y = sympy.MatrixSymbol('y', 2, 2)

a = x * y

Я хотел бы заменить вторую матрицу той же матрицей, умноженной на отрицательную:

a.subs(y, (-y))

Если бы x и y были обычными символами SymPy, это показывалось бы как -xy. Но в этом случае это выглядит как x - y. Даже если при замене значений матрицы она оценивается правильно (то есть как -xy), эта демонстрация быстро становится неоднозначной. Как мне сделать так, чтобы он отображался правильно?

Когда sympy.init_printing() не вызывается, оно однозначно отображается как x\*(-y).

Я использую это в Jupyter.

1 Ответ

0 голосов
/ 29 октября 2018

Это ошибка в LaTeX-принтере SymPy: она не учитывает, что MatMul(Integer(-1), MatrixSymbol(...)) требует скобки в продукте.

Пока ошибка не исправлена, обходной путь должен использовать "красивую" печать вместо LaTeX:

sympy.init_printing(use_latex=False)

в результате x⋅(-y). Pretty-print обычно более читабелен, чем вывод str, например x*(-y).


Большое исправлено в текущей основной ветке и поэтому не должно появляться в версиях SymPy выше 1.3.

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