WaBis

walter.bislins.ch

Maskenfunktionen zum Zusammensetzen zweier Funktionen

Montag, 2. Juni 2014 - 03:31 | Autor: wabis | Themen: Wissen, Mathematik, Animation, Interaktiv
Mit Hilfe zweier Maskenfunktionen kann man zwei fast beliebige Funktionen aneinanderhängen, ohne dass ein unsteter Übergang entsteht. Die resultierende zusammengesetzte Funktion erhält damit eine «gutartige» Ableitung an der Übergangsstelle.

In diesem Beitrag leite ich die beiden Maskenfunktionen her und zeige an einem Beispiel, wie sie angewendet werden.

Anwendung

Wenn eine Funktion mit durchgehendem Definitionsbereich konstruiert werden muss, welche bestimmte Eigenschaften hat, z.B. stetig steigend sein soll, und durch eine vorgegebene Anzahl Punkte verlaufen soll, kommt man unter Umständen nicht darum herum, mehrere Funktionen zusammenzusetzen.

Es kann zwar jederzeit ein Polynom durch einen beliebige Anzahl Punkte berechnet werden. Dieses Polynom schwingt jedoch stark zwischen diesen Stützpunkten. Soll die gesuchte Funktion stetig steigend oder sinkend sein, kommt diese Lösung nicht in Frage.

Andere Funktionen, wie die Potenzfunktionen, welche einen steten Verlauf haben, kann man meist nur durch drei oder vier Punkte legen. Wenn mehr Punkte vorhanden sind, muss man zwei Funktionen f1(x) und f2(x) zusammensetzen. Eine Möglichkeit ist, die beiden Funktionen an der Schnittstelle abzuschneiden und so zusammenzusetzen, dass die beiden Funktionen an der Schnittstelle dieselbe Steigung haben. Mit dieser Methode hat man jedoch keinen durchgehenden Definitionsbereich. Der Definitionbereich von f1(x) endet bei der Schnittstelle und der Definitionbereich von f2(x) beginnt dort.

Die Idee der hier vorgestellten Maskenfunktionen ist, dass f1(x) an der Schnittstelle durch Multiplikation mit der Maskenfunktion g2(x) ausgeblendet wird (Wertebereich wird Null), während gleichzeitig an derselben Stelle f2(x) durch Multiplikation mit der Maskenfunktion g1(x) eingeblendet wird. Haben die beiden Funktionen an der Schnittstelle denselben Funktionwert und dieselbe Steigung, was nicht Bedingung ist, entsteht ein sehr schöner weicher Übergang. Diese Stelle ist stetig und lässt sich somit beliebig oft ableiten. Es entsteht ein durchgehender Definitionbereich über beide Funktionen.

Masken Funktionen

Grundfunktion für Masken

Um zwei Funktionen an einer Stelle aneinander zu hängen, muss die eine Funktion an dieser Stelle in die andere Funktion überblendet werden. Dazu benötige ich zwei Funktionen, welche als Masken für das Überblenden dienen. Mit der einen Maske g1(x) wird durch Multiplikation mit der einen Funktion diese Funktion an der Stelle x = r ausgeblendet, während die zweite Funktion an derselben Stelle durch Multiplikation mit der zweiten Maske g2(x) eingeblendet wird.

Die folgende Grundfunktion eignet sich als Masken-Funktion:

(1)
y(x) = { x \over \sqrt{ x^2 + 1 } }
Maske g1(x) zum Einblenden einer Funktion

Diese Funktion muss noch so manipuliert werden, dass ihr Y-Wert zwischen 0 und 1 liegt. Dazu wird die Funktion mit 0,5 multipliziert und durch Addition von 0,5 auf die X-Achse angehoben. Zudem soll die Funktion mit dem Parameter r an die Stelle x = r verschoben werden können. Dazu wird x durch (xr) ersetzt. Mit dem Parameter q soll die Maske in X-Richtung gestaucht werden können. Dazu wird (xr) durch q · (xr) ersetzt.

Somit sieht die Funktion g1(x) zum Einblenden einer Funktion wiefolgt aus:

(2)
\color{blue}{g_1(x)} = 0{,}5 \cdot { q \cdot (x - r) \over \sqrt{ \left[q \cdot (x - r) \right]^2 + 1 } } + 0{,}5

