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