Sto cercando di utilizzare [SymPy] [1] per sostituire termini multipli in un'espressione allo stesso tempo. Ho provato la [funzione subs] [2] con un dizionario come parametro, ma ho scoperto che sostituisce sequenzialmente.sostituzione non sequenziale in SymPy
In : a.subs({a:b, b:c})
Out: c
Il problema è il primo cambio determinato un termine che può essere sostituito con il secondo cambio, ma non dovrebbe (per mia causa).
Qualche idea su come eseguire le sostituzioni contemporaneamente, senza interferire con l'altro?
Edit: Questo è un esempio reale
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)
Solo la sostituzione appropriata dovrebbe accadere, in questo caso solo il primo. Così i risultati attesi dovrebbe essere la seguente:
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)
Può fare un esempio reale delle tue sostituzioni così posso vedere qual è il problema. Il problema che hai sopra può essere risolto dalla risposta di ~ unutbu. –
@PreludeAndFugue Ho aggiunto un esempio reale, i miei vecchi esempi erano troppo semplificati e non molto utili. –