Die Formel für die Maske g2(x) zum Ausblenden einer Funktion sieht fast identisch aus. Sie unterscheidet sich nur im negativen Vorzeichen im Zähler:

(3)
\color{red}{g_2(x)} = 0{,}5 \cdot { -q \cdot (x - r) \over \sqrt{ \left[q \cdot (x - r) \right]^2 + 1 } } + 0{,}5

Wenn die Make nicht so schön abgerundete Ecken haben soll, kann dies mit einem zusätzlichen Parameter n = 2, 4, 6, ... eingestellt werden. Je höher n ist, umso eckiger wird die Maske:

(4)
g_{1,2}(x) = 0{,}5 \cdot { \pm q \cdot (x - r) \over \sqrt[n]{ \left[q \cdot (x - r) \right]^n + 1 } } + 0{,}5

Wenn nun von einer Funktion f1(x) an der Stelle r in eine Funktion f2(x) geblendet werden soll, verknüpft man diese Funktionen mit den Masken wiefolgt:

(5)
y(x) = g_2(x) \cdot f_1(x) + g_1(x) \cdot f_2(x)

Mit dem Parameter q kann eingestellt werden, wie gross der Überblendbereich sein soll. Bei einem Wert q = 1 wird im Abstand von 10 Einheiten ab r nur noch 1 % der einen Kurve in die andere eingeblendet. Bei einem Wert von q = 10 sind diese 1 % bereits bei 1,0 Einheiten ab r erreicht, und bei 10 Einheiten werden nur noch 0,01 % eingeblendet. Im Anwendungsbeispiel ist q = 100 ein praktischer Wert.

Beispiel

In diesem Beispiel setze ich mit Hilfe der Maskenfunktionen eine Potenzfunktion f1(x) und eine Parabel f2(x) zusammen. Die Potenzfunktion ist definiert durch die drei Punkte P0 bis P2. Die Parabel ist definiert durch die zwei Punkte P2 und P3 und die Steigung beim Punkt P2. Die Steigung bei P2 ist durch die berechnete Potenzfunktion gegeben.

(6)
f_1(x) = a \cdot x^b + c
(7)
f_2(x) = k_1 \cdot x^2 + k_2 \cdot x + k_3

Die zusammengesetzte Funktion f(x) ist dann:

(8)
f(x) = \left[ a \cdot x^b + c \right] \cdot g_2(x) + \left[ k_1 \cdot x^2 + k_2 \cdot x + k_3 \right] \cdot g_1(x)

In der Grafik ist f(x) ganz dick blau eingezeichnet. Die dicke orange Linie entspricht f1(x) · g2(x) und die dicke magenta Linie entspricht f2(x) · g1(x).

Die Punkte haben folgende Koordinaten:

P0 \to (x_0, y_0) = (0, 0)
P1 \to (x_1, y_1) = (2, 3)
P2 \to (x_2, y_2) = (8, 5)
P3 \to (x_3, y_3) = (12, 7)

Berechnung der Potenzfunktion

Die Potenzfunktion hat die Parameter a, b und c:

(9)
y(x) = a \cdot x^b + c

Da die Potenzfunktion durch den Nullpunkt P0 geht, ist der Parameter c = 0:

(10)
a \cdot (x_0)^b + c = y_0 \qquad\Rightarrow\qquad c = y_0 - a \cdot (x_0)^b = 0 - a \cdot (0)^b = 0

Die Punkte P1 und P2 in (9) eingesetzt ergeben zwei Gleichungen für die beiden noch Unbekannten a und b:

(11)
a \cdot (x_1)^b = y_1
(12)
a \cdot (x_2)^b = y_2
(13)
a = { y_1 \over (x_1)^b }
(14)
a = { y_2 \over (x_2)^b }

Beide Gleichungen (11) und (12) nach a aufgelöst ergeben (13) und (14). Letztere kann man einander gleichsetzen und wir erhalten eine Gleichung, in der nur noch b unbekannt ist:

(15)
{ y_1 \over (x_1)^b } = { y_2 \over (x_2)^b } \qquad\Rightarrow
(16)
y_1 \cdot (x_2)^b = y_2 \cdot (x_1)^b

Beide Seiten logarithmieren und nach b auflösen:

