Phân tách 2D Helmholtz-Hodge rời rạc nhanh chóng và đơn giản bằng cách sử dụng FFT?


8

Đối với trình bảo vệ màn hình ngớ ngẩn mà tôi đang cố gắng phát triển, tôi muốn tạo ngẫu nhiên một mảng vectơ 2D không có phân kỳ, sau đó sử dụng nó để tạo ra một biểu đồ tích chập tích phân đường. Tôi đã nghe 1 mà là một cách để làm điều này là để tạo ra tiếng ồn ngẫu nhiên, và sau đó dự án ra các thành phần solenoit phân hủy Helmholtz-Hodge của nó. Để làm điều đó, tôi đã thử sử dụng các lý do sau:1

Một chức năng có Helmholtz-Hodge phân hủy 2 f = h + φ + J ψ nơi J = ( 0 - 1 1 0 ) và nơi φ , ψ là hàm vô hướng. Bây giờ, giả sử thành phần điều hòa h biến mất.f:R2R22

f=h+ϕ+Jψ
J=(0110)
ϕ,ψh

Trong không gian Fourier, điều này trở thành và chúng ta có thể xác định một nhà điều hành dự solenoit trên không gian Fourier như P = I - kk

Ff=ikϕ^iJkψ^
mà dự án một chức năng trên phần solenoit của nó, thông qua F-1PFf=Jψ.
P=Ikkkk
F1PFf=Jψ.

21×21×2

arr = RandomReal[{-1, 1}, {2, 21, 21}];
fArr = Fourier /@ arr;

k

k[k1_, k2_] := Mod[{k1 - 1, k2 - 1}, 21, -10]/21;

k=0If

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}];

Sau đó, tôi iFFT hai thành phần:

projArr = InverseFourier /@ dat;

Jψ

  • Jψ

3

(1): Chất lỏng ổn định , Jos Stam.

(2): Phát hiện tính năng trong các trường vectơ bằng cách sử dụng phân tách Helmholtz-Hodge , Alexander Wiebel, trang 12.

(3): Phân rã nhiều trường vectơ rời rạc , Yiying Tong.


ψf=Jψ

Câu trả lời:


5

ψ

u=ψyandv=ψx

ψ


JψψF1LPFfLf2Jk^N1N2cos(2πkr+τ)

4

Bạn đã hỏi một số câu hỏi trong bài đăng của mình, vì vậy trong khi Bill đã cung cấp giải pháp cho vấn đề tiềm ẩn, tôi cảm thấy ai đó cũng nên nói một số điều về các câu hỏi đã nêu của bạn.

Jψ

f=h+ϕ+Jψh+Jψ

fh

Thói quen HH_DECOMP của Chris Beaumont được cho là sử dụng các FFT để thực hiện phân tách Helmholtz-Hodge, nhưng ông cũng nói (trong các bình luận ở đầu mã) rằng phương pháp này có vẻ không chính xác.

Tôi không chắc những gì đang diễn ra ở đó bởi vì tôi không thể đọc IDL, nhưng có vẻ như các trường vectơ kiểm tra không phải là định kỳ?

Tương tự như vậy, có nhiều phương pháp biến đổi phức tạp hơn để thực hiện phân tách dữ liệu 2D của Helmholtz-Hodge, điều này dường như cho thấy phương pháp FFT đơn giản hơn là không phù hợp. Tại sao?

Tôi nghĩ rằng bạn đang lo lắng quá nhiều. Trên trang thứ hai của bài báo mà bạn trích dẫn, họ viết, "Phân tách Helmholtz-Hodge rời rạc trên các lưới thông thường đã được sử dụng trong đồ họa (ví dụ [25, 10]) và tương đối đơn giản để thực hiện với cách tiếp cận khác biệt hữu hạn Tuy nhiên, khó hơn nhiều để thiết kế một phương pháp thực tế và chính xác cho các lưới tùy ý. "

Phương pháp FFT có gì sai?

Nếu bạn có điều kiện biên định kỳ, không có gì. Trong thực tế, trong những điều kiện đó, các phương pháp phổ như phương pháp này cung cấp cho bạn sự hội tụ theo cấp số nhân so với sự hội tụ đa thức của các phương pháp sai phân hữu hạn. Mặc dù vậy, chúng khó áp dụng hơn cho hình học tùy ý.

Và có sai không khi cho rằng thành phần sóng hài biến mất cho tiếng ồn ngẫu nhiên của tôi?

Về mặt kỹ thuật, có, nhưng trong trường hợp định kỳ, trường vectơ điều hòa duy nhất có thể là một hằng số. Vì vậy, bạn đang làm tốt bằng cách để thành phần DC một mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.