如何在C中使用unwrap函数和iota(复数中的“i”)?

问题描述:

我正在用C语言开发代码来获取系统的总体谱。在这个光谱中,我需要展开功能来执行我的系统的进一步步骤。如何在C中使用unwrap函数和iota(复数中的“i”)?

  1. 谁能告诉我,如何在我的代码中使用unwrap函数?
  2. 如何在代码中使用iota(复数中的“i”)?
  3. finally我如何使用gsl fft函数来执行函数的傅里叶变换?

我已经在下面提到的代码中正确声明所有参数是我需要你帮助的唯一代码段。

  1. 在PH1的功能,我需要解开披
  2. 在d和N的功能,我用丝毫为“我” PLZ帮我了我如何使用它?
  3. 最后,我想用gsl来执行S的fft。如何做呢?

下面是代码:

double dt = 0.01; 
double N1 = 11; 
double Fs = 1/dt; 
a = dt * (N1 - 1); 
double dx = 1/a; 
double N; 
for (m = 1; m <= N1; m++) { 
    double t1 = (m - 1) * dt; 
    //double i = sqrt(-1); 

    D = pow((cos(om * t1/2)), 2) + ((2 * i * sin(om * t1)/om * (Q2 + pow(om, 2) * Q1)) - 
     (16 * D1 * ((pow(sin(om * t1/2), 2)))); 

    double phi = 1/tan(pow((cos(om * t1/2)), 2) + ((2 * sin(om * t1)/om) * (Q2 + pow(om, 2) * Q1))/(-16 * D1 * ((pow(sin(om * t1/2), 2))))); 
    double a = abs(D); 
    //printf("%f and %f\n",phi,a); 
    double ph1 = unwrap(phi); /*How to use unwrap function*/ 
} 
for (m = 1; m <= N1; m++) { 
    double t1 = (m - 1) * dt; 
    N = ((i * cos(om * t1/2)) * ((pow(Gdot, 2) + pow((om * Gc), 2))/om) - (4 * sin(om * t1/2)) * (Q2 * pow(Gc, 2) + Q1 * pow(Gdot, 2) - (Q1dot * Gdot * Gc))); /* How to use iota */ 
    double Ds = sqrt(a) * exp(i * ph1/2); 
    double Ds1 = (a) * exp(i * ph1); 
    //Ns(m) = (b) * exp(i * ps1); 
    double E = ((sin(om * t1/2))/Ds1) * N; 
    double S = (exp(-E))/(Ds); 
    double b = (pow(p0, 2) + pow((q0 * om), 2))/(2 * om); 
    double S1 = (exp(-i * om * t1/2)) * exp(b * (exp(-i * om * t1) - 1)); 
    fft(S); /* How to calculate fft using gsl*/ 
} 

重新格式化你的代码中,有一些问题:

  • 似乎没有在D = pow((cos(om * ...线丢失的圆括号。
  • 许多变量声明缺失(mD ...)

你应该发表一个完整的编译例如,对于您的问题,学会空间和缩进代码,使其可读。

C99和C11扩展了对复杂算术的支持。应定义复杂的变量为:

#include <complex.h> 

complex double D; 

-1虚根被定义为I(发音人工智能,不丝毫)。

确定哪些变量是复杂的,其定义为这样的,使用的数学函数复杂的版本(在他们的名字前加上一个c,如ccos()csin() ...)避免使用pow只平方值,请使用x * x

+0

@Chaqrlie谢谢你的宝贵意见。你能指导我解开功能,这是我的代码的根? –

+0

确定哪些变量是复杂的,并将它们定义为这样,使用数学函数的复杂版本,避免使用'pow'只是方形值,而是使用'x * x'。 – chqrlie