gpt4 book ai didi

c++ - 当函数已知时的傅立叶变换

转载 作者:行者123 更新时间:2023-11-30 18:11:38 24 4
gpt4 key购买 nike

我有一个傅立叶变换函数 f(w),我知道其解析形式。说

f(w) = j=1 到 1000 的乘积 (a1_j * exp (i * w * b1_j) + a2_j * exp (i* w* b2_j)+...+a10_j * exp (i * w* b10_j)+ c_j)

其中 a、b、c 是实数,“i”是 sqrt(-1)。因此,即使 a、b、c 是已知的函数,也必须进行数值计算,但它实际上在分析上并不容易处理。

现在我想计算逆变换f(w)以获得原始函数F(x)。

我的问题部分与数学相关,部分与软件相关:

  1. 我可以使用可用的软件例程来计算逆变换,但我不确定应该对 f(w) 进行哪种离散采样,以便能够在给定一定容差的情况下忠实地再现 F(x)。 F(x) 的域可能非常大。那么出路是什么?

  2. C/C++ 中是否有任何免费的软件例程可以接受仿函数 f(w) 作为输入,并对给定的“x”执行逆变换。如果存在,它将绕过我的第一个问题(因为我猜它会在内部处理在给定任何函数的情况下使用多少个点来执行采样/积分)

最佳答案

Is there any freely available software routines in C/C++ which can take in as input say a functor f(w) and perform the inverse transform for a given "x". If this exist it will bypass my first question (because I guess it will internally handle how many points to use to perform the sampling/integration given any function)

绝对经典的 FFT 软件,存在于所有系统上

http://www.fftw.org/

在 UBuntu 上,您必须安装 libfftw3-dev 就这样

更新

我可以编写离散化代码,但是在查看函数定义之后

f(w) = Product of j=1 to 1000 (a1_j * exp (i * w * b1_j) + a2_j * exp (i* w* 2_j)+...+a10_j * exp (i* w* b10_j)+ c_j)

我反对这种说法

So even though the the a,b,c's are known function has to computed numerically it is not really analytically tractable.

如果你看看你的函数,仔细展开它,你会得到线性和

f(w) = Sumk Ak*exp(i w Bk)

请记住,x 域和 w 域对于直接傅立叶变换和逆傅里叶变换非常对称,如果 x 域中的单谐波将产生频域中的狄拉克 δ 函数,那么 w 域中的单谐波将产生x 域中的狄拉克 δ 函数。

所以 F(x) 是

F(x) = Sumk Ak * δ(x - Bk)

以数值方式处理 δ 非常麻烦,因此我建议您放弃整个离散化业务,专注于如何从 f( 计算 Ak 和 Bk w) 表达式。

关于c++ - 当函数已知时的傅立叶变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45442580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com