Polynom herleiten

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Ozymandias
User
Beiträge: 2
Registriert: Dienstag 20. Oktober 2020, 15:43

Guten Tag zusammen,

ich habe ein kleines Problem und zwar: ich habe die Kennlinie eines Sensors, die einen Polynom 3.ten Grades darstellt und tabelarisch definiert ist...
Was ich aber brauche, ist die Gleichung dazu, also Polynom selbst.

Ich habe dazu ein Plot erstellt, hier ist der Code:

Code: Alles auswählen

import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate

title = "Kennlinie"

Masse = np.asarray([-40, -30, -20, -15, -12, -10, -8, -6, 0, 6, 8, 10, 12, 15, 20, 30, 40, 50, 60, 75, 90, 105, 120, 140, 160, 190, 220, 250, 280, 310, 340, 370, 400, 440, 480, 560, 620, 640])
Zeit = np.asarray([669.59, 650.87, 627.72, 613.61, 604.00, 597.01, 589.49, 581.35, 552.79, 519.06, 507.73, 496.85, 486.61, 472.60, 452.62, 421.91, 398.76, 380.04, 364.21, 344.11, 327.02, 312.04, 298.64, 282.65, 268.31, 249.14, 232.09, 216.68, 202.56, 189.50, 177.31, 165.88, 155.09, 141.56, 128.88, 105.60, 89.47, 84.55])

print('Luftmasse anzahl', Masse.size)
print('Zeit anzahl', Zeit.size)

fig = plt.figure(title)
plt.plot(Zeit,Masse, marker='o', linestyle='solid')
plt.grid(0)
plt.legend(loc='upper left', frameon=True)
plt.xlabel('T [μs]')
plt.ylabel('Masse [kg/h]')
fig.set_size_inches(10, 5)
plt.show()
Es wird auch richtig gezeichnet und alles ist gut.

Aber die kriege ich das Polynom an sich dafür raus?

Vielen Dank im Voraus!

PS: ich bin ein absoluter Python-Anfänger... die C-Sprachen und Java sind kein Problem, aber Python.... hust.
einfachTobi
User
Beiträge: 510
Registriert: Mittwoch 13. November 2019, 08:38

Zum Beispiel mit curve_fit(). Beispiele stehen unten in der Doku.
Ameinsenpeter
User
Beiträge: 12
Registriert: Freitag 2. Oktober 2020, 09:32

Eine andere Möglichkeit wäre evtl. mit np.polyfit. Polyfit gibt dir die Koeffizienten eines Polynoms gewünschten Grades.
Die Funktion np.poly1d() erzeugt nun dieses Polynom.

Code: Alles auswählen

koeff = np.polyfit(Zeit, Masse, 3) #Berechnet die Koeffizienten für ein Polynom 3. Grades
Poly= np.poly1d(koeff) #Erzeugt Polynom mit Koeffizienten von Polyfit
print(Poly) # Zeigt dir dein Polynom
plt.plot(Zeit, Poly(Zeit)) # Plot stimmt perfekt überein
Ozymandias
User
Beiträge: 2
Registriert: Dienstag 20. Oktober 2020, 15:43

Hallo Ihr Beiden,

mit Polyfit hat es funktioniert! Danke schön.
Es ist ein kleines Projekt. Das Vorhaben ist einen Sensor (Sensor1, spannungsmoduliert) durch einen anderen Sensor (Sensor2, frequenzmoduliert) zu ersetzen.

Sensor1 misst eine physikalische Größe und gibt diese als Spannung aus. Die Kennlinie ist bekannt, lässt sich aber durch gar nichts vernünftig abbilden, also SPLine Interpolation.
Sensor2 misst dieselbe physikalische Größe und gibt diese als Frequenz aus. Die Gleichung dazu habe ich nun.

Mein Wandlungsweg wäre also: Frequenz --> physikalische Größe -> Spannung und das ganze mit möglichstwenig Abweichung...
Benutzeravatar
webbygirl21
User
Beiträge: 7
Registriert: Donnerstag 12. November 2020, 12:21

Rein interessehalber: ist ein Polynom dritten Grades eigentlich automatisch die beste Annäherung?
Home is where my computer is. :mrgreen:
Graffito
Antworten