Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Mathematik und Physik ::  Suche: einfaches numerisches Verfahren f. nichtlineares Optimierungsproblem     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
numeri
Unregistrierter




Beitrag numeri Unregistrierter 09:44:57 17.01.2012   Titel:   Suche: einfaches numerisches Verfahren f. nichtlineares Optimierungsproblem            Zitieren

Hallo, gegeben ist ein Polynom

f: IR^2 -> IR,

bspw. f(x) = x^3 - y^2 + 3

Ich suche ein möglichst einfaches, numerisches Verfahren, welches mir lokale Extrema bei einer solchen Funktion findet - dieses würde ich gerne in C oder C++ implementieren.

Das ist keine Hausaufgabe, mich interessiert nur, ob man solche nichtlinearen Optimierungsprobleme mit moderatem Aufwand programmatisch lösen kann.

danke
numeri
Unregistrierter




Beitrag numeri Unregistrierter 09:46:01 17.01.2012   Titel:              Zitieren

Ich meine natürlich bei dem Beispiel f(x,y) = ..., also y ist keine Konstante.
Namenloser342
Unregistrierter




Beitrag Namenloser342 Unregistrierter 10:02:37 17.01.2012   Titel:              Zitieren

Hmm, ich würde mir einen Punkt heraussuchen und dann drumherum die Funktionswerte auslesen. Dann vergleichen und in Richtung abnehmender bzw. zunehmender Werte weiter wandern.
knivil
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.02.2009
Beiträge: 4495
Beitrag knivil Mitglied 10:05:02 17.01.2012   Titel:              Zitieren

Lokale Extrema zu finden ist meist nie das Problem. Einfach entlang des Gradienten wandern. Lohnt sich aber nicht fuer solch simple Beispiele.

_________________
If it were not for laughter, there would be no Tao.
Sie können einen Beitrag nicht so schnell nach Ihrem letzten absenden, bitte warten Sie einen Augenblick.


Zuletzt bearbeitet von knivil am 10:07:38 17.01.2012, insgesamt 1-mal bearbeitet
zeusosc
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.12.2006
Beiträge: 745
Beitrag zeusosc Mitglied 10:08:34 17.01.2012   Titel:              Zitieren

Hi,

Was definierst du als lokal?

Ansonsten die partiellen Ableitungen bilden und checken ob die null werden,..

§\partial_x f=3x^2 , \partial_y f=2y§

_________________
Der Contrapart in einer Diskussion zu sein, heißt nicht das dieser Standpunkt
der eigene sein muss! ;)
numeri
Unregistrierter




Beitrag numeri Unregistrierter 10:22:37 17.01.2012   Titel:              Zitieren

Wie man damit in der Analysis umgeht, ist mir klar. Aber mal schnell Ableitungen bilden und nach 0-Stellen in dieser suchen, ist ja programmatisch so eine Sache. Genau darum geht es mir ja.

Wie ein lokales Extremum definiert ist, sollte klar sein. Jedes Extremum ist lokal, ich wollte nur betonen, dass es mir nicht auf das globale Extremum ankommt, welches, soweit ich weiß, auch nicht effizient gefunden werden kann in der nichtlinearen Optimierung.
ProgChild
Autor

Benutzerprofil
Anmeldungsdatum: 29.12.2003
Beiträge: 2261
Beitrag ProgChild Autor 10:35:39 17.01.2012   Titel:              Zitieren

Falls du nichts über die Funktion weist, könntest du den Nelder-Mead Algorithmus verwenden. Ansonsten ein Gradientenverfahren (wie schon erwähnt), Verfahren des steilsten Abstiegs (Steepest Decent), wobei du halt das Vorzeichen der Funktion umdrehen musst, wenn du ein Maximum suchst.

Ein Gradientenverfahren sucht nicht nach der Nullstelle der 1. Ableitung. Und kannst die Ableitung auch numerisch berechnen/approximieren.

_________________
meine Homepage | Artikel: GNU Autotools (PDF) | Software: Wallpaper Action, Netwalker | Bibliotheken: FoxTray


