查找复数的指数
Posted
技术标签:
【中文标题】查找复数的指数【英文标题】:Find exponential of a complex number 【发布时间】:2014-09-10 17:42:39 【问题描述】:我想计算一个复数的指数,例如2+3i
。
这个公式我已经知道了
exp( i z ) = cos(z) + i sin(z)
OpenCV 中有内置函数吗?如果是的话,你能举个例子给我解释一下吗?
【问题讨论】:
请原谅这是一个非常简单的问题,因为我是这个领域的新手。 【参考方案1】:complex.h
中声明的 cexp( )
函数有什么问题?为什么要使用 OpenCV 而不是标准库?
#include <complex.h>
#include <stdio.h>
int main(int argc, char *argv[])
double complex z = 2 + 3*I;
double complex w = cexp(z);
printf("%f + %fi\n", creal(w), cimag(w));
return 0;
如果您的目标是不提供复杂类型或操作的平台,您可以使用以下快速而简单的解决方案:
struct mycomplex double real; double imag;
struct mycomplex my_exp(struct mycomplex z)
struct mycomplex w;
w.real = exp(z.real)*cos(z.imag);
w.imag = exp(z.real)*sin(z.imag);
return w;
最后,由于您使用的是 MSVC,一个非常初级的 C++ 示例:
#include <complex>
#include <iostream>
int main(int argc, char *argv[])
auto z = std::complex<double>(2,3);
auto w = std::exp(z);
std::cout << w << std::endl;
return 0;
【讨论】:
是的,我知道了,但是有一个问题。当我写双复数 z = 2 + 3*I;它说错误:预期一个; 你用的是什么编译器,你#include <complex.h>
了吗?
是的,我已经包含了 complex.h。我正在 x64 平台上开发 Microsoft Visual Studio 2013 Ultimate。
所以,MSVC 实际上并不是一个有意义的 C 编译器。它仅支持 C 语言的一种相当有限的历史形式。如果您打算使用它,那么编写 C++ 会好得多。如果您想同时使用 MSVC 和 C,可以使用我答案第二部分中的解决方法。
请告诉我C++中的解决方案。【参考方案2】:
我认为您正在寻找的功能是atan2
。例如,对于数字2+3i
,您将计算角度为
T = atan2( 3.0, 2.0 );
【讨论】:
其实我问的是欧拉数。在我从事 DFT 工作时,我希望得到 cos 和 sins 方面的答案【参考方案3】:我认为 c 中没有任何内置函数可以解决这个问题。其实我们在c中做FFT变换的时候,使用的是基本的cos+jsin版本
【讨论】:
我也尝试使用它,但 c 程序认为 j 是一些变量,它显示错误“j undefined”。我该如何解决。实际上我也在研究 DFT。谢谢 你可以试试这样的。计算 e^j 的值并在你的代码中使用它,因为这个值不会改变。那么你可以很容易地用它来多重 sin(value)。以上是关于查找复数的指数的主要内容,如果未能解决你的问题,请参考以下文章