C++で複素数を扱う

C++で複素数を扱う。ヘッダー

#include <complex>

を読み込んで

std::complex<double> z1(1.0, 1.0);

とすれば

\begin{align}
z_{1}=1+j
\end{align}

が定義できる。

演算やノルム、共役複素数の計算方法はサンプルコードを参照。

#include <iostream>
#include <complex>

int main()
{
    std::complex<double> z1(1.0, 1.0);
    std::complex<double> z2(2.0, 4.0);

    double real = z1.real(); // 実部
    double imag = z1.imag(); // 虚部

    std::cout << "Re(z1) = " << real << std::endl;
    std::cout << "Im(z1) = " << imag << std::endl;

    std::cout << std::endl;
   
    std::cout << "z1 + z2 : " << z1 + z2 << std::endl;
    std::cout << "z1 - z2 : " << z1 - z2 << std::endl;
    std::cout << "z1 * z2 : " << z1 * z2<< std::endl;
    std::cout << "z1 / z2 : " << z1 / z2 << std::endl;

    std::cout << std::endl;

    std::cout << "|z1| = " << std::abs(z1) << std::endl;   
    std::cout << "|z2| = " << std::abs(z2) << std::endl;   
 
    std::cout << std::endl;

    std::cout << "arg(z1) : " << std::arg(z1) << std::endl;
    std::cout << "arg(z2) : " << std::arg(z2) << std::endl;  

    std::cout << std::endl;

    std::cout << "norm(z1) : " << std::norm(z1) << std::endl;
    std::cout << "norm(z2) : " << std::norm(z2) << std::endl;

    std::cout << std::endl;

    std::cout << "conj(z1) =" << std::conj(z1) << std::endl;
    std::cout << "conj(z2) =" << std::conj(z2) << std::endl;
}

実行結果

Re(z1) = 1
Im(z1) = 1

z1 + z2 : (3,5)
z1 - z2 : (-1,-3)
z1 * z2 : (-2,6)
z1 / z2 : (0.3,-0.1)

|z1| = 1.41421
|z2| = 4.47214

arg(z1) : 0.785398
arg(z2) : 1.10715

norm(z1) : 2
norm(z2) : 20

conj(z1) =(1,-1)
conj(z2) =(2,-4)

コメント

タイトルとURLをコピーしました