Irgendwie wurde das Thema Funktionale und Variationsrechnung bei uns
etwas zu knapp behandelt. Jetzt habe ich's 10 Jahre lang nicht gebraucht
und frage mich, ob das nicht vielleicht doch ganz praktisch wäre
Sagen wir ich habe eine Funktion
. Ich suche jetzt deren Inverse:
, sodass
.
Könnte man nicht ein Minimierungsproblem ansetzen?
oder so
Dieses müsste doch, z.B. in einem begrenzten Bereich lösbar sein, wenn
man mittels Variationsrechnung nach g ableitet, oder?
Nur wie macht man das in der Praxis?
Prinzipiell kannst Du eine Inverse durch Variationsrechnung berechnen -
auch wenn das ein ungewöhnlicher Anwendungsfall ist. Voraussetzung ist
natürlich auch, daß die Inverse überhaupt existiert und ebenfalls
definit ist *).
Dann fehlt allerdings innerhalb des Doppelintegrals (ich nehme an über
das Gebiet von Interesse) das Produkt mit der Testfunktion, die an den
Rändern verschwindet. Da die Testfunktion (im Gegensatz zur
Zielfunktion) an den Rändern verschwinden und an allen anderen Stellen
definit sein muß, kann man nicht einfach die Zielfunktion als
Testfunktion nutzen - das Produkt aus Test- und Zielfunktion ist also im
Allgemeinen nicht Zielfunktion zum Quadrat.
*) Die Forderung, daß die Inverse im gesamten Gebiet definit ist, also
daß die Ursprungsfunktion im gesamten Gebiet invertierbar ist und die
Inverse keinen Sprung macht, macht die Variationsrechnung nur bei sehr
eingeschränkten Funktionen überhaupt anwendbar.
Versteh ich dich richtig?
Du meinst, ich brauche einen zusätzlichen faktor alpha, der dafür sorgt,
dass der Integrand am Rand des Integrationsbereiches 0 wird? Ich nehme
an, weil sonst die Methode nicht funktioniert?
Also so? Da kann man sich ja etwas beliebiges ausdenken...
Und wie wäre dann das weitere Vorgehen, um g zu ermitteln?
Und ich brauche diesen Faktor alpha auch, wenn der Integrationsbereich
ein ganzer Vektorraum ist, also von -inf bis +inf?
A. S. schrieb:> Du meinst, ich brauche einen zusätzlichen faktor alpha, der dafür sorgt,> dass der Integrand am Rand des Integrationsbereiches 0 wird? Ich nehme> an, weil sonst die Methode nicht funktioniert?>> Also so? Da kann man sich ja etwas beliebiges ausdenken...
Genau.
A. S. schrieb:> Und ich brauche diesen Faktor alpha auch, wenn der Integrationsbereich> ein ganzer Vektorraum ist, also von -inf bis +inf?
Dann verläßt Du den Bereich, wo die auf der Variationsrechnung
basierenden Verfahren (Ritz-Verfahren, Galerkin-Verfahren) brillieren
können. Die sind eben hauptsächlich dafür da, um echte Randwertprobleme
zu lösen, anstelle irgendwelche Freiraumlösungen.
A. S. schrieb:> Und wie wäre dann das weitere Vorgehen, um g zu ermitteln?
Du machst einen Ansatz für g und löst den numerisch, indem Du über das
Gebiet integrierst und die Parameter für den Lösungsansatz von g
bestimmst.
Walter T. schrieb:> Du machst einen Ansatz für g und löst den numerisch
Ah okay. Damals in Regelungstechnik haben wir in der Variationsrechnung
irgendwelche Hamiltonians angesetzt, Lagrange-Gleichungen gelöst und
dann doch eher analytische Ergebnisse bekommen. Aber das war vermutlich
doch was deutlich anderes...
Macht aber nichts. Nehmen wir deinen Weg.
Da wir ja eh numerisch unterwegs sind, könnte man jetzt auch auf die
Idee kommen, x und y zu samplen.
ist aber eher ne doofe Idee, oder? Die ganze schöne Glattheit ist weg.
Könnte man die Samplingpositionen stattdessen in der alten Lösung
irgendwie reincodieren, indem man alpha so definiert, dass da nur kleine
Fensterchen um die Samplingpunkte herum bestehen?
A. S. schrieb:> Die ganze schöne Glattheit ist weg.
Samplen entspräche einem Ansatz Nullter Ordnung. Wenn Deine eigentliche
Gleichung keine Ableitungen benötigt, (eigentlich sind die Verfahren ja
für Differenzialgleichungen gedacht), ist das kein Problem. Du willst ja
nur noch integrieren, was in Deinem Fall einer einfachen Summe
entspricht.
Das ist ja gerade der Reiz an diesen Verfahren: Die benötigte
Ableitungsordnung ist begrenzt, d.h. ich kann lokale Ansätze verwenden.
Das Quadrat über dem Term in den eckigen Klammern gehört da nicht mehr
hin. x hat Vektorcharakter, a(x) hat Vektorcharakter, d.h. das
Skalarprodukt aus a(x_i) * [...] muss integriert werden.
Setzt Du den folgenden Ansatz an: a(x_i) = a_i mit a_i = 1 innerhalb des
Gebiets und a_i = 0 an den bekannten Rändern, hast Du jetzt n-m
Gleichungen mit n-m Unbekannten, die Du nach g_i lösen kannst. m ist
übrigens einfach die Anzahl der bekannten Stützstellen an den Rändern.
A. S. schrieb:> Irgendwie wurde das Thema Funktionale und Variationsrechnung bei uns> etwas zu knapp behandelt.
Deine Aufgabenstellung entspricht doch genau der
Legendre-Transformation. Ich habe dazu mal ein kleines Rechenbeispiel
beigefügt.
Joe G. schrieb:> Deine Aufgabenstellung entspricht doch genau [dem Zweck] der> Legendre-Transformation.
100% Zustimmung (Ergänzung von mir).
Aber war den Sinn des Threads nicht, mal ein (ehr nicht so geeignetes)
Beispiel für Variantionsrechnung durchgezogen zu haben, um das Prinzip
zu verstehen?
Ich habe nicht verstanden, wie die Legendre-Transformation dabei helfen
kann, eine Inverse zu berechnen. Das sieht doch eher so aus, dass ich
die Inverse schon kennen muss, um die Transformation zu ermitteln.
Tabellen mit vorberechneten Funktionen wie bei anderen Transformationen
finde ich auch keine.
Also zurück zur anfänglichen Formulierung.
Ich krieg's noch nicht so richtig hin. Die korrigierte Gleichung ist
also diese:
wie wäre es mit einem Beispiel - erstmal ein eindimensionaler Fall:
Ich suche ein Verfahren, das die zugehörige Inverse rechnerisch
ermittelt. Hier die erwartete Lösung
dann wähle ich alpha wie du vorschlägst als eine Funktion, die immer 1
ist, außer am Rand. Für den Integrationsrand definiere ich mal
willkürlich x in [-1; +1].
Natürlich muss ich etwas Wissen in den Ansatz stecken, was die Funktion
angeht. Aber man könnte ja z.B. eine Fallunterscheidung wählen, sodass
g(y) = y^c für positive y und g(y) = -(-y)^c für negative y ist. Das
c=1/3 > 0 ist gesucht. Also:
Jetzt muss ich gar nichtmal zuerst nach dem Parameter c ableiten,
sondern kann sogar direkt nach x integrieren...
Das haut mich jetzt nicht so um. Also ist es egal, welches c ich wähle
und mit diesem Ansatz finde ich immer eine fehlerfreie Lösung? Wohl
kaum!
Wenn ich übrigens erst nach c ableite und dann erst nach x integriere,
kommt selbstverständlich das selbe Ergebnis raus.
Was läuft schief?
A. S. schrieb:> Was läuft schief?
Schief..... nichts. Du hast die exakte Lösung in den Ansatz eingesetzt
und es kommt das richtige Ergebnis heraus. Das haut keinen vom Hocker,
ist aber auch nicht verkehrt.
Wo liegt das Problem: Hier wird ein Problem behandelt, für das diese
Verfahren nicht besonders gut geeignet sind. Die Variationsverfahren
sind gut für Randwertprobleme, d.h. Differenzialgleichungen, bei denen
die Ränder bekannt sind. Diese sind analytisch nur sehr schwer in den
Griff zu bekommen, weil die Ränder beliebig kompliziert sein können. Das
einfachste Beispiel, das mir einfällt, wäre die Wärmeleitung in einem
Kühlkörper: Die Gleichungen sind einfach gestrickt, aber der Rand des
Kühlkörpers hat eine beliebig komplizierte Geometrie.
Die Inverse ist weder Differenzialgleichung noch ein echtes
Randwertproblem. Entsprechend steckt man Aufwand hinein, der eigentlich
nicht nötig wäre.
Ich habe mal im Bild in Anhang den typischen Lösungsweg für das Problem
skizziert. Man merkt wohl, daß man alt wird, wenn man am Ostersonntag
nach dem Kaffee keine partielle Integration mehr hinbekommt, aber der
Weg sollte funktionieren.
Ich verstehe, ich habe das Problem nur an den Randpunkten gelöst und da
funktionieren alle Werte für c. Der Grund, warum ich nur die Randpunkte
untersucht habe ist folgender: ich habe alpha konstant gewählt. Da das
Problem aber rotationssymmetrisch im Ursprung ist, heben sich die Fehler
durch falsch gewählte c im Positiven und Negativen Teil auf. Das scheint
mir Zufall zu sein für diesen Fall. Aber ein blöder, denn offensichtlich
hat das Integral nicht den Fehler gemessen, den es messen sollte.
Man kann meine initiale Formulierung wählen mit RMSE-Integral. Das ist
analytisch wegen dem Quadrat schon deutlich komplizierter. Wenigstens
für den positiven Integrationsbereich liefert die Methode aber
brauchbare Ergebnisse. Wenn man den Bereich aber von -1 bis +1
erweitert, fängt man an, mit komplexwertigen Zahlen zu rechnen.
Walter T. schrieb:> Entsprechend steckt man Aufwand hinein, der eigentlich> nicht nötig wäre.
so? welcher Aufwand ist denn nötig, um eine allgemeine mehrdimensionale
Inverse zu berechnen oder anzunähern, die auf einem frei definierbaren
Intervall passt? Ich sehe ja ein, dass der Weg aufwändig ist. Aber
siehst du einen besseren? Nur her damit!
A. S. schrieb:> welcher Aufwand ist denn nötig, um eine allgemeine mehrdimensionale> Inverse zu berechnen oder anzunähern, die auf einem frei definierbaren> Intervall passt?
Von welcher Funktion suchst Du die Inverse? i.A. ist der Beweis, dass
die Funktion überhaupt invertierbar ist, manchmal aufwendiger als die
Inverse selbst.
A. S. schrieb:> Aber> siehst du einen besseren?
Der Klassiker ist die schon oben erwähnte Legendre-Transformation.
A. S. schrieb:> Nur her damit!
Genau. Was ist denn Deine mehrdimensionale Funktion und was das
Intervall?
irgendwann vielleicht mal die Generatorfunktion hier invertieren:
https://github.com/tensorflow/tensorflow/blob/r1.13/tensorflow/contrib/eager/python/examples/generative_examples/dcgan.ipynb
Das schöne ist ja, dass man nicht die exakte Lösung braucht, sondern nur
eine, die gut genug ist.
Der Rang des Generators passt natürlich nicht. Es gehen 100 Zahlen rein,
aber dafür kommen 256 raus. Die meisten Invertierer unter uns wird das
abschrenken, aber ich sehe das Problem noch nicht so richtig. Wie
gesagt, eine approximative Lösung würde ja reichen.
Es gibt zwei Schwierigkeiten:
* Das Intervall ist schwierig zu definieren. Deswegen habe ich nach
einem samplingbasierten Verfahren gefragt: Der Definitionsbereich ist
durch ein paar tausend Bilder gegeben. Die lassen sich als Diracs oder
auch mit Kernel darstellen. Man kann auch versuchen, eine konvexe Hülle
außenrum zu zeichnen. Aber ich vermute mal, alle Invertierungsversuche
sind ziemlich bescheuert, wenn man diesen Raum der möglichen Bildern
nicht sauberer definieren kann. Sonst findet man zwar eine Inverse, aber
die invertiert etwas völlig anderes als man möchte.
* Am Ende wird man über 2 Mio nichtlineare, verkoppelte Gleichungen
haben. Falls man einen Ansatz wählt, der genauso viele freie Parameter
hat wie der Generator. Deswegen habe ich auch nach der
Variationsrechnung gefragt. In meiner Erinnerung kam die ohne "Ansatz
aufstellen" aus und die korrekte Lösung fällt einfach heraus, weil man
ein Gleichungssystem nach der gesuchten Funktion ableitet (und nicht
nach deren Parametern). Um dort hinzukommen, war mir wichtig, erstmal
das Verfahren genau zu verstehen - deswegen die Frage mit
Spielzeugbeispielen.
Daher trainiert man wohl Invertierte Netze genauso aufwändig, wie
normale Netze.
Walter T. schrieb:> Der Klassiker ist die schon oben erwähnte Legendre-Transformation.
Ich habe aber das konkrete Vorgehen, um damit eine Inverse zu berechnen,
noch nicht verstanden. Bleiben wir ruhig erst bei den einfachen
Beispielen...
Laut der Beschreibung
(https://de.wikipedia.org/wiki/Legendre-Transformation) hängen die
Ableitung zwischen Originalfunktion und Bildfunktion über die Inverse
zusammen. Man könnte also meinen, es geht so:
* ich will y = u(x) invertieren
* also ermittle ich deren Integral y = U(x) = f(x)
* das transformieren ich mit Legendre zu g(y) = S(y)
* dann leite ich das ab, und erhalten x = s(y), als odie Inverse zu u(x)
Aber: um mit Legendre zu transformieren muss ich ja genau diese Inverse
händisch ermitteln, oder nicht? Auch in dem Beispiel, das auf Wikipedia
steht, wird die Inverse u(x) durch Umstellen ausgerechnet. Legendre
scheint nur den Integrationsschritt zu g(y) durch andere Mathematik zu
ersetzen. Wo hänge ich hier bei dem Thema?
> Inverse_Galerkin.jpg
Was du vorhin als Inverse_Galerkin gepostet hast, leuchtet mir auch
nicht mehr ganz ein. Du setzt den Fehler (bzw. das Residuum) F(x) an und
leitest den dann nach x ab, suchst also den Teil des
Definitionsbereichs, für den dieser Fehler minimal ist? Warum suchst du
nach x? Müsstest du nicht nach deinen Parametern suchen?
Und dann wählst du eine Testfunktion als nicht konvergierende Summe aus
Sinus-Termen
(https://www.wolframalpha.com/input/?i=sum_(k%3D0)%5E10+sin(k+%CF%80+x),
die aber wenigstens rotationssymmetrisch ist und damit nicht das Problem
hat, dass die Parameter verschwinden. Kommt nicht was völlig anderes
heraus, wenn ich z.B. diese hier wähle:
https://www.wolframalpha.com/input/?i=sum_(k%3D0)%5E3+cos(k+%CF%80+x) ?
A. S. schrieb:> Ich habe aber das konkrete Vorgehen, um damit eine Inverse zu berechnen,> noch nicht verstanden. Bleiben wir ruhig erst bei den einfachen> Beispielen...
Hier mal ein weiteres einfaches Beispiel gerechnet.
A. S. schrieb:> irgendwann vielleicht mal
Okay... da bin ich inhaltlich abgehängt. Inwieweit es eine weitere
Definition der Pseudoinversen gibt, die das erlaubt, und ob man diese
mit einem Variationsverfahren findet - dafür könnte man vermutlich noch
einen Doktor bekommen.
A. S. schrieb:> Du setzt den Fehler (bzw. das Residuum) F(x) an und> leitest den dann nach x ab, suchst also den Teil des> Definitionsbereichs, für den dieser Fehler minimal ist?
Um das Minimum zu finden, müßte ich die Ableitung Null setzen. Mache ich
aber nicht. Tatsächlich wird die Testfunktion - die Variation -
vormultipliziert. Jetzt entspricht das einer Ansammlung von
Richtungsableitungen über das Gebiet (nicht dem Parameterraum).
Integriere ich jetzt über das Gebiet, hätte ich bei bekannten Parametern
eine nackte Zahl als Ergebnis. Ein Potenzial - oder besser: Eine Art
Wirkung. Ich kenne die Parameter aber nicht, also suche ich das Minimum
des "Potenzials" im Parameterraum.
A. S. schrieb:> Und dann wählst du eine Testfunktion als nicht konvergierende Summe
Das ist tatsächlich nicht schlimm. Ich wähle ja ohnehin nur eine
endliche Zahl n-1 an Summanden, d.h. je nach der Größe von n variieren
natürlich die Ergebnisse u_j, aber die Summe konvergiert.
sum_i v_i * cos(π i x) funktioniert deswegen nicht als Ansatz, weil es
nicht für alle v_i die Randbedingungen 0 erfüllt.
Irgendwie werde ich das Gefühl nicht los, dass ihr beide nicht vom
gleichen redet. Aus dem Eingangspost und dem Integral das der TO dort
hingeschrieben hat dachte ich eigentlich, er möchte die Inverse dadruch
berechnen dass er das Integral extremiert. Dann müsste er den Integrand
hernehmen und die Euler-Lagrangegleichungen aufstellen. Leider würde ihm
das dann nicht wirklich weiterhelfen, da diese erst wieder auf die
analytische Berechnung der Inversen zusammenfallen.
Insbesondere das hier
A. S. schrieb:> Ah okay. Damals in Regelungstechnik haben wir in der Variationsrechnung> irgendwelche Hamiltonians angesetzt, Lagrange-Gleichungen gelöst und> dann doch eher analytische Ergebnisse bekommen. Aber das war vermutlich> doch was deutlich anderes...
ist doch genau das was ich meine?
https://de.wikipedia.org/wiki/Variationsrechnung#Euler-Lagrange-Gleichung;_Variationsableitung;_weitere_notwendige_bzw._hinreichende_Bedingungen
Walter T. schrieb:> also suche ich das Minimum des "Potenzials" im Parameterraum.
Wer schreibt denn so einen Unfug? Muß ein anderes, unkonzentriertes Ich
gewesen sein. Ich suche natürlich die Nullstelle der Wirkung im
Parameterraum.
Diode E. schrieb:> ...
Danke, dass du dich einschaltest.
Ja. Meine Aufgabenstellung ist die Berechnung einer Inverse.
Ich habe mich an mein Studium zurückerinnert und bin darauf gekommen,
dass wir damals in der Variationsrechnung Lösungsfunktionen ermittelt
haben, ohne einen Ansatz zu brauchen. Leider kenne ich nur die eine
Lagrange-Anwendung und das Lesen von Wikipediaseiten bringt einen in der
Mathematik ja bekanntlich nicht weiter -
Dass Lagrange nicht hilft, ist klar, denn dabei geht es prinzipbedingt
um zeitabhängige Funktionen und diesen "Luxus" habe ich leider nicht.
Aber das sagt ja nicht, dass es nicht andere Werkzeuge der
Variationsrechnung gibt, die mir helfen.
ich werde mir mal einen ruhigen Tag nehmen, meinen Kopf leerschütteln
und dann nochmal versuchen zu verstehen, was mr nicolas in seinen
letzten beiden Posts versucht hat, zu erklären...