我有一个傅立叶变换函数f(w),其分析形式我知道。 说
f(w) = Product of j=1 to 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)。
我的问题部分是数学问题,部分与软件有关:
我可以使用可用的软件程序计算逆变换,但我不确定应该采用何种离散采样方法使f(w)能够忠实地再现F(x)给出一些容差。 F(x)的域可能非常大。那么什么是出路呢?
C / C ++中是否有任何免费提供的软件例程,它们可以作为输入来表示函子f(w)并对给定的“x”执行逆变换。如果存在,它将绕过我的第一个问题(因为我猜它将在内部处理在给定任何函数的情况下用于执行采样/积分的点数)
答案 0 :(得分:-1)
C / C ++中是否有任何可用的软件例程,它们可以作为输入来表示函子f(w)并对给定的“x”执行逆变换。如果存在,它将绕过我的第一个问题(因为我猜它将在内部处理在给定任何函数的情况下用于执行采样/积分的点数)
非常经典的FFT软件,存在于所有系统中,
在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)
我反对声明
所以尽管a,b,c是已知函数必须以数字方式计算,但它并不是真正易于分析的。
如果您查看您的功能,请仔细展开它,您将得到线性总和
f(w)= Sum k A k * exp(i w B k )
记住x域和w域是非常对称的直接和逆傅里叶变换,如果x域中的单谐波将在频域中产生狄拉克的δ-函数,那么w域中的单谐波将产生狄拉克在x域中的δ-函数。
所以F(x)将是
F(x)= Sum k A k *δ(x - B k )
以数字方式处理δ非常麻烦,所以我建议你放弃整个离散化业务,专注于如何从你的f计算A k 和B k w)表达。