(17)
\ln( y_1) + b \cdot \ln( x_2 ) = \ln( y_2 ) + b \cdot \ln( x_1 ) \qquad\Rightarrow
(18)
b \cdot \left[ \ln( x_2 ) - \ln( x_1) \right] = \ln( y_2 ) - \ln( y_1 ) \qquad\Rightarrow
(19)
b = { \ln( y_2 ) - \ln( y_1 ) \over \ln( x_2 ) - \ln( x_1 ) } = { \ln( 5 ) - \ln( 3 ) \over \ln( 8 ) - \ln( 2 ) } = 0{,}368\,48

Den Parameter a erhält man, indem man b in eine der Gleichungen (13) oder (14) einsetzt:

(20)
a = { y_1 \over (x_1)^b } = { 3 \over 2^{0{,}368\,48} } = 2{,}323\,79

Berechnung der Steigung bei P2

Zur Berechnung der Steigung s bei P2 müssen wir die Ableitung y'(x) der Potenzfunktion ermitteln:

(21)
y'(x) = { \mathrm d \over \mathrm d x } \left[ a \cdot x^b \right] = a \cdot b \cdot x^{b - 1}
(22)
s = y'(x_2 = 8) = a \cdot b \cdot (x_2)^{b - 1} = 0{,}230\,299

Diese Steigung beötigen wir zur Berechnung der Parabel.

Berechnung der Parabel

Die Parabel ist definiert durch die Parameter k1 bis k3:

(23)
y(x) = k_1 \cdot x^2 + k_2 \cdot x + k_3

Um diese berechnen zu können, brauchen wir drei Gleichungen. Zwei Gleichungen erhalten wir durch die Vorgabe, dass die Parabel durch die Punkte P2 und P3 verlaufen soll:

(24)
k_1 \cdot (x_2)^2 + k_2 \cdot x_2 + k_3 = y_2
(25)
k_1 \cdot (x_3)^2 + k_2 \cdot x_3 + k_3 = y_3

Eine weitere Gleichung erhalten wir durch die Bedingung, dass die Parabel beim Punkt P2 die Steigung s haben soll. Um diese dritte Gleichung zu erhalten, muss ich die Ableitung der Parabel berechnen:

(26)
y'(x) = { \mathrm d \over \mathrm d x } \left[ k_1 \cdot x^2 + k_2 \cdot x + k_3 \right] = 2 \cdot k_1 \cdot x + k_2

Jetzt erhalten wir die dritte Gleichung, indem wir die Steigung s bei P2 einsetzen:

(27)
2 \cdot k_1 \cdot (x_2) + k_2 = s

Die drei Gleichungen lassen sich in Matrixform schreiben und dann mit einem Computer lösen:

(28)
\pmatrix{ (x_2)^2 & x_2 & 1 \\ (x_3)^2 & x_3 & 1 \\ 2 x_2 & 1 & 0 \\ } \cdot \pmatrix{ k_1 \\ k_2 \\ k_3 } = \pmatrix{ y_2 \\ y_3 \\ s } \qquad\Rightarrow
(29)
\pmatrix{ k_1 \\ k_2 \\ k_3 } = \pmatrix{ (x_2)^2 & x_2 & 1 \\ (x_3)^2 & x_3 & 1 \\ 2 x_2 & 1 & 0 \\ }^{-1} \cdot \pmatrix{ y_2 \\ y_3 \\ s } \qquad\Rightarrow
(30)
\pmatrix{ k_1 \\ k_2 \\ k_3 } = \pmatrix{ 8^2 & 8 & 1 \\ 12^2 & 12 & 1 \\ 2 \cdot 8 & 1 & 0 \\ }^{-1} \cdot \pmatrix{ 5 \\ 7 \\ 0{,}230\,299 } = \pmatrix{ 0{,}067\,425 \\ -0{,}848\,505 \\ 7{,}472\,82 }
Dein Kommentar zu diesem Artikel
Name
Email optional; wird nicht angezeigt
Kommentar
  • Name wird bei deinem Kommentar angezeigt.
  • Email ist nur für den Administrator, sie wird nicht angezeigt.
  • Du kannst deine Kommentare eine Zeit lang editieren oder löschen.
  • Du kannst Formatierungen im Kommentar verwenden, z.B: Code, Formeln, usw.
  • Externen Links und Bilder werden nicht angezeigt, bis sie der Admin freischaltet.
Weitere Infos zur Seite
Erzeugt Montag, 2. Juni 2014
von wabis
Zum Seitenanfang
Geändert Samstag, 20. August 2016
von wabis