我们如何使用 FFTW_RODFT00(正弦变换)计算函数的一阶导数?
我有一些运气计算二阶导数,因为 sqrt(-1)^2 = -1 并且在使用虚值时,这会返回一个虚值,我们可以传递逆正弦变换以返回 df(x)。另一方面,对于一阶导数,我担心我们可能有一个实值(与 i=sqrt(-1) 相乘)与 FFTW_REDFT00 进行逆变换?
这是我的代码:
#include "math.h"
#include "fftw3w.h"
#include "common.h"
//#include <complex>
#define M_PI 3.14159265358979323846
#define FFN_R2R 3
float b[FFN_R2R]={1,2,3};
static void normalize_r2r(void){
const float const_k=1.f/(2*(FFN_R2R+1));
for(unsigned int i=0; i<FFN_R2R; ++i) b[i]*=const_k;
}
static void delta_r2r(void) {
const float fM_PI= (float) M_PI;
fftwf_plan gplan[2];
gplan[0]= fftwf_plan_r2r_1d(FFN_R2R, b, b, FFTW_RODFT00, FFTW_ESTIMATE);
gplan[1]= fftwf_plan_r2r_1d(FFN_R2R, b, b, FFTW_RODFT00, FFTW_ESTIMATE);
fftwf_execute(gplan[0]);
/**/
const float rcpL=1.f/(1*(FFN_R2R+1));
unsigned int i;
float k;
for(i=0, k=0.f; i<FFN_R2R; ++i, ++k){
b[i]*= -( fM_PI*rcpL*(k+1.f) * fM_PI*rcpL*(k+1.f) );
}
fftwf_execute(gplan[1]);
normalize_r2r();
for(uint i=0; i<FFN_R2R; ++i) printf("%f \n", b[i]);
}