Diskreter Gradient?

Aug 22 2020

Ich versuche zu verstehen, wie man den diskreten Gradienten eines Netzes erhält, das als Eingabe einer Funktion verwendet wird $f$. Mit anderen Worten für jeden Scheitelpunkt$v$ es gibt eine skalare Menge $s$ mit ihr verbundenen.

Ich versuche zu verstehen, wie man den diskreten Gradienten von berechnet $f$an der Oberfläche. Zu diesem Zweck habe ich diese Folien überprüft:

http://www.hao-li.com/cs599-ss2015/slides/Lecture04.1.pdf

Aber es klickt nicht. Die stückweise Notation, die ich annehme, ist nur ein Versuch zu formalisieren: "Wir haben keine Ahnung, wie die Werte an den Dreiecken aussehen würden, also werden wir nur linear mit Schwerpunktkoordinaten interpolieren."

Aber dann erreichen die Folien diese endgültige Formel für den Gradienten:

Ich verstehe irgendwie den unteren Teil, der die Gradientenbasis bei zu sagen scheint $i$ ist ein Vektor orthogonal zur gegenüberliegenden Kante geteilt durch das Zweifache der Fläche des Dreiecks (nehme ich an), aber wie wurde die obere Formel abgeleitet?

Antworten

1 NathanReed Sep 23 2020 at 01:06

Es definiert den Gradienten in Form von Schwerpunktkoordinaten. Es ähnelt der Ableitung in dieser Antwort , die nur ein wenig algebraisch neu angeordnet wurde, indem die drei Schwerpunktkoordinaten zu eins summiert wurden.$$ \begin{aligned} f(\mathbf{u}) &= f_i B_i(\mathbf{u}) + f_j B_j(\mathbf{u}) + f_k B_k(\mathbf{u}) \\ &= f_i (1 - B_j(\mathbf{u}) - B_k(\mathbf{u})) + f_j B_j(\mathbf{u}) + f_k B_k(\mathbf{u}) \\ &= f_i + (f_j - f_i) B_j(\mathbf{u}) + (f_k - f_i) B_k(\mathbf{u}) \\ \nabla f(\mathbf{u}) &= (f_j - f_i) \nabla B_j(\mathbf{u}) + (f_k - f_i) \nabla B_k(\mathbf{u}) \\ \end{aligned} $$

xer-rex Aug 22 2020 at 14:42

Ein Bereich besteht aus 2 Komponenten, der normalisierte Gradient der Basis_i gibt die konstante Rate in Richtung einer der Komponenten an, die nur von Eckpunkten abhängt.

Die hervorgehobene Formel ist der Zwischenzustand der Transformation der Funktion, bei der die Scheitelpunkte vollständig genutzt werden.