如何在 C 中使用解包函数和 iota(复数"i")?

How to use unwrap function and iota( "i" in complex numbers ) in C?

本文关键字:iota 复数 函数 包函数      更新时间:2023-10-16

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

  1. 谁能告诉我,如何在我的代码中使用解包功能?
  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 %fn",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