查找复数的指数

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 &lt;complex.h&gt;了吗? 是的,我已经包含了 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)。

以上是关于查找复数的指数的主要内容,如果未能解决你的问题,请参考以下文章

1051. 复数乘法 (15)

1051. 复数乘法 (15)

1051. 复数乘法 (15)

PAT 1051. 复数乘法

1051. 复数乘法 (15)

1051. 复数乘法 (15)