Forum: PC-Programmierung C++/C Library zur Bestimmung Extremstellen einer Funktion


von cTol (Gast)


Lesenswert?

Hallo zusammen!

kennt Jemand da eine c++\c Library, mit ihre Hilfe man die Extermstellen 
einer Funktion auf  einer bestimmten Interval bestimmen kann.

ZB.

f(x)=x*sin(2*x)+2 ;  Definitionsbereich von x= [1,5];

hier würde ich   die maximale und die minimale Wert von f(x) für x=[1 
bis 5] bestimmen.

ich habe schön eine Library gefunden, mit der ich die Ableitung von der 
Funktion berechnen kann  aber leider kann ich da die Definitionsbereich 
nicht eingrenzen.

Danke schönmal im Voraus.

Gruß
Ctol

von Karl H. (kbuchegg)


Lesenswert?

cTol schrieb:

> ich habe schön eine Library gefunden, mit der ich die Ableitung von der
> Funktion berechnen kann

Die hilft dir so auch noch nicht recht viel.
Denn wenn du die Ableitung hast, müsstest du die 0 setzen und dann diese 
Gleichung nach x auflösen. Und das wiederrum (eine Gleichung auflösen) 
ist nicht so trivial.

> aber leider kann ich da die Definitionsbereich
> nicht eingrenzen.

Du brauchst eine Funktionalität, die dir eine Formel auswerten kann!
Dann lässt du mit einem x deinen Definitionsbereich überstreichen und 
suchst denjenigen x-Wert (durch Probieren) heraus welcher den maximalen 
Funktionswert ergibt, wenn er in die Formel eingesetzt wird.

Alternativ kannst du auf dieselbe Art natürlich auch in der Ableitung 
nach 0-Stellen suchen, wobei da wiedrrum die Randpunkte des 
Definitionsbereiches gesondert behandelt werden müssen. Denn dort ist 
die Ableitung nicht notwendigerweise 0, trotzdem kann sich dort ein 
Minimum/Maximum in diesem Definitionsbereich befinden.

von HalfBit (Gast)


Lesenswert?

Ich nehme an, die Funktion ist Dir erst zur Laufzeit bekannt? Ansonsten 
wärs ja einfach ;-).

* die Praktiker-Methode:

Erstelle ein approximierendes Polynom für Deine Funktion im gesuchten 
Bereich mit der gewünschten Genauigkeit. Dieses kann man dann mit einem 
Numerik-Paket exakt(!) ableiten und die Nullstellen sehr genau 
bestimmen.
Die direkte Berechnung der Ableitung ist numerisch heikel und mit großem 
Fehler behaftet.

Bibliotheken:

In GSL:
http://www.gnu.org/s/gsl/manual/html_node/Interpolation-Example-programs.html
http://www.gnu.org/s/gsl/manual/html_node/Roots-of-Polynomials-Examples.html

In MathNetNumerics:
http://mathnetnumerics.codeplex.com/

* die Geld-Spielt-Keine-Rolle-Methode:

Mathematica und Co. als Bibliothek aufrufen, die Funktion übergeben, von 
Mathematica (oder einem anderen CAS) das Problem lösen und auf Rückgabe 
warten.

von Robert L. (lrlr)


Lesenswert?

sowas hab ich "früher" immer auf meinem Basic-Taschenrechner 
geschrieben..;-)

schwierig ist ja "alle" min/maxima zu finden (weil man vorher nicht weiß 
mit welcher genauigkeit man suchen muss...)
ausserdem gehen die ja auch gerne mal gegen unendlich ;-)

fehlen tut einem in C++ mal hauptsächlich eine expression 
evaluator/parser
der dir die formal (ist ja nur ein string) auswertet (das ist halt der 
vorteil von interpretierten sprachen, dass das einfach dabei war)

das würd ich als 1. suchen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.