MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.

________________________________________________________________________________

 

Inhalt....: Minimierung mit dem Goldenen Schnitt Verfahren

Kategorie.: Unterrichtsmaterial

Mathematik: Analysis, Numerik

MuPAD.....: 3.0.0

Datum.....: 2003-02-11

Autoren...: Alessandro Dell'Aere <dellaere@mupad.de>

Funktionen: plot, plot::Function2d, plot::Point2d, Color, PointSize, float, is

________________________________________________________________________________

 

Minimierung mit dem Goldenen Schnitt

 

Diese Lehreinheit bietet eine intuitive Einführung in die Optimierung einer Funktion mit dem

Verfahren des Goldenen Schnittes und gibt Anregungen zum Experimentieren.

 

Wir wollen ein Verfahren kennenlernen, mit dem man näherungsweise das

Minimum einer Funktion f finden kann.

 

Dazu betrachten wir folgende Funktion f in dem Intervall [-PI/2, PI/2]:

 

f := x -> exp(x) + x^6 - 20.0

math

l := float(-PI/2):

r := float(PI/2):

 

F := plot::Function2d(f(x), x = l..r, Color = RGB::Blue):

 

plot(F):

MuPAD graphics

 

Wir sehen am Graphen, dass diese Funktion eine Minimalstelle besitzt.

Diese können wir zunächst nur grob schätzen, jedoch sehen wir deutlich,

dass sie garantiert innerhalb des Intervalls [l, r] liegt.

 

Wir wollen nun den Funktionswert an den Intervallgrenzen und an einer

weiteren Stelle im Inneren des Intervalls berechnen. Dazu teilen wir das

Intervall zunächst im Verhältnis des sog. Goldenen Schnittes in zwei

Teilintervalle. Die Verhältniszahl des Goldenen Schnittes werden wir im

folgenden mit T bezeichnen.

 

Sie berechnet sich wie folgt:

 

T := float( 2/(1 + sqrt(5)) )

math

Die zusätzliche Stelle, an der wir die Funktion berechnen wollen und die wir

nun p nennen wollen, finden wir ganz einfach. Wir gehen von der linken

Intervallgrenze einfach das T-fache der Intervalllänge weiter nach rechts:

 

p :=  l + T*(r - l)

math

Die beiden Teilintervalle sind nun gegeben durch:

 

[l, r], [r, p]

math

 

Nun werten wir die Funktion f an den Randepunkten der Teilintervalle aus:

 

y_l := f(l);

y_r := f(r);

y_p := f(p)

math

math

math

Mit Hilfe der x-Koordinaten l, r, p und den zugehörigen y-Koordinaten y_l, y_r,

y_p lassen sich jetzt die entsprechenden Punkte definieren und zusammen mit

der Funktion f in ein gemeinsames Koordinatensystem einzeichnen:

 

L := plot::Point2d(l, y_l, Color = RGB::Black, PointSize = 3*unit::mm):

R := plot::Point2d(r, y_r, Color = RGB::Black, PointSize = 3*unit::mm):

P := plot::Point2d(p, y_p, Color = RGB::Green, PointSize = 3*unit::mm):

plot(F, L, R, P):

MuPAD graphics

 

Wir hatten die Stelle p gefunden, indem wir von der linken Intervallgrenze

aus das T-fache der Intervalllänge weiter nach rechts gegangen waren.

 

Nun berechnen wir analog eine weitere Stelle q, indem wir von der rechten

Intervallgrenze r aus um das T-fache der Intervalllänge r-l weiter nach links

gehen. Wir berechnen auch gleich den zugehörigen Funktionswert:

 

q :=  r - T*(r - l);

y_q := f(q)

math

math

 

Wir bekommen also einen neuen Punkt, den wir ebenfalls mit in unseren

Graphen aufnehmen wollen:

 

Q := plot::Point2d(q, y_q, Color = RGB::Red, PointSize = 3*unit::mm):

plot(F, L, R, P, Q):

MuPAD graphics

 

Nun überprüfen wir, an welcher der beiden Stellen p und q unsere Funktion

den kleineren Wert annimmt:

 

y_p;

y_q;

is(y_q < y_p)

math

math

math

 

Damit haben wir herausgefunden, dass die gesuchte Minimalstelle nicht nur

im Intervall [l, r], sondern sogar in dem kleineren Intervall [l, p]. Wir

können also das obige Prinzip erneut anwenden. Die Stelle r mit zugehörigem

Funktionswert y_r benötigen wir nun nicht mehr. Deshalb können wir die

Bezeichnungen wechseln, womit wir dieselbe Ausgangssituation wie weiter

oben erhalten:

 

r := p:

y_r := y_p:

