Cálculo de e ^ (- j) en C
-
26-09-2019 - |
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)
?
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));