0

我们如何使用 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]);
} 


4

0 回答 0