我目前正在编写一个小工具,它可以帮助我检查我手动计算的傅立叶向量是否正确。现在我需要由 指定的第 n 个 Unity 根omega = exp(2*pi*i / n)
。有人可以解释一下如何在 C++中将其表示omega
为 a吗?complex
问问题
1276 次
3 回答
4
使用欧拉公式:
exp(2πi/n) = cos(2π/n) + i sin(2π/n)
然后很简单:
complex<double> rootOfUnity(cos(TWOPI/n), sin(TWOPI/n));
(将 TWOPI 替换为系统上可用的宏或仅 2π 的值,但您认为合适)。
于 2011-09-15T21:20:22.887 回答
2
好吧,旋转因子欧米茄的实部和虚部只是:
double angle = 2*pi/n;
double real = cos(angle);
double imaj = sin(angle);
complex<double> omega(real, imaj);
于 2011-09-15T21:18:06.160 回答
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);
于 2011-09-15T23:17:34.343 回答