Zuletzt bearbeitet von ProgChild am 10:37:16 17.01.2012, insgesamt 1-mal bearbeitet
zeusosc
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.12.2006
Beiträge: 745
Beitrag zeusosc Mitglied 10:51:25 17.01.2012   Titel:              Zitieren

Numerisch bilde ich auch nur die richtungsableitungen,..

Im mehrdimensionalen hab ich das noch nicht gemacht, aber
diese sind doch im prinzip :

Interpolierter Wert:
§f(x_1,\frac{y_1-y_2}{2}+y_1)=f(x_1,y_1)+\frac{f(x_1,y_1)-f(x_1,y_2)}{2}§

Die Steigung der Tangente an der Interpolierten Stelle (quasi Partielle Ableitung):
§m=\frac{f(x_1,y_1+h)-f(x_1,y_1)}{h}=\frac{2(f(x_1,y_1+\frac{y_1-y2}{2})-f(x_1,y_2))}{y_1-y_2}§

--Stimmt, das newton Verfahren ist ganz gut (Gradientenverfahren),..

_________________
Der Contrapart in einer Diskussion zu sein, heißt nicht das dieser Standpunkt
der eigene sein muss! ;)
Bashar
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.05.2001
Beiträge: 16828
Beitrag Bashar Mitglied 11:20:06 17.01.2012   Titel:              Zitieren

Die meisten Verfahren der nichtlinearen Optimierung sind darauf ausgelegt, von einem gegebenen Startpunkt aus EINE Nullstelle möglichst schnell und genau zu finden. Die genannten Verfahren, Gradientenverfahren und Newtonverfahren sind sowas. Nelder-Mead kenn ich leider nicht, aber laut Wikipedia funktioniert es auch nur für unimodale Funktionen (also welche mit nur einem Extremalpunkt).
Ich muss also hier erstmal fragen: Geht es darum, ALLE Nullstellen zu finden oder genügt obiges? Falls letzteres, ist das Gradientenverfahren sicher das einfachste, das kann aber auch bei manchen Funktionen richtig langsam sein, wenn es sich in winzigen Zickzackschritten an den Optimalpunkt herantastet. Eventuell ist also ein globalisiertes Newton-Verfahren angeraten, bei solchen einfachen Funktionen ist das in jedem Fall drin.
(Falls ersteres: Keine Ahnung.)

_________________
OSL♥
!rr!rr_.
Unregistrierter




Beitrag !rr!rr_. Unregistrierter 12:43:04 17.01.2012   Titel:   opti            Zitieren

Bashar schrieb:

Ich muss also hier erstmal fragen: Geht es darum, ALLE Nullstellen zu finden oder genügt obiges?
(Falls ersteres: Keine Ahnung.)

"falls ersteres:" alle Nullstellen eines Systems F zu finden, ist schon ein ziemlich nichttriviales problem, egal ob numerisch oder exakt, schon im relativ einfachen Fall von Polynomen - von komplizierteren Funktionen ganz zu schweigen.

Eine allgemeine methode ist, erstmal ein System G aufzustellen, dessen Nullstellen man sehr leicht berecchnen kann (sagen wir: x(x-1)(x-2)(x-3)), und dann mit einer Homotopie

Hom(t) = t*F+(1-t)*G

das Startsystem G nach und nach in F zu verwandeln, während man mit Newton die Lösungspfade trackt.
Und hofft, daß man nicht auf eine "Mine latscht", etwa eine Singularität auf einem der Lösungspfade, oder auf einen Lösungspfad, der nach einigen Pirouetten zum Anfangspunkt zurückkehrt.

Braucht man sämtliche Lösungen, und zwar alle exakt, dann: Gröbnerbasen
numeri
Unregistrierter




Beitrag numeri Unregistrierter 08:57:27 18.01.2012   Titel:              Zitieren

Vielen Dank für eure Beiträge. Da die Sache doch ziemlich kompliziert zu sein scheint, gebe ich mich erstmal mit irgendeinem lokalen Extremum zufrieden und verwende ein Gradientenverfahren :)
C/C++ Forum :: Mathematik und Physik ::  Suche: einfaches numerisches Verfahren f. nichtlineares Optimierungsproblem   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.