c++ - 如何在C中使用unwrap函数和iota(复数中的 "i")?

标签 c++ c gsl

我正在用 C 语言开发代码来获取系统的总体谱。在此频谱中,我需要展开函数以执行系统的进一步步骤。

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

我已经在下面的代码中正确声明了所有参数,这是我需要您帮助的唯一代码段。

  1. 在 ph1 函数中,我需要解开 phi
  2. 在 D 和 N 函数中,我使用了 iota 作为“i”,请帮我看看如何使用它?
  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(发音为 ai,而不是 iota)。

确定哪些变量是复数变量并对其进行定义,对数学函数使用复数版本(在其名称开头添加 c,例如 ccos() csin()...) 避免使用 pow 来计算数值的平方,而是使用 x * x

关于c++ - 如何在C中使用unwrap函数和iota(复数中的 "i")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45099948/

相关文章:

c++ - Python Web 客户端编程库

c++ - LibVLC Demux 无法查看

c++ - OpenCV - Ptr 语法和类定义/声明 - 混淆?

c - Openmp 减少循环错误?

ruby-on-rails - 英雄库/rails : How to install the GNU Scientific Library (GSL) on Heroku?

Xcode 4.3.3 找不到任何头文件

c++ - 通过 unsigned char 别名访问对象,加载和存储时会发生什么?

c++ - 如何检查文件是否经过 gzip 压缩?

c++ - 从源文件添加编译时消息

c - GSL 特征值代码