宣伝: 『宗教学雑考集 易理・始源論・神義論』(JRF 著)。
BOOTH (NonDRM 900円)・Amazon (700円)・BOOK☆WALKER (700円) で販売中! Amazon には紙の本も売っています (4400円)。宗教に関する哲学的な話題を雑多に集めた論考集です。(2025年3月11日発売)

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

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

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