Berechnen von e ^ (- j) in C
-
26-09-2019 - |
Frage
Ich brauche imaginäre Exponentialfunktion in C berechnen
Soweit ich weiß, gibt es keine komplexe Zahl Bibliothek in C. Es ist möglich, e^x
mit exp(x)
von math.h
zu bekommen, aber wie kann ich den Wert von e^(-i)
berechnen, wo i = sqrt(-1)
?
Lösung
Beachten Sie, dass Vertreter der komplexen Zahl entspricht:
e^(ix) = cos(x)+i*sin(x)
Dann:
e^(-i) = cos(-1)+i*sin(-1)
Andere Tipps
In C99 gibt es eine complex
Typ. Fügen Sie complex.h
; Sie können mit -lm
auf gcc verknüpfen müssen. Beachten Sie, dass Microsoft Visual C nicht complex
nicht unterstützt; wenn Sie diesen Compiler verwenden müssen, können Sie vielleicht in einigen C ++ bestreuen und verwenden Sie die complex
Vorlage.
I
als imaginäre Einheit definiert, und cexp
tut Potenzierung. Vollständiges Codebeispiel:
#include <complex.h>
#include <stdio.h>
int main() {
complex x = cexp(-I);
printf("%lf + %lfi\n", creal(x), cimag(x));
return 0;
}
Siehe man 7 complex
für weitere Informationen.
Mit der Eulersche Formel Sie haben, dass e^-i == cos(1) - i*sin(1)
e^-j
ist nur cos(1) - j*sin(1)
, so dass Sie nur die realen und imaginären Teile mit realen Funktionen erzeugen kann.
Verwenden Sie einfach die kartesisch
Wenn z = m*e^j*(arg);
re(z) = m * cos(arg);
im(z) = m * sin(arg);
ruft eine C ++ Funktion für Sie eine Lösung? Die C ++ STL hat eine schöne Komplex-Klasse und Auftrieb hat auch einige schöne Möglichkeiten zu bieten. Schreiben Sie eine Funktion in C ++ und erklärt es "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();
}
Dann können Sie die Funktion aufrufen, aus welcher C-Code, den Sie verlassen sich auf (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;
}
In C ++ kann direkt erfolgen: std :: exp (std :: Komplex (0, -1));