Para un protector de pantalla tonto que estoy tratando de desarrollar, me gustaría generar aleatoriamente una matriz 2D de vectores 2D sin divergencia, y luego usarla para generar un gráfico de convolución integral de línea. He escuchado que una forma de hacer esto es generar ruido aleatorio y luego proyectar el componente solenoidal de su descomposición Helmholtz-Hodge. Para hacer eso, intenté usar el siguiente razonamiento:
Una función tiene descomposición de Helmholtz-Hodge donde y donde son funciones escalares. Por ahora, suponga que el componente armónico desaparece.2 f = h + ∇ ϕ + J ∇ ψ J = ( 0 - 1 1 0 ) ϕ , ψ h
En el espacio de Fourier, esto se convierte en y podemos definir una proyección solenoidal operador en el espacio de Fourier como que proyecta una función en su componente solenoidal, a través de P = I - k ⊗ k
Luego intenté implementar esto en Mathematica, aplicándolo a una matriz aleatoria . Primero genero la matriz aleatoria, y aplico la FFT a cada uno de sus dos componentes:
arr = RandomReal[{-1, 1}, {2, 21, 21}];
fArr = Fourier /@ arr;
Luego defino en función del índice de matriz:
k[k1_, k2_] := Mod[{k1 - 1, k2 - 1}, 21, -10]/21;
Luego realizo la proyección en los componentes de Fourier (la singularidad en se deja sola usando una declaración):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}];
Entonces iFFT los dos componentes:
projArr = InverseFourier /@ dat;
Esto proporciona una matriz puramente real, y yo ingenuamente esperaría que el resultado fuera una aproximación de . Mi pregunta es:
- ¿En qué sentido el resultado se aproxima a ?
Supuestamente, la descomposición Helmholtz-Hodge de datos 2D no es una tarea trivial, ya que se supone que la rutina HH_DECOMP de Chris Beaumont usa FFT para realizar la descomposición Helmholtz-Hodge, pero también dice (en los comentarios en la parte superior del código) que el método parece incorrecto. Del mismo modo, existen métodos de variación más complicados para realizar descomposiciones de Helmholtz-Hodge de datos 2D, lo que parece sugerir que el método FFT más simple es de alguna manera inadecuado. ¿Por qué? ¿En qué se equivoca el método FFT? ¿Y está mal suponer que el componente armónico desaparece para mi ruido aleatorio?
(1): Fluidos estables , Jos Stam.
(2): Detección de características en campos vectoriales utilizando la descomposición Helmholtz-Hodge , Alexander Wiebel, página 12.
(3): Descomposición discreta del campo vectorial multiescala , Yiying Tong.