Polynomkoeffizienten berechnen mit solve()

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
BrickBardo
User
Beiträge: 10
Registriert: Dienstag 8. September 2020, 10:45

Hallo zusammen,

ich habe folgendes Programm zu Berechnung der Koeffizieten eines Polynoms achten Grades aus markanten Punkten geschrieben:

Code: Alles auswählen

import sympy as sp

# Extrempunkte: (-6, 5), (-2, -1), (6, 5)
# Sattelpunkt: (2, 3)
# Wendepunkte: (-4, 2), (0, 1), (4, 4)
# Flachpunkt: (8, 4)

# Variablen definieren
x = sp.symbols('x')
a8, a7, a6, a5, a4, a3, a2, a1, a0 = sp.symbols('a8 a7 a6 a5 a4 a3 a2 a1 a0')

# Polynom definieren
f = a8*x**8 + a7*x**7 + a6*x**6 + a5*x**5 + a4*x**4 + a3*x**3 + a2*x**2 + a1*x + a0

# Bedingungen aufstellen
equations = [
    f.subs(x, -6) - 5,
    f.subs(x, -2) + 1,
    f.subs(x, 6) - 5,
    f.subs(x, 2) - 3,
    f.subs(x, -4) - 2,
    f.subs(x, 0) - 1,
    f.subs(x, 4) - 4,
    f.subs(x, 8) - 4,
    sp.diff(f, x, 1).subs(x, -6),
    sp.diff(f, x, 1).subs(x, -2),
    sp.diff(f, x, 1).subs(x, 6),
    sp.diff(f, x, 1).subs(x, 2),
    sp.diff(f, x, 1).subs(x, 8),
    sp.diff(f, x, 2).subs(x, 2),
    sp.diff(f, x, 2).subs(x, -4),
    sp.diff(f, x, 2).subs(x, 0),
    sp.diff(f, x, 2).subs(x, 4),
    sp.diff(f, x, 2).subs(x, 8),
    sp.diff(f, x, 3).subs(x, 8)
]

# Gleichungssystem lösen
solution = sp.solve(equations, (a8, a7, a6, a5, a4, a3, a2, a1, a0))
print(solution)
Allerdings bekomme ich nur zwei leere Klammern als Ausgabe, ein empty set. Ich verstehe leider nicht, wo dass Problem liegt. Wenn ich die f.subs weg lasse, wird eine Lösung berechnet. Ebenso, wenn ich die sp.diff weg lasse.
Sirius3
User
Beiträge: 18215
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast 19 Bedingungen an 9 Variablen. Warum glaubst Du, dass es dafür eine Lösung gibt?
BrickBardo
User
Beiträge: 10
Registriert: Dienstag 8. September 2020, 10:45

Du meinst 19 Gleichungen für 9 Unbekannte sind nicht ausreichend? Normalerweise reicht doch eine Gleichung pro Unbenannte, um eine eindeutige Lösung zu erhalten. Wenn ich nur die Ableitungen in das Gleichungssystem einfließen lasse, also 11 Gleichungen für 9 Unbekannte, so gibt solve() eine Lösung aus.
Benutzeravatar
__blackjack__
User
Beiträge: 13919
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@BrickBardo: Die Bedingungen können ja so sein, dass sich welche davon nicht gleichzeitig erfüllen lassen.
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
Antworten