SymPys "subs" und "replace" sind ähnliche Nichtfunktionen des Ersetzens und Ersetzens.
from sympy import symbols, sin, cos, exp, I, sqrt, expand, init_printing
init_printing()
x = symbols('x')
f = sin(x)+sin(x**2)
Das folgende Beispiel ersetzt "sin (x)" durch "cos (x)".
f.subs(sin(x), cos(x))
Offensichtlich wird in diesem Fall "sin (x ** 2)" nicht durch "cos (x ** 2)" ersetzt. Ich weiß nicht, ob dies die beabsichtigte Spezifikation ist, aber ".subs (sin, cos)" kann "sin" durch "cos" ersetzen.
f.subs(sin, cos)
".Subs (sin, sqrt)" kann "sin" jedoch nicht durch "sqrt" ersetzen.
f.subs(sin, sqrt)
Ich bin mir nicht sicher, aber ich habe das Gefühl, dass sympy.core.function.FunctionClass
durch einander ersetzt werden kann.
for func in [sin, cos, sqrt]:
print(func.__class__)
<class 'sympy.core.function.FunctionClass'>
<class 'sympy.core.function.FunctionClass'>
<class 'function'>
Ursprünglich denke ich, dass "Ersetzen" die ursprüngliche Verwendung ist, um eine Funktion durch eine Funktion zu ersetzen.
f.replace(sin, cos)
f.replace(sin, sqrt)
Sie können Ihre eigene Funktion oder Ihren eigenen Lambda-Ausdruck als Argument für "Ersetzen" verwenden.
f.replace(sin, lambda t: cos(t**2)) # sin(□)Cos(□**2)Ersetzen mit
Eulers Beamter
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)
Auf diese Weise können verschiedene Formeln von Dreiecksfunktionen bewiesen (bestätigt) werden.
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))
Nun, A = B
, das heißt,
Recommended Posts