Minimalwert und Maximalwert von Funktion feststellen

19/06/2009 - 11:11 von Franz Bachler | Report spam
Hallo Leute,

eine Funktion hat ein Minimum und ein Maximum, welche sich ziemlich genau
zeitlich wiederholen und in etwa sinusförmig ansteigen bzw. absteigen z.B.
die Umlaufbahn des Mondes - hier ist der Abstand des Mondes zur Erde
gemeint. Das geht aber auch mit der Zeitgleichung.

Man kann jetzt versuchen, durch Probieren zwei Abschnitte innerhalb eines
Tages zu nehmen, diese zu vergleichen, bis man den größten (oder kleinsten)
findet. Dann ca. 1 1/2 Tage zurückgehen und den Abstand auf ca. 1/5 = 5 h zu
verkleinern, nochmals prüfen und das ganze wieder holen, bis man den Abstand
auf die gewünschte Genauigkeit verkleinert hat.

maxy=-1000000.0; // ausreichend klein
zeit=startzeit;
step=1.0; // ein Tag
y0 = mondbahn(zeit);
for (i=0; i<30; i++)
{
yp = mondbahn(zeit+step);
if (y0>maxy)
{
maxy=y0;
mzeit=zeit; // Maximale Höhe maxy bei Zeit mzeit erreicht
}
if (yp<y0) break; // Maximum überschritten
y0=yp;
zeit+=step;
}

dann zeit = mzeit-step*1.5 zurücksetzen und step auf ein 1/5 senken, das
ganze wiederholen usw. bis zur gewünschten Genauigkeit.

Nur: Das ganze ist ziemlich rechenintensiv. Gibt es da irgendeinen Trick,
das ganze schneller durchzuführen? (Wenn man sich auch von der anderen Seite
nàhert und zwei grobe Werte hat, zwischen denen sich das Maximum bzw.
Minimum dann ganz sicher befindet.

Grüsse
Franz
Franz Bachler, A-3250 Wieselburg
E-Mail: fraba (at) gmx.at
Homepage: http://members.aon.at/fraba
oder http://home.pages.at/fraba
 

Lesen sie die antworten

#1 Alexander Bartolich
19/06/2009 - 12:17 | Warnen spam
Franz Bachler schrieb:
[...]
eine Funktion hat ein Minimum und ein Maximum, welche sich ziemlich genau
zeitlich wiederholen und in etwa sinusförmig ansteigen bzw. absteigen z.B.
die Umlaufbahn des Mondes - hier ist der Abstand des Mondes zur Erde
gemeint. Das geht aber auch mit der Zeitgleichung.



So wie ich das verstehe:
- du kennst die Form des Graphen und die ungefàhre Periodendauer
- du weißt nicht, welchen Wertebereich du auf der y-Achse hast
- du weißt nicht wo die Periode beginnt, d.h. du hast von keinem
Nullpunkt die x-Koordinate

[...]
Nur: Das ganze ist ziemlich rechenintensiv. Gibt es da irgendeinen Trick,
das ganze schneller durchzuführen? (Wenn man sich auch von der anderen Seite
nàhert und zwei grobe Werte hat, zwischen denen sich das Maximum bzw.
Minimum dann ganz sicher befindet.



Such dir einen zufàlligen Punkt und ermittle die erste Ableitung,
d.h. stelle fest ob die benachbarten Punkte höher oder tiefer liegen.
Die falsche (TM) Richtung kannst du dann ignorieren.

Weitere Verbeserung: wenn du einen Punkt mit steigender Flanke hast
mach große Sprünge, bist du einen Punkt mit fallender Flanke findest.
Zwischen den Punkten liegt ein (lokales) Maximum. Wenn die Punkte
gleiche y-Koordinate haben liegt dieses Maximum genau in der Mitte
zwischen den beiden.

seq 0 1 99 | xargs -I. echo 'Romani Ite Domum!'

Ähnliche fragen