2013-07-29 31 views
4

我現在正在編寫一個簡單的DFT算法,我想在復指數中使用複數i。我看到有人使用#include<complex>#include<cmath>,然後他們使用過載符號I,如exp(2*I)。但它似乎不適用於我的Visual Studio編譯器。那麼,誰能給出一個使用復指數的簡單例子?謝謝!如何在C++中使用複數「i」

+1

您可以創建一個複雜的變量,併爲它分配值'開方(-1)' – Floris

+0

不過,說真的,我很好奇,如果存在這樣一個方便的重載符號。我的意思是創建C++的人應該考慮一下,對吧? :P但你的想法絕對是好的 – Cancan

+0

@加拿大:這個符號將是一個複雜的,複雜的或複雜的? ;)順便說一句,'複雜 {0,1}'也可以。 – syam

回答

4

這裏是一個簡短的完整的例子:

#include <iostream> 
#include <complex> 
#include <cmath> 

using namespace std; 
typedef complex<double> dcomp; 

main() { 
    dcomp i; 
    dcomp a; 
    double pi; 
    pi = 2 * asin(1); 
    i = -1; 
    i = sqrt(i); 
    a = exp(2*pi*i); 
    cout << "i is " << i << "and Euler was right: e(i pi) = " << a << endl; 
} 

測試使用g ++

+0

非常棒,謝謝! – Cancan

3

你可以找到細節here

一個簡單的方法是

#include <complex> 

using std::complex; 
const double pi = 3.1415; 
void foo() 
{ 
    complex<double> val(polar(1, pi/2.0); Create a complex from its olar representation 
} 
1

在下面的代碼C++顯示了一個用於實現虛數j的宏。衆所周知,在編程中,術語i和j通常用作計數器變量。我使用大寫字母J來表示虛數以避免混淆。

/* dcomplex.h

#ifndef DCOMPLEX_H_ 
#define DCOMPLEX_H_ 
#define J dcomplex(0.0,1.0) 
typedef std::complex<double> dcomplex; 
#endif /* DCOMPLEX_H_ */ 

使用該宏,則虛數f] [與複合物一起庫]可以在主代碼中使用。其用途的一個例子如下所示:

.... 
.... 
#include <complex> 
#include "dcomplex.h" 

.... 
.... 
tmp = tmp + t[n]*exp((2.0*PI*(double)n*(double)l/(double)tab_size)*J); 
.... 

....

其中TMP,T [n]爲複雜類型的變量,j是虛數。變量n,l和tab_size是整數類型。常量PI是衆所周知的常量3.14 ...函數exp()被重載以處理複數。 [注:此代碼示例是一個簡單的DFT的一部分]

使用這個宏,代碼更易讀..

5

我得到這個問題最近也找到了未來的讀者一個簡單的方法:

剛使用<complex>庫像以下

#include <iostream> 
#include <complex> 
using namespace std ; 

int main(int argc, char* argv[]) 
{ 
    const complex<double> i(0.0,1.0);  
    cout << i << endl ; 

    return(0) ; 
} 
相關問題