Funktion aus Kurve berechnen

Hallo zusammen,
ich habe ein kleines Problem mit dem erstellen einer Funktion zu einer Funktionskurve. Die Funktion soll in einem Computer-Programm eingesetzt werden um die Kanten von Schaltflächen abzurunden. Leider finde ich keinen Ansatz zur Lösung meines Problem und bitte euch deshalb um Hilfe.
Link zur Kurve: http://img78.imageshack.us/img78/7101/kurve1jk2.png

Als Parameter, welche der Funktion übergeben werden, habe ich an x und yStart gedacht, also f(x,140). Andere Parameter wie yEnd oder yMax wären aber auch denkbar.
Mein Problem ist aber das ich keinen Ansatz habe um das Problem lösen zu können. Kann mir jemand helfen?

Auch hallo.

Link zur Kurve:
http://img78.imageshack.us/img78/7101/kurve1jk2.png

Als Stichwort käme hier z.B. Spline-Interpolation in Frage.

mfg M.L.

Als Stichwort käme hier z.B. Spline-Interpolation in Frage.

Hört sich gut an und leider auch etwas kompliziert.

Habe einen Rechner gefunden: http://www.arndt-bruenner.de/mathe/scripts/kubspline…
Meine Wertetabelle:
0 140
1 140
24 180
25 180
26 180
49 160
50 160

Leider stehen Splines klar über meinen momentanen Fähigkeiten, aber ich werde mal den Versuch wagen mich etwas einzulesen und einzuarbeiten.

Hallo,

Splines sind natürlich eine gute Lösung zu dem Problem.

Alternativ kann man es aber auch mit einer parametrischen Funktion zuminsest in guter Näherung lösen:

Die Kurve sieht aus wie die Summe zweier Funktionen:

  1. eine Gauss-Glockenkurve und
  2. eine Treppenfunktion oder sigmoiden Funktion

Nehmen wir die Gauss- und die (exponentielle) Sigmoidal-Funktion. Beide haben verschiedene Parameter, welche die Form bestimmen. Es gilt, die Parameter zu bestimmen, für welche die Summe beider Funktionen am besten durch die vorgegebenen Datenpunkte läuft. Doch eins nach dem anderen. Erstmal die Funktionen:

  1. y = h * exp( -((x-m)/s)² )

h: „Höhe“ der „Glocke“ (y-Wert des Maximums)
m: x-Wert des Maximums
s: „Breite“ der „Glocke“

  1. y = y0 + (y1-y0)/(1+exp((-x+m)/a)

y0, y1: unterer und oberer y-Wert
m: x-Wert, bei dem der y-Wert der Funktion genau zwischen y0 und y1 ist; das sollte der selbe Wert wie m aus Funktion 1) sein.
a: „Steilheit“ des Anstiegs (je größer, desto flacher der Anstieg)

Aus diesen beiden Funktionen bilden wir jetzt also die Summe und bekommen mit:

y = h * exp( -((x-m)/s)² ) + y0 + (y1-y0)/(1+exp((-x+m)/a)

eine Funktion, die von 6 Parametern (h,m,s,y0,y1,a) abhängt. Diese Parameter müssen so bestimmt werden, dass die y-Werte, die anhand der Funktion berechnet werden (y_theo)), möglichst dicht bei den entsprechenden y-Werten liegen, wie sie im Diagramm eingezeichnet sind (y_vorg). Das „möglichst dicht“ läßt sich quantifizieren, nämlich zB. mit der Summe der Abweichungsquadrate von y_theo und y_vorg:

SAQ = Summe[(y_vorg[x] - y_theo[x])² ]

y_vorg[x] sind schlich di zu irgentwelchen x-Werten vorgegebenen y-Werte, wie sie im Diagramm gezeigt sind. y_theo[x] sind die für die entsprechenden x-Werte nach obiger Formel berechneten y-Werte. Für jeden x-Wert werden die Differenzen gebildet, diese werden quadirert und alle quadrate summiert. Dann erhält man die Summe der Abweichungsquadrate (SAQ).

Natürlich hängt die SAQ ab von den Werten, die als Parameter gewählt werden. Verändert man die Werte der Parameter, bekommt man andere SAQ’s. Es gilt nun: die Anpassung der Funktion an die vorgegebenen Daten ist optimal, wenn SAQ minimal ist. Man sucht also die Kombination aus Werten für die Parameter, für welche die SAQ minimal wird.

