4

我需要在 C 中计算虚指数。

据我所知,C 中没有复数库。可以e^x使用exp(x)of math.h,但是如何计算 的值e^(-i),在哪里i = sqrt(-1)

4

7 回答 7

16

在 C99 中,有一个complex类型。包括complex.h;您可能需要-lm在 gcc 上链接。请注意,Microsoft Visual C 不支持complex; 如果你需要使用这个编译器,也许你可以加入一些 C++ 并使用complex模板。

I被定义为虚数单位,并进行cexp幂运算。完整代码示例:

#include <complex.h>
#include <stdio.h>

int main() {
    complex x = cexp(-I);
    printf("%lf + %lfi\n", creal(x), cimag(x));
    return 0;
}

有关man 7 complex更多信息,请参阅。

于 2010-05-14T14:36:02.213 回答
8

请注意,复数的指数等于:

e^(ix) = cos(x)+i*sin(x)

然后:

e^(-i) = cos(-1)+i*sin(-1)
于 2010-05-14T14:29:19.497 回答
6

使用欧拉公式,你有e^-i == cos(1) - i*sin(1)

于 2010-05-14T14:30:18.200 回答
2

e^-jis just cos(1) - j*sin(1),因此您可以使用实函数生成实部和虚部。

于 2010-05-14T14:33:47.403 回答
1

只需使用笛卡尔形式

如果z = m*e^j*(arg);

re(z) = m * cos(arg);
im(z) = m * sin(arg);
于 2010-05-14T14:30:46.170 回答
1

调用 c++ 函数是否适合您?C++ STL 有一个不错的复杂类,并且 boost 还必须提供一些不错的选项。用 C++ 编写一个函数并将其声明为“extern C”

extern "C" void myexp(float*, float*);

#include <complex>

using std::complex;

void myexp (float *real, float *img )
{
  complex<float> param(*real, *img);
  complex<float> result = exp (param);
  *real = result.real();
  *img = result.imag();
}

然后,您可以从您依赖的任何 C 代码(Ansi-C、C99、...)中调用该函数。

#include <stdio.h>

void myexp(float*, float*);

int main(){
    float real = 0.0;
    float img = -1.0;
    myexp(&real, &img);
    printf ("e^-i = %f + i* %f\n", real, img);
    return 0;
}
于 2010-05-14T15:39:22.273 回答
0

在 C++ 中,它可以直接完成:

std::exp(std::complex<double>(0, -1));
于 2013-09-24T01:48:55.437 回答