【C++】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