2017-07-14 139 views
0

我正在用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*/ 
} 

回答

0

重新格式化你的代碼中,有一些問題:

  • 似乎沒有在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