cocolog:93456816
Python の SymPy で代入 subs が途中で止まったときなどは doit() すればいい。 (JRF 4247)
JRF 2022年4月26日 (火)
(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
例えば対称行列 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