Para um protetor de tela bobo que estou tentando desenvolver, gostaria de gerar aleatoriamente uma matriz 2D livre de divergência de vetores 2D e usá-la para gerar um gráfico de convolução integral de linha. Ouvi que uma maneira de fazer isso é gerar ruído aleatório e depois projetar o componente solenoidal de sua decomposição Helmholtz-Hodge. Para fazer isso, tentei usar o seguinte raciocínio:
Uma função possui decomposição de Helmholtz-Hodge onde e onde são funções escalares. Por enquanto, assuma que o componente harmônico desapareça.2 f = h + ∇ φ + J ∇ ψ J = ( 0 - 1 1 0 ) φ , ψ h
No espaço de Fourier, isso se torna e podemos definir uma projeção solenoidal operador no espaço de Fourier como que projeta uma função em seu componente solenoidal, via P = I - k ⊗ k
Tentei implementar isso no Mathematica, aplicando-o a uma matriz aleatória . Primeiro, giro a matriz aleatória e aplico a FFT a cada um de seus dois componentes:
arr = RandomReal[{-1, 1}, {2, 21, 21}];
fArr = Fourier /@ arr;
Em seguida, defino como uma função do índice da matriz:
k[k1_, k2_] := Mod[{k1 - 1, k2 - 1}, 21, -10]/21;
Em seguida, realizo a projeção nos componentes de Fourier (a singularidade em é deixada sozinha usando uma instrução):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}];
Então euFFFF os dois componentes:
projArr = InverseFourier /@ dat;
Isso fornece uma matriz puramente real, e eu esperaria ingenuamente que o resultado fosse uma aproximação de . Minha pergunta é:
- Em que sentido o resultado se aproxima de ?
Supostamente, a decomposição de dados 2D de Helmholtz-Hodge é uma tarefa não trivial, pois a rotina HH_DECOMP de Chris Beaumont deve usar FFTs para executar a decomposição de Helmholtz-Hodge, mas ele também diz (nos comentários na parte superior do código) que o método parece impreciso. Da mesma forma, existem métodos variacionais mais complicados para realizar decomposições de Helmholtz-Hodge dos dados 2D, o que parece sugerir que o método FFT mais simples é de alguma forma inadequado. Por quê? O que o método FFT está errado? E é errado assumir que o componente harmônico desaparece para o meu ruído aleatório?
(1): Fluidos Estáveis , Jos Stam.
(2): Detecção de recursos em campos vetoriais usando a decomposição de Helmholtz-Hodge , Alexander Wiebel, página 12.
(3): Decomposição discreta de campos vetoriais em múltiplas escalas, Yiying Tong.