对于我正在尝试开发的一个愚蠢的屏幕保护程序,我想随机生成一个无散度的二维向量数组,然后用它来生成一个线积分卷积图。我听说一种方法是产生随机噪声,然后投射出亥姆霍兹-霍奇分解的螺线管分量。为此,我尝试使用以下推理:
一个函数有亥姆霍兹-霍奇分解
在傅立叶空间中,这变为
然后我尝试在 Mathematica 中实现这一点,将其应用于随机数组。首先,我生成随机数组,并将 FFT 应用于其两个组件中的每一个:
arr = RandomReal[{-1, 1}, {2, 21, 21}];
fArr = Fourier /@ arr;
然后我定义作为数组索引的函数:
k[k1_, k2_] := Mod[{k1 - 1, k2 - 1}, 21, -10]/21;
然后我对傅里叶分量进行投影(奇点在单独使用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}];
然后我iIFFT这两个组件:
projArr = InverseFourier /@ dat;
这给出了一个纯实数数组,我天真地期望结果是. 我的问题是:
- 结果在什么意义上近似?
假设 2D 数据的 Helmholtz-Hodge 分解是一项不平凡的任务,因为 Chris Beaumont 的HH_DECOMP例程应该使用 FFT 来执行 Helmholtz-Hodge 分解,但他也说(在代码顶部的注释中)该方法似乎不准确。同样,有更复杂的变分方法来执行亥姆霍兹-霍奇分解2D 数据,这似乎表明更简单的 FFT 方法在某种程度上是不够的。为什么?FFT 方法有什么问题?假设我的随机噪声谐波分量消失是错误的吗?
(1):稳定流体,乔斯·斯塔姆。
(2):使用 Helmholtz-Hodge 分解的向量场中的特征检测,Alexander Wiebel,第 12 页。
(3):离散多尺度向量场分解,童一英。