R := P:

 

p := q:

y_p := y_q:

P := Q:

 

F := plot::Function2d(f(x), x = l..r, Color = RGB::Blue):

 

Unseren Graphen brauchen wir jetzt nur noch im neuen, kleineren Intervall

darzustellen. Dieses heißt aber nach Wahl unserer Bezeichnungen ebenfalls

wieder [l, r] und die neue Stelle dazwischen wieder p.

 

Um den neuen Graphen zu zeichnen, brauchen wir also nur zu wiederholen,

was wir zum Zeichnen des aller ersten Graphen weiter oben getan haben:

 

L := plot::Point2d(l, y_l, Color = RGB::Black, PointSize = 3*unit::mm):

R := plot::Point2d(r, y_r, Color = RGB::Black, PointSize = 3*unit::mm):

P := plot::Point2d(p, y_p, Color = RGB::Green, PointSize = 3*unit::mm):

 

plot(F, L, R, P):

MuPAD graphics

Wir gehen einen Schritt weiter und berechnen wieder eine weitere Stelle q,

und zwar diesmal, indem wir von der rechten Intervallgrenze r aus um das

T-fache der Intervalllänge (r-l) nach links gehen, denn die neue Stelle q

muß immer in dem größeren der beiden Teilintervalle [l, p] und [p, l]

liegen:

 

q := r - T*(r - l):

 

Da sich nun alles wiederholt, können wir die folgenden Schritte bis zur

nächsten Graphik ohne weitere Kommentare durchführen:

 

y_q := f(q):

Q := plot::Point2d(q, y_q, Color = RGB::Violet, PointSize = 3*unit::mm):

 

plot(F, L, R, P, Q):

MuPAD graphics

 

Wieder stellt sich die Frage, an welcher der beiden Stellen p und q die

Funktion den kleineren Wert annimmt:

 

y_p;

y_q;

is(y_p < y_q)

math

math

math

 

Diesmal wandert also die linke Intervallgrenze l dort hin, wo vorher die Stelle

q war:

 

l := q:

y_l := y_q:

L := q:

F := plot::Function2d(f(x), x = l..r, Color = RGB::Blue):

 

Ein letztes Mal wollen wir den Graphen zeichnen lassen: Die y-Koordinaten

der neuen Punkte L, P und R sind nun viel näher zusammengerückt, als es

ursprünglich der Fall war. Deshalb wird MuPAD die y-Achse neu skalieren,

so dass wir den Verlauf des Graphen in dem für uns relevanten Bereich viel

genauer beurteilen können:

 

L := plot::Point2d(l, y_l, Color = RGB::Black, PointSize = 3*unit::mm):

R := plot::Point2d(r, y_r, Color = RGB::Black, PointSize = 3*unit::mm):

P := plot::Point2d(p, y_p, Color = RGB::Green, PointSize = 3*unit::mm):

 

plot(F, L, R, P):

MuPAD graphics

 

Dieses Verfahren kann man nun so lange fortsetzen, bis die Länge des

Intervalls [l, r] der jeweiligen Anwendung entsprechend  klein genug ist.

 

________________________________________________________________________________

 

Übungen:

1. Die hier untersuchte Funktion hat die Eigenschaft, in dem untersuchten Intervall ein Minimum zu haben und

    stets linksgekrümmt zu sein. Finden sie eine Funktion und dazu ein Startintervall, so dass das obige

    Verfahren kein absolutes, sondern nur ein lokales Minimum findet.

 

2. Diskutieren Sie, was zu tun ist, wenn die Funktion an den beiden inneren Stellen p und q den gleichen Wert

    annimmt.

 

3. Entwerfen sie eine kleine MuPAD-Prozedur, die bei Vorgabe einer (geeigneten) Funktion f und eines

    Startintervalls [l, r] ein Lösungsintervall findet, welches die Minimalstelle umschließt und eine Länge hat,

    die kleiner als 0.001 ist.

________________________________________________________________________________

 

Anmerkungen:

1. Das oben benutzte Teilungsverhältnis von 1:T mit T = 0.61803... ergibt sich aus dem  Grenzwert der

     Quotienten der Fibonacci-Zahlen. Man kann zeigen, dass das Verfahren gerade mit diesem

     Teilungsverhältnis am schnellsten zum Ergebnis führt.

 

2.  Weitere Anregungen finden Sie in der Buchreihe Mathematik 1 x anders. In dieser Reihe

     wird eine Vielzahl unterschiedlichster mathematischer Probleme mit MuPAD gelöst. Die

     Bücher können unter www.schule.mupad.de/literatur kostenfrei kopiert werden.

_______________________________________________________________________________

 

 

 

MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.