2010-05-14 5 views
4

je dois calculer imaginaire exponentielle C.Computing e^(- j) en C

Pour autant que je sache, il n'y a pas de bibliothèque de nombre complexe en C. Il est possible d'obtenir e^x avec exp(x) de math.h , mais comment puis-je calculer la valeur de e^(-i), où i = sqrt(-1)?

Répondre

7

Notez que l'exposant du nombre complexe est égal à:

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

Puis:

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

Utilisation de l'Euler de la formule vous avez que e^-i == cos(1) - i*sin(1)

+0

e^(- k) = cos (k) - i * sin (k), vous voulez dire. –

+0

oui, mais dans son cas k = 1. En tout cas la forme générale est e^(- ki) = cos (k) -i * sin (k), pas e^(- k) – Jack

1

Il suffit d'utiliser la forme cartésienne

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

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

e^-j est juste cos(1) - j*sin(1), de sorte que vous pouvez simplement générer les parties réelles et imaginaires en utilisant des fonctions réelles.

15

En C99, il existe un type complex. Inclure complex.h; vous devrez peut-être lier avec -lm sur gcc. Notez que Microsoft Visual C ne prend pas en charge complex; Si vous avez besoin d'utiliser ce compilateur, vous pouvez peut-être saupoudrer dans du C++ et utiliser le modèle complex. Est défini comme l'unité imaginaire et cexp exponentie. Exemple de code complet:

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

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

Voir pour plus d'informations.

+0

+1 N'a pas savoir à ce sujet. – Tom

+0

Je devais le faire manuellement .. Merci pour la référence future, je vais garder cela à l'esprit. –

1

L'appel d'une fonction C++ est-il une solution pour vous? Le C++ STL a une belle classe complexe et offre également de belles options. Ecrire une fonction en C++ et déclarer "C extern"

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(); 
} 

Ensuite, vous pouvez appeler la fonction de tout code C vous dépendez (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; 
} 
+0

Merci pour l'explication mais C++ n'est pas bon pour moi avec cette –

0

En C++, cela peut être fait directement: std :: exp (std :: complex (0, -1));