c't 12/2019
S. 188
Know-how
Optimieren mit SciPy
Aufmacherbild
Bild: Albert Hulm

Formelsuche für Faule

Parameter optimieren mit SciPy curve_fit()

Oft hat man Daten und eine grobe Idee, welche Art von Funktion diese Daten modellieren könnte. Nur die Details, nämlich wie die Parameter der Funktion aussehen sollten, damit diese auch wirklich zu den Daten passt, die möchte man nicht per Hand ausprobieren. Das muss man auch nicht, denn die SciPy-Funktion curve_fit() findet die besten Parameter automatisch.

Meine Personenwaage „misst“ über Elektroden meinen Körperfettanteil. Der angezeigte Wert schwankt um mehr als 100 Prozent, je nachdem, wie nass meine Füße sind. Um mal zu besseren Werten zu kommen, habe ich mir einen sogenannten „Caliper“ gekauft. Das ist eine Zange, mit der man mit einem Druck von genau 10 Gramm pro Quadratmilimeter Auflagefläche (meine klemmt 6,4 × 7,3 Millimeter ein) die Dicke von Speckfalten misst. Ich messe damit eine Falte seitlich am Bauch. Die Methode ist erheblich genauer und den Caliper bekam ich für sieben Euro. Bei der Zange lag ein Zettel mit zwei Tabellen bei: eine für Männer und eine für Frauen. In der Tabelle schaut man abhängig vom eigenen Alter nach, welcher Körperfettanteil in Prozent zu dem in Millimeter gemessenen Maß gehört.

Für die Zange hatte ich schnell einen guten Platz gefunden, aber der Zettel mit den Tabellen flog wochenlang auf meinem Schreibtisch rum. Eigentlich wollte ich die Messwerte ohnehin digital archivieren [1] und es nervte mich, dass ich dafür auf eine Tabelle auf einem Stück Papier schauen musste. Es gibt zwar Formeln für drei oder mehr Messwerte an verschiedenen Körperstellen (siehe „Calipometrie“ bei Wikipedia), für nur einen Wert hatte ich aber nur die Tabelle. Die einfach zu digitalisieren wäre mir aber zu simpel gewesen. Ich wollte eine Formel finden, um alle Tabellenwerte (und Werte dazwischen auch) berechnen zu können.