Thema: Nichtlineare Optimierung
Hallo guys,<P>hier mal was aus dem wahren Leben:<P>Für die Funktion <BR>x=y/a+(y/b)^(1/c)<BR>sind bei gegebenen (x,y)-Wertepaaren die Parameter a,b, und c zu bestimmen.<BR>Als Test sollte man sich beispielsweise folgende (sinnvolle!) Werte vorgeben:<BR>a=180000<BR>b=1400<BR>c=0.16<BR>0<=y<=1000<BR>Mit den erhaltenen (x,y)-Werteparren soll man jetzt versuchen die Parameter a,b und c zu ermitteln (natürlich müssen dann die o.g. rauskommen [img]images/icons/grin.gif" border="0[/img])<P>Hinwiese:<BR>Wer ein bissel pfiffig ist, der findet schnell ne Lösung mittels der linearen Regression. Die könnte auch mal gepostet werden, um zu zeigen, wie man eine nichtlineare Optimierung auf eine lineare zurückführen kann (wird aber nicht als Lösung anerkannt).<BR>Die brachiale Lösung - Absuchen von sinnvollen diskreten a,b,c-Kombinationen und Auffinden eines Minimums - wird auch nicht akzeptiert.<BR>Wer das ableitungsfreie Optimierungverfahren nach ROSENBROCK kennen sollte (gute Konvergenz bei Gräben und Nebenminimas), der wird damit auf die Nase fallen - geht hier nicht. Kanns aber trotzdem versuchen.<BR>Der zu minimierende Fehler kann in x- oder in y-Richtung gebildet werden(*****). Sinnvoll ist meiner Meinung nach ein gewichteter Fehler aus beiden (kann man einfach mit ner linearen Regression überprüfen).<P>(*****)Anmerkungen zu dem Fehler:<BR>Das ist leichtverstaendlich an einem Beispiel der brachialen Methode zu erlaeutern:<BR>1. Ich habe z.B. 30 (y,x)-Wertepaare fuer a=180000 b=14000 c =0.16 und 0<=y<=1000 erzeugt = Ausgangskurve<BR>2. Ich lasse die Parameter in den Grenzen 100000<=a<=250000, 1000<=b<=2000 und 0.1 <=c<=0.2 mit einer jeweils konstanten Schrittweite (sagen wir 100 mögliche Realisierungen fuer jeden Parameter) laufen und berechne mir für jede mögliche Kombination von a,b, und c eine neue Kurve für 0<=y<=1000, d.h. ich habe zu der Ausgangskurve noch 100*100*100 andere Kurven, von denen eine die von mir gewuenschte Loesung beinhaltet<BR>3. Wie kann ich die finden?: Ueber ein Fehlerkriterium - sicher bekannt das Fehlerquadratminimum von Gauss. Da wo der Fehler fuer eine der Kurven minimal wird, da ist die Kurve mit meinen zu findenden Parametern a=180000 b =1400 c=0.16<BR>4. Wie funktioniert das: Man nehme die Wertepaare der Ausgangskurve und die Wertepaare einer Kurve aus den möglichen Kombinationen fuer a,b und c. Fuer jedes y(i) bilde man die Diffenenz und quadriere sie. Aufsummiert ergibt das einen Fehler (der auch noch durch die Anzahl der Wertepaare geteilt werden kann - hier waren es 30), der mir angibt, wie weit meine momentane Kurve von der Ausgangskurve abweicht. Ist der Fehler 0, dann liegt die momentane Kurve auf der Ausgangskurve. Aber!!! NUR in der y-Richtung, deshalb sollte man auch die x-Richtung mit beachten und dort das gleiche machen. Da der Fehler in der beschriebenen Art und Weise ein absoluter ist sollte man die Groessenordnung noch vereinheitlichen, d.h. Wichten.<BR>5. Das Fehlerquadratminimum funktioniert fuer viele Sachen gut, bei der Gleichung nicht, weshalb noch andere Fehlerkriterien aufgefuehrt sind:<BR>5.1. von der Differenz den Betrag<BR>5.2. die Wurzel aus 5.1<BR>5.3. die 4.te Wurzel aus 5.1<BR>Mit der beschriebenen Herangehensweise kann man eine Sensitivitaetsanalyse (wie Empfindlich reagiert meine Gleichung auf Störungen der (y,x)-Werte, wie gut kann ich einen minimalen Fehler finden) durchfuehren. Stellt man sich z.B. fuer ein konstantes a und laufendem b und c den Fehler aller möglichen Kurven dar, dann erhaelt man 3D ein sehr schoenes Bild, wie der Fehler fuer eine Stelle gegen 0 geht - das Minimum des Fehlers, d.h. meine gesuchten Parameter. Wenn die Kurve ein Trichter ist, dann hat mein Optimierer auch keine grossen Schwierigkeiten das Minimum zu finden, das Problem konvergiert gut. Wenn nicht, dann muss ich nen anderen suchen. Fuer die Gleichung siehts relativ schlecht aus.<BR>Das alles ist nur zum Testen und Erkunden. Das eigentliche Ziel aber ist es für z.B. gemessene Wertepaare (y,x) dann a,b und c zu bestimmen, wobei man sich doch schon auf sein Verfahren verlassen sollte - deshalb vorher schaun, ob der Optimierer auch funktioniert.<p>[ 03.06.2001: Beitrag editiert von: wintel ]