Dazu gibt es verschiedene Verfahren. Quick-and-dirty ist sicher die Möglichkeit, einfach mal ein paar Werte -Kombinationen zu probieren, jeweils die SAQ zu berechnen und sich so im triel-and-error-Verfahren an eine optimale Lösung heranzutasten. Besser sind natürliich rechnergestützte Verfahren, allen voran die Simplex-Methode und das Levenberg-Marquard-Verfahren. Beide hier zu erklären würde den Rahmen vollends sprengen. Unter den Suchbegriffen findest du aber im Internet einiges. Die Details sind aber eigentlich für dich uninteressant. Wichtig ist ja nur, dass du sie anwenden kannst. Kaum zu glauben - das kannst du sogar sehr wahrscheinlich aus dem Stand:

EXCEL bietet nämlich ein Verfahren zur Minimierung eines Zellwertes unter Veränderung anderer Zellwerte (ich glaube, EXCEL benutzt dazu die Simplex-Methode - aber egal). Das Werkzeug, was das macht, nennt sich Solver , der Teil ein EXCEL-Add-In ist. Evtl. mußt du bei „Solver“ im Menü „Extras/Add-Ins“ ein Häkchen machen, damit du ihn verwenden kannst. Dann findest du den Solver unter „Extras/Solver…“.

In EXCEL brauchst du nun zunächst eine Spalte (A) mit den x-Werten und eine Spalte (B) mit den y_vorg-Werten. In der nächsten Spalte steht dann die Funktion, die wir uns oben gebastelt haben. Sie muss die Werte für die Parameter aus anderen Zellen erhalten, sagen wir aus den Zellen F3:F8. Zur Berechnung der SAQ gibt es in EXCEL eine fertige Formel: „=SUMMEXMY2()“. Hier werden entsprechend die Bereich in Spalte B und C angegeben.

Es empfiehlt sich, die Vorgabe-Werte wie auch die Lösung in einem (XY-)Diagramm anzusehen. Vorgabe-Werte würde ich als unverbundene Punkte darstellen, die Lösung hingegen als Linie ohne Punkte. Damit die Linie nicht so „eckig“ ist, können wir für sie noch Werte für weitere x-Werte berechnen lassen (wir haben ja die Funktion mitsamt Parametern!). Das machen wir irgendwo anders in der Tabelle, zB. in den Spalten J und K.

Ja, richtig - wir kennen die Parameter doch immer noch nicht. Doch dazu kommen wir jetzt. Zuerst tragen wir in die Zellen für die Parameterwerte Schätzungen ein, die in etwa hinkommen könnten. In deinem Fall habe ich mit diesen Werten begonnen:

y0 140
y1 160
a 7
m 25
h 30
s 15

Das passt tatsächlich schon recht gut (SAQ = 70.5). Trotzdem läuft die Kurve noch nicht wirklich gut durch die Punkte. Um das nun zu optimieren, verwenden wir den Solver. Also: „Extras/Solver…“ geklickt und der Solver-Dialog erscheint. Hier als Zielzelle die Zelle angegeben, in welcher die SAQ berechnet wird, als Zielwert „Minimal“ auswählen und als „veränderbare Zellen“ die Zellen angeben, in denen die Parameter stehen (F3:F8). Eigentlich war’s das schon, doch noch ein Tipp: Auf „Optionen…“ klicken und im Optionen-Dialog ein Häkchen bei „Automatisch Skalierung anwenden“ machen. Optionen-Dialog schließen und im Solver-Dialog „Lösen“ klicken. Excel rechnet dann eine merh oder weniger kurze Weile und macht einen Lösungsvorschlag. Wenn der OK ist (siehe Diagramm!!), kann er übernommen werden. Ansonsten nochmal mit den Ausganswerten für die Parameter rumspielen und nochmal probieren.

Ich habe aus deinem Diagramm mal folgende Werte verwendet:

x y\_vorg
0 140
5 145
10 155
15 168
20 177
25 180
30 178
35 172
40 168
45 162
50 160

und habe damit mal die Parameter bestimmt. Ausgehend von den oben schon genannten Startwerten hat der Solver folgende Lösung gefunden:

y0 133.50
y1 159.60
a 7.85
m 22.37
h 32.69
s 15.77

Diese Werte, in die obige Funktion eingesetzt, liefert eine Kurve, die sehr schön mit der Kurve in deinem Diagramm in Deckung ist. Die SAQ für diese Lösung ist übrigends 5.7.

LG
Jochen