Hallo Tüftler und Programmierer
Folgendes Problem:
Eine Gleichung der Form:
c1+c2*e^(c3*x1+c4*x2)+c5*e^(c6+c7*x3)+c8*e^(c9*x1+c10*x5)…usw.
soll minimiert werden. ci sind Konstante, xi sind unabhaengige Variablen, wobei in einem Exponenten bis zu 3 Variable vorkommen können. Gesucht sind die xi im Minimum, der Absolutwert der Funktion interessiert eigentlich nicht. D.h. ich muss die gleichung nach (bis zu 5000 !!) verschiedenen Variablen gleichzeitig minimieren. Das ganze funktioniert in Mathematica sehr gut mit FindMinimum, nur sind die Rechenzeiten enorm
(>> 48h auf einem 1 GHz Rechner). Hat jemand eine Idee ob und mit welchem Ansatz sich das Beispielsweise in Fortran Programmieren lässt und wie gross (wenn überhaupt) der Geschwindigkeitsvorteil gegenueber Mathematika ist???
Da die Funktion die uebersichtliche Form Summe von Exponentialen von linearen Funktionen hat, sollte es keine schwere Uebung sein, den Gradienten dieser Funktion auszuwerten. Damit hast Du dann alle Verfahren der nichtlinearen Optimierung zur Auswahl. Allerdings ist die Funktion nicht konvex, so dass es kein eindeutiges Minimum geben muss. D.h. Du musst lokale Minima vermeiden, dafuer gibt es aber nur Kochrezepte wie genetische Algorithmen oder simulated Annealing, aber keine Erfolgsgarantie.
Evtl. ist es guenstig, erst eine lineare Koordinatentransformation zu machen, so dass ein paar Exponenten einfacher werden.
Vielleicht verstehe ich ja das Problem falsch, aber wenn eine Summe von Exponentialfunktionen minimal werden soll, dann reicht es doch, wenn jede Exponentialfunktion für sich minimal wird. Und dann reicht es wiederum, wenn die Exponenten selbst jeweils minimal werden. Also bekommt man ein einfaches, lineares Gleichungssystem unter der Forderung, die in den Exponenten stehenden Glgn. sollen unter den gegebenen erlaubten Werten für die x1,x2, … minimal werden.
Nebenbei bemerkt, könnte kein noch so toller Computer das absolute Minimum einer wirklich komplizierten Funktion finden, und das selbst bei nur einem Dutzend Variablen. Das ist ja ein klassisches Optimierungsproblem.
wenn eine
Summe von Exponentialfunktionen minimal werden soll, dann
reicht es doch, wenn jede Exponentialfunktion für sich minimal
wird. Und dann reicht es wiederum, wenn die Exponenten selbst
jeweils minimal werden. Also bekommt man ein einfaches,
lineares Gleichungssystem unter der Forderung, die in den
Exponenten stehenden Glgn. sollen unter den gegebenen
erlaubten Werten für die x1,x2, … minimal werden.
Sobald ein Parameter in mehr als drei verschiedenen Exponentialfunktionen steht, ist es mit dem linearen Gleichungssystem vorbei. Das Gleichungssytem für den genannten Teil der Beispielgleichung lautet
Berichtige wenn ich mich irre:
Gesucht wird das Minimum der Funktion
y=c1+c2*e^(c3*x1+c4*x2)+c5*e^(c6+c7*x3)+c8*e^(c9*x1+c10*x5)+…
Also der Wert aller xi, fuer die y minimal wird. Wenn dafuer ein Computerprogramm eingesetzt wird, dann sucht dieses praktischerweise innerhalb eines Bereichs x1=[x1min,x1max], x2=[x2min,x2max],…, wobei die min und max Werte zB MINFLOAT und MAXFLOAT sein koennten.
D.h in obigem Beispiel erhalte ich garantiert den kleinsten Wert dann, wenn: SGN(c2)*(c3*x1+c4*x2) minimal und zugleich SGN(c5)*(c6+c7*x3) minimal und zugleich SGN(c8)*(c9*x1+c10*x5) minimal und so weiter, immer unter den Nebenbedingungen x1=[x1min,x1max], x2=[x2min,x2max],…
Ergibt das nicht letztlich ein (Un)Gleichungssystem ?
Wie konnte Mathematika ein Minimum ermitteln ?
Ich muss zugeben, ich habe nicht sehr intensiv ueber das Problem nachgedacht.