Les "subs" et "replace" de SymPy sont des non-fonctions similaires de substitution et de remplacement.
from sympy import symbols, sin, cos, exp, I, sqrt, expand, init_printing
init_printing()
x = symbols('x')
f = sin(x)+sin(x**2)
L'exemple suivant remplace «cos (x)» par «sin (x)».
f.subs(sin(x), cos(x))
Evidemment, dans ce cas, «sin (x ** 2)» n'est pas remplacé par «cos (x ** 2)».
Je ne sais pas si c'est la spécification prévue, mais .subs (sin, cos)
peut remplacer sin
par cos
.
f.subs(sin, cos)
Cependant, .subs (sin, sqrt)
ne peut pas remplacer sin
par sqrt
.
f.subs(sin, sqrt)
Je ne suis pas sûr, mais je pense que sympy.core.function.FunctionClass
peut être remplacé l'un par l'autre.
for func in [sin, cos, sqrt]:
print(func.__class__)
<class 'sympy.core.function.FunctionClass'>
<class 'sympy.core.function.FunctionClass'>
<class 'function'>
À l'origine, je pense que «remplacer» est l'utilisation originale pour remplacer une fonction par une fonction.
f.replace(sin, cos)
f.replace(sin, sqrt)
Vous pouvez utiliser votre propre fonction ou expression lambda comme argument de replace
.
f.replace(sin, lambda t: cos(t**2)) # sin(□)Cos(□**2)Remplacer par
Officiel d'Euler
cos2exp = lambda t: (exp(t*I) + exp(-t*I))/2
sin2exp = lambda t: (exp(t*I) - exp(-t*I))/(2*I)
(sin(x)+cos(x)).replace(cos, cos2exp).replace(sin, sin2exp)
En utilisant cela, diverses formules de fonctions triangulaires peuvent être prouvées (confirmées).
alpha, beta = symbols(r'\alpha \beta')
A = sin(alpha+beta)
B = sin(alpha)*cos(beta) + cos(alpha)*sin(beta)
expand(A.replace(sin, sin2exp).replace(cos, cos2exp))
expand(B.replace(sin, sin2exp).replace(cos, cos2exp))
Maintenant, ʻA = B`, c'est-à-dire
Recommended Posts