В настоящее время я пишу небольшой инструмент, который должен помочь мне проверить правильность моих правильно рассчитанных векторов Фурье. Теперь мне нужен n-й корень единства, указанный omega = exp(2*pi*i/n)
. Может ли кто-нибудь объяснить мне, как представить это omega
как complex
в C++?Представление комплексных чисел в C++ для дискретного преобразования Фурье
1
A
ответ
4
Использование Euler's formula:
exp(2πi/n) = cos(2π/n) + i sin(2π/n)
Тогда это легко:
complex<double> rootOfUnity(cos(TWOPI/n), sin(TWOPI/n));
(заменить TWOPI либо макросом, доступным в вашей системе, либо просто значением 2π, но вы считаете нужным).
2
Ну, действительные и мнимые части фактора Twiddle омега всего:
double angle = 2*pi/n;
double real = cos(angle);
double imaj = sin(angle);
complex<double> omega(real, imaj);
2
Существует функция, которая возвращает комплексное число в полярных координатах:
#include<complex>
complex polar(const T& rho)
complex polar(const T& rho, const T& theta)
, где rho
это величина, а theta
угол в радианах. В этом случае rho
всегда 1,0.
const double pi = 3.141592653589793238462643383279;
double omega = polar(1.0, 2*pi*i/n);
Любое конкретное предложение, как вычислить пи? Будет ли '' 4 * atan (1.0) '' достаточно? –
Вы можете либо жестко закодировать его, либо просто использовать 'M_PI'. – Mysticial
Использование Visual Studio 2010 в Windows 8 с Microsoft C++ Compiler. Включение '' cmath.h'' не предоставляет '' M_PI''! –