Damit erhalten wir die Gerade f(x) = 0.5 x + 1
Wir plotten diese Funktion und zeigen dazu die Messpunkte an:

plot(["1+0.5*x"], 3.0, 9.0, mark=[(3,3),(6,3),(9,6)])

Mehr Komfort: Die Funktion fit

Um uns den Matrixansatz zu ersparen, bietet mathGUIde die Funktion fit an, die aus den Messwerten und dem Funktionstyp direkt die fertige Funktion berechnet.

Die Funktion fit erwartet zwei Parameter

  1. Eine Liste mit den Datenpunkten, jeweils (x,y)
  2. Eine Liste mit Elementarfunktionen (als Zeichenkette geschrieben!), aus denen die gesuchte Funktion als Linearkombination zusammengesetzt wird (Variable x)

Für unser Beispiel übergeben wir:

fit([(3,3),(6,3),(9,6)], ["1", "x"])

Weitere Beispiele

Beispiel 1

Gesucht ist eine Gerade der Form f(x) = ax + b, die die drei Punkte (3,3), (6,4) und (9,6) möglichst gut approximiert (Regressionsgerade).

points = [(3,3), (6,4), (9,6)]
# Gerade ist Linearkombination der beiden folgenden Funktionen:
functions = ["x", "1"]
print(fit(points, functions))

mathGUIde hat (hier in etwas vereinfachter Form) die Funktion f(x) = x/2 + 4/3 geliefert.
Zur Kontrolle der Approximation schauen wir uns einen Funktionsplot an:

points = [(3,3), (6,4), (9,6)]
functions = ["x", "1"]
plot(fit(points, functions), 3.0, 9.0, mark=points)

Beispiel 2

Eine Parabel soll an vier Punkte angenähert werden:

points = [(-1,2), (0,2), (1,1), (2,0)]
functions = ["1", "x", "x^2"]
print(fit(points, functions))

Kontrolle des Ergebnisses:

points = [(-1,2), (0,2), (1,1), (2,0)]
functions = ["1", "x", "x^2"]
plot(fit(points, functions), -1.0, 2.0, mark=points)

Beispiel 3

Transzendente Funktion: f(x) = a + b*x*log(x) + c*exp(x)
Gesucht sind die Koeffizienten a, b, c

functions = ["1", "x*log(x)", "exp(x)"]
# Die Funktion sollte die folgenden 4 Punkte approximieren:
points = [(1,1), (2,1), (3,3), (4,8)]
print(fit(points, functions))

Kontrolle des Ergebnisses:

functions = ["1", "x*log(x)", "exp(x)"]
points = [(1,1), (2,1), (3,3), (4,8)]
plot(fit(points, functions), 1.0, 4.0, mark=points)