In letzter Zeit brauchte ich manchmal eine analytische Lösung eines Polynoms, das bestimmte Randbedingungen erfüllt. Es schien schwierig zu sein, eine analytische Lösung zu finden, und ich versuchte herauszufinden, ob dies mit SymPy einfacher gemacht werden könnte.
SymPy
SymPy ist eine Python-Bibliothek zum Ausführen symbolischer Operationen. Sie können Folgendes tun:
Angenommen, Sie möchten die analytische Lösung der folgenden simultanen Gleichungen finden. $ bx + ay = ab $ $ x - cy = c$ Die Lösung dieser simultanen Gleichung ist
import sympy
a = sympy.symbols("a")
b = sympy.symbols("b")
c = sympy.symbols("c")
x = sympy.symbols("x")
y = sympy.symbols("y")
sympy.solve([b*x+a*y-b*a,x-c*y-c],(x,y))
Das Ergebnis ist $ \ frac {ac \ left (b + 1 \ right)} {a + bc}, \ frac {b \ left (a --c \ right)} {a + bc} $ Es kann erhalten werden.
Hier Polypoly
unter,
for i in range(6):
exec(f"A{i} = sympy.Symbol(\"A{i}\")")
S1 = sympy.Symbol("S1")
x = sympy.Symbol("x")
f = A0 + A1*(x) + A2*(x)**2 + A3*(x)**3 + A4*(x)**4 + A5*(x)**5
f1 = sympy.diff(f, x)
f2 = sympy.diff(f1, x)
Bereiten Sie zunächst die Variablen und die Funktion vor, die Sie wie oben finden möchten.
Die Bedingung von $ f (0) = 0 $ ist
cond0 = f.subs(x, 0) - 0
Es wird ausgedrückt als. Ebenso alle übrigen Bedingungen
cond1 = f.subs(x, 1) - S1
cond2 = f1.subs(x, 0) - 0
cond3 = f1.subs(x, 1) - 0
cond4 = f2.subs(x, 0) - 0
cond5 = f2.subs(x, 1) - 0
Definiert in.
$ A_ {0}, A_ {1}, A_ {2}, A_ {3}, A_ {4}, A_ {5} $, die alle diese Bedingungen erfüllen
solution = sympy.solve([cond0, cond1, cond2, cond3, cond4, cond5],(A0,A1,A2,A3,A4,A5))
Dann lautet die Antwort
Einsetzen dieses Ergebnisses in $ f (x) $
for i in range(6):
exec(f"f = f.subs(A{i}, solution[A{i}])")
Dann fand ich die Funktion $ f (x) $, die ich finden wollte.
Recommended Posts