Некоммутативное расширение над сложением в Mathematica - PullRequest
1 голос
/ 15 февраля 2011

Мне нужно написать функцию (и), которая полностью расширяет некоммутативное умножение по сравнению с сложением?
Например:
а ** (б + с ^ 2) расширится до
а ** б + а ** с ^ 2
и аналогично справа.

Я использую ReplaceRepeated (.//). Так как я использую NonCommulativeMultiply вместо Times, Expand не работает. Я использовал пакет NCAlgebra, который имеет NCExpand, однако ReplaceRepeated не работает при использовании этого пакета (как указано в документации NCAlgebra ... argh).

Чтобы избежать взлома ReplaceRepeated, мне нужно написать собственный NCExpand, который не будет конфликтовать.

Все идеи приветствуются, спасибо ...

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Попробуйте этот пакет, который включает некоммутативное расширение и другие функции, переписанные для расчетов ЧПУ.

Из этого пакета:

GExpand[a_, patt___] := Expand[a //. {x_NonCommutativeMultiply :> Distribute[x]}, patt];

In[1]  := GExpand[a ** (b + c^2)]
Out[1] := a ** b + a ** c^2

In[2]  := GExpand[a ** (b + c^2)] //. a -> foo
Out[2] := foo ** b + foo ** c^2
0 голосов
/ 21 апреля 2017

Новейшая версия NCAlgebra поддерживает от ReplaceRepeated до NCReplaceRepeated.

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