Ich versuche [SymPy] [1] zu verwenden, um mehrere Ausdrücke in einem Ausdruck gleichzeitig zu ersetzen. Ich habe die [Subs-Funktion] [2] mit einem Dictionary als Parameter versucht, aber herausgefunden, dass sie sequentiell ersetzt.Nicht-sequentielle Substitution in SymPy
In : a.subs({a:b, b:c})
Out: c
Das Problem ist der erste Wechsel in einem Begriff geführt, die durch die zweite Substitution substituiert werden kann, aber es sollte nicht (für meine Sache).
Irgendeine Idee, wie man die Substitutionen gleichzeitig durchführt, ohne dass sie sich gegenseitig stören?
Edit: Das ist ein echtes Beispiel
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)
Nur die entsprechende Substitution sollte in diesem Fall passiert, nur die erste. So sollte die erwartete Ausgabe wie folgt sein:
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)
Können Sie ein konkretes Beispiel geben von Ihren Substitutionen, damit ich sehen kann, was das Problem ist. Das Problem, das Sie oben haben, kann durch ~ unutbus Antwort gelöst werden. –
@PreludeAndFugue Ich habe ein echtes Beispiel hinzugefügt, meine alten Beispiele waren zu sehr vereinfacht und nicht wirklich nützlich. –