Pregunta

I necesidad de calcular exponencial imaginaria en C.

Por lo que yo sé, no hay una biblioteca número complejo en C. Es posible conseguir e^x con exp(x) de math.h, pero ¿cómo puedo calcular el valor de e^(-i), donde i = sqrt(-1)?

¿Fue útil?

Solución

Tenga en cuenta que el exponente del número complejo es igual a:

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

A continuación:

e^(-i) = cos(-1)+i*sin(-1)

Otros consejos

En C99, hay un tipo complex. Incluir complex.h; puede que tenga que enlazar con -lm en gcc. Tenga en cuenta que Microsoft Visual C no soporta complex; Si es necesario utilizar este compilador, tal vez se puede espolvorear en algunos C ++ y utilizar el complex plantilla .

I se define como la unidad imaginaria, y cexp hace exponenciación. ejemplo de código completo:

#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 para más información.

Uso de la Fórmula de Euler usted tiene que e^-i == cos(1) - i*sin(1)

e^-j es sólo cos(1) - j*sin(1), lo que sólo puede generar las partes real e imaginaria usando funciones reales.

Sólo tiene que utilizar la forma cartesiana

Si z = m*e^j*(arg);

re(z) = m * cos(arg);
im(z) = m * sin(arg);

está llamando a c ++ funcione de una solución para usted? El C ++ STL tiene un bonito complejo de clase y de impulso también tiene que ofrecer algunas buenas opciones. Escribir una función en C ++ y declarar que "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();
}

A continuación, puede llamar a la función de cualquier código C que se basan en (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;
}

En C ++ se puede hacer directamente: std :: exp (std :: complejo (0, -1));

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top