Für einen albernen Bildschirmschoner, den ich entwickeln möchte, möchte ich zufällig ein divergenzfreies 2D-Array von 2D-Vektoren generieren und dann ein linienintegrales Faltungsdiagramm erstellen. Ich habe gehört , dass ein Weg , dies zu tun ist , zufälliges Rauschen zu erzeugen, und dann die solenoidal Komponente seiner Helmholtz-Hodge Zersetzung herausragen. Um dies zu tun, habe ich versucht, die folgenden Argumente zu verwenden:
Eine Funktion hat eine Helmholtz-Hodge-Zerlegung wobei und wobei sind. Nehmen wir zunächst an, dass die harmonische Komponente verschwindet.
Im Fourierraum wird dies zu und wir können eine Solenoidprojektion definieren Operator im Fourierraum als , der über eine Funktion auf seine Solenoidkomponente projiziert
Ich habe dann versucht, dies in Mathematica zu implementieren und es auf ein Zufallsarray anzuwenden . Zuerst generiere ich das zufällige Array und wende die FFT auf jede der beiden Komponenten an:
arr = RandomReal[{-1, 1}, {2, 21, 21}];
fArr = Fourier /@ arr;
Ich definiere dann als Funktion des Array-Index:
k[k1_, k2_] := Mod[{k1 - 1, k2 - 1}, 21, -10]/21;
Dann führe ich die Projektion auf die Fourier-Komponenten durch (die Singularität bei wird mithilfe einer Anweisung in Ruhe gelassen ):If
dat = Transpose[
Table[If[k1 == 1 && k2 == 1, fArr[[;; , k1, k2]],
fArr[[;; , k1, k2]] -
k[k1, k2] (k[k1, k2].fArr[[;; , k1, k2]])/(k[k1, k2].k[k1,
k2])], {k1, 21}, {k2, 21}], {2, 3, 1}];
Dann habe ich die beiden Komponenten iFFT:
projArr = InverseFourier /@ dat;
Dies ergibt ein rein reales Array, und ich würde naiv erwarten, dass das Ergebnis eine Annäherung an . Meine Frage ist:
- Inwiefern nähert sich das Ergebnis ?
Angeblich ist die Helmholtz-Hodge-Zerlegung von 2D-Daten eine nicht triviale Aufgabe, da Chris Beaumonts HH_DECOMP- Routine FFTs verwenden soll, um die Helmholtz-Hodge-Zerlegung durchzuführen, aber er sagt auch (in den Kommentaren oben im Code), dass die Methode scheint ungenau. Ebenso gibt es kompliziertere Variationsmethoden, um Helmholtz-Hodge-Zerlegungen von 2D-Daten durchzuführen , was darauf hindeutet, dass die einfachere FFT-Methode irgendwie unzureichend ist. Warum? Was macht die FFT-Methode falsch? Und ist es falsch anzunehmen, dass die harmonische Komponente für mein zufälliges Rauschen verschwindet?
(1): Stabile Flüssigkeiten , Jos Stam.
(2): Merkmalserkennung in Vektorfeldern mit der Helmholtz-Hodge-Zerlegung , Alexander Wiebel, Seite 12.
(3): Diskrete Multiskalen-Vektorfeldzerlegung , Yiying Tong.
quelle
Antworten:
Der einfachste Weg, eine divergenzfreie 2D-Funktion zu generieren, ist die Verwendung der Stream-Funktion . Woψ
Sobald Sie einen zufälligen generiert haben , können Sie Ihre Fourier-Darstellung (oder endliche Differenzen) verwenden, um die beiden Ableitungen zu berechnen. Ich habe so etwas jedoch nicht mit wirklich zufälligen Eingaben versucht. Sie können davon profitieren, wenn Sie mit einer weicheren, aber zufälligen Eingabe beginnen (wie einer Summe von Sinusfunktionen mit zufälligen Frequenzen und Koeffizienten).ψ
quelle
Sie haben in Ihrem Beitrag mehrere Fragen gestellt. Obwohl Bill eine Lösung für das zugrunde liegende Problem bereitgestellt hat, sollte meiner Meinung nach jemand auch einige Dinge zu Ihren gestellten Fragen sagen.
Wenn Sie das Eingabearray als aliasfreie Abtastung eines periodischen, bandbegrenzten Vektorfeldes interpretieren , ist das Ergebnis genau die Abtastung von . Schließlich ist die FFT des abgetasteten Arrays im Wesentlichen die Fourier-Reihe der zugrunde liegenden periodischen Funktion (unter der Annahme einer ausreichenden Abtastung).f=h+∇ϕ+J∇ψ h+J∇ψ
Da periodisch ist, ist lediglich ein konstantes Vektorfeld.f h
Ich bin nicht sicher, was dort los ist, weil ich IDL nicht lesen kann, aber es sieht so aus, als ob die Testvektorfelder nicht periodisch sind?
Ich denke, du machst dir zu viele Sorgen. Auf der zweiten Seite des von Ihnen zitierten Papiers heißt es: "Die diskrete Helmholtz-Hodge-Zerlegung auf regulären Gittern wurde bereits in Grafiken verwendet (siehe z. B. [25, 10]) und ist mit einem Finite-Differenzen-Ansatz relativ einfach zu implementieren Es ist jedoch viel schwieriger, eine praktische und genaue Methode für beliebige Gitter zu entwerfen. "
Wenn Sie periodische Randbedingungen haben, nichts. Unter diesen Bedingungen ergeben Spektralmethoden wie diese eine exponentielle Konvergenz im Vergleich zur Polynomkonvergenz von Finite-Differenzen-Methoden. Es ist jedoch schwieriger, sie auf beliebige Geometrien anzuwenden.
Technisch gesehen ja, aber im periodischen Fall ist das einzig mögliche harmonische Vektorfeld eine Konstante. Sie machen es also gut, wenn Sie die DC-Komponente in Ruhe lassen.
quelle