« 前のひとこと | トップページ | 次のひとこと »

cocolog:93456816

Python の SymPy で代入 subs が途中で止まったときなどは doit() すればいい。 (JRF 4247)

JRF 2022年4月26日 (火)

例えば対称行列 M を扱いたいとき、M.T に M を「逆代入」して rewrite したい。これを subs({M.T: M}) で行うこと自体は成功するのだが…

from sympy import *
x = MatrixSymbol("x", 3, 1)
M = MatrixSymbol("M", 3, 3)
(x.T * M * x).diff(x).subs({M.T: M}).simplify()

…は、現状(バージョン 1.8)では…、

M*x + M*x

…にしかならない。これを次のようにすると simplify がうまくいく。

JRF2022/4/267303

(x.T * M * x).diff(x).subs({M.T: M}).doit()

…は…、

2*M*x

…にちゃんとなる。

JRF2022/4/267339

……。

ちなみに subs ではなく replace や xreplace を使う方がこの目的には合ってるかもしれない…。replace の場合は次のようにする。

(x.T * M * x).diff(x).replace(M.T, M).doit()

JRF2022/4/266863

« 前のひとこと | トップページ | 次のひとこと »