J'essaie d'utiliser [SymPy] [1] pour substituer plusieurs termes dans une expression en même temps. J'ai essayé la [subs function] [2] avec un dictionnaire comme paramètre, mais j'ai découvert qu'il se substitue séquentiellement.Substitution non-séquentielle dans SymPy
In : a.subs({a:b, b:c})
Out: c
Le problème est la première substitution a donné lieu à un terme qui peut être substitué par un deuxième changement, mais il ne faut pas (pour ma cause).
Une idée sur la façon d'effectuer les substitutions simultanément, sans interférer les uns avec les autres?
Edit: Ceci est un exemple réel
In [1]: I_x, I_y, I_z = Symbol("I_x"), Symbol("I_y"), Symbol("I_z")
In [2]: S_x, S_y, S_z = Symbol("S_x"), Symbol("S_y"), Symbol("S_z")
In [3]: J_is = Symbol("J_IS")
In [4]: t = Symbol("t")
In [5]: substitutions = (
(2 * I_x * S_z, 2 * I_x * S_z * cos(2 * pi * J_is * t) + I_y * sin(2 * pi * J_is * t)),
(I_x, I_x * cos(2 * pi * J_is * t) + 2 * I_x * S_z * sin(2 * pi * J_is * t)),
(I_y, I_y * cos(2 * pi * J_is * t) - 2 * I_x * S_z * sin(2 * pi * J_is * t))
)
In [6]: (2 * I_x * S_z).subs(substitutions)
Out[7]: (I_y*cos(2*pi*J_IS*t) - 2*I_x*S_z*sin(2*pi*J_IS*t))*sin(2*pi*J_IS*t) + 2*S_z*(I_x*cos(2*pi*J_IS*t) + 2*I_x*S_z*sin(2*pi*J_IS*t))*cos(2*pi*J_IS*t)
Seule la substitution appropriée devrait se produire, dans ce cas, seul le premier. Ainsi, le résultat attendu devrait être le suivant:
In [6]: (2 * I_x * S_z).subs(substitutions)
Out[7]: I_y*sin(2*pi*J_IS*t) + 2*I_x*S_z*cos(2*pi*J_IS*t)
Pouvez-vous donner un exemple réel de vos substitutions afin que je puisse voir quel est le problème. Le problème que vous avez ci-dessus peut être résolu par la réponse de ~ unutbu. –
@PreludeAndFugue J'ai ajouté de vrais exemples, mes anciens exemples étaient trop simplifiés et pas vraiment utiles. –