Вычисления e ^ (- j) в C
-
26-09-2019 - |
Вопрос
Мне нужно вычислить воображаемое экспоненту в C.
Насколько я знаю, в C. нет сложной библиотеки номеров в C. Можно получить e^x
с участием exp(x)
из math.h
, но как я могу вычислить ценность e^(-i)
, куда i = sqrt(-1)
?
Решение
Обратите внимание, что экспонендент комплексного числа равен:
e^(ix) = cos(x)+i*sin(x)
Потом:
e^(-i) = cos(-1)+i*sin(-1)
Другие советы
В C99 есть complex
тип. Включать complex.h
; Вам может потребоваться связать с -lm
на GCC. Обратите внимание, что Microsoft Visual C не поддерживает complex
; Если вам нужно использовать этот компилятор, возможно, вы можете посыпать каким-то C ++ и использовать complex
шаблон.
I
определяется как воображаемая единица, а cexp
делает экспоненцию. Полный код примера:
#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
Чтобы получить больше информации.
С использованием Формула Эйлера У вас есть это e^-i == cos(1) - i*sin(1)
e^-j
просто cos(1) - j*sin(1)
, Таким образом, вы можете просто генерировать реальные и мнимые части с использованием реальных функций.
Просто используйте декартовую форму
если z = m*e^j*(arg);
re(z) = m * cos(arg);
im(z) = m * sin(arg);
Вызывает функцию C ++ решение для вас? C ++ STL имеет хороший класс комплекса и повысить также предложить несколько хороших вариантов. Напишите функцию в C ++ и объявите его «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();
}
Затем вы можете вызвать функцию из любого C-кода, на которой вы полагаетесь (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;
}
В C ++ можно сделать напрямую: std :: exp (std :: комплекс (0, -1));