【C++】std::complexで複素数操作【標準ライブラリ】

【C++】std::complexで複素数操作【標準ライブラリ】

標準ライブラリ<std::complex>で出来ることと典型的な使い方

以下のセクションでは、C++の標準ライブラリについて、その使い方や機能を詳しく解説します。

std::complexとは

C++の標準ライブラリは、複素数を扱うためのテンプレートクラスです。複素数は実数部と虚数部から成り立っています。標準ライブラリで提供されるは、これらの数値を簡単に管理し、複素数に関するさまざまな操作を行えるようにするための便利な機能を提供します。

基本的な使い方

std::complexは、複素数を表すためのクラスです。実数部と虚数部の2つの浮動小数点数を保持します。基本的な使い方を以下に示します。


#include <complex>
#include <iostream>

int main() {
    std::complex<double> c1(4.0, 3.0); // 実部4.0, 虚部3.0の複素数
    std::complex<double> c2(1.0, -2.0); // 実部1.0, 虚部-2.0の複素数
    
    std::cout << "c1: " << c1 << std::endl;
    std::cout << "c2: " << c2 << std::endl;
    
    return 0;
}
    

上記の例では、実部と虚部を指定して複素数を作成しています。出力は以下のようになります。


c1: (4,3)
c2: (1,-2)
    

std::complexでできる数学的操作

std::complexでは、複素数に対して数学的な演算を行うことができます。これには加算、減算、乗算、除算などの基本的な演算が含まれます。さらに、複素数特有の操作もサポートされています。

加算と減算


#include <complex>
#include <iostream>

int main() {
    std::complex<double> c1(4.0, 3.0);
    std::complex<double> c2(1.0, -2.0);
    
    auto result_add = c1 + c2;  // 加算
    auto result_sub = c1 - c2;  // 減算
    
    std::cout << "加算結果: " << result_add << std::endl;
    std::cout << "減算結果: " << result_sub << std::endl;
    
    return 0;
}
    

上記のコードでは、複素数c1とc2に対して加算と減算を行い、それぞれの結果を出力しています。出力は以下のようになります。


加算結果: (5,1)
減算結果: (3,5)
    

乗算と除算


#include <complex>
#include <iostream>

int main() {
    std::complex<double> c1(4.0, 3.0);
    std::complex<double> c2(1.0, -2.0);
    
    auto result_mul = c1 * c2;  // 乗算
    auto result_div = c1 / c2;  // 除算
    
    std::cout << "乗算結果: " << result_mul << std::endl;
    std::cout << "除算結果: " << result_div << std::endl;
    
    return 0;
}
    

乗算と除算を行うと、複素数同士の演算結果が得られます。出力結果は以下のようになります。


乗算結果: (10,-5)
除算結果: (-0.4,1.2)
    

複素数の演算

std::complexには、複素数に関するさまざまな数学的演算が組み込まれています。これには、絶対値、共役、偏角などの操作が含まれます。

絶対値


#include <complex>
#include <iostream>

int main() {
    std::complex<double> c(3.0, 4.0);
    
    double abs_value = std::abs(c);  // 絶対値
    std::cout << "絶対値: " << abs_value << std::endl;
    
    return 0;
}
    

上記のコードでは、複素数cの絶対値を計算しています。出力は以下のようになります。


絶対値: 5
    

共役


#include <complex>
#include <iostream>

int main() {
    std::complex<double> c(3.0, 4.0);
    
    std::complex<double> conjugate = std::conj(c);  // 共役
    std::cout << "共役: " << conjugate << std::endl;
    
    return 0;
}
    

共役を取ると、虚部の符号が反転します。出力は以下の通りです。


共役: (3,-4)
    

偏角


#include <complex>
#include <iostream>

int main() {
    std::complex<double> c(3.0, 4.0);
    
    double angle = std::arg(c);  // 偏角
    std::cout << "偏角: " << angle << std::endl;
    
    return 0;
}
    

偏角は、複素数が原点から成す角度です。出力は以下のようになります。


偏角: 0.927295
    

std::complexを使った応用例

std::complexを使用することで、物理学、工学、信号処理などの分野で便利な応用が可能です。例えば、複素数を使ってフーリエ変換を計算することができます。以下に簡単な例を示します。


#include <complex>
#include <iostream>
#include <vector>

int main() {
    std::vector<std::complex<double>> signal = {
        std::complex<double>(1.0, 0.0),
        std::complex<double>(0.0, 1.0),
        std::complex<double>(-1.0, 0.0),
        std::complex<double>(0.0, -1.0)
    };
    
    for (auto& s : signal) {
        std::cout << s << " " << std::abs(s) << std::endl;
    }
    
    return 0;
}
    

上記の例では、複素数のベクトルを作成し、それぞれの複素数の絶対値を計算して表示します。出力は次のようになります。


(1,0) 1
(0,1) 1
(-1,0) 1
(0,-1) 1
    

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です