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)?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top