目录

  1. <complex> 头文件简介
  2. std::complex 的基本操作
  3. 访问复数的实部和虚部
  4. 复数的基本运算
  5. 复数的数学函数
  6. 复数的输入输出
  7. std::complexstd::vector 结合使用
  8. 典型应用场景
  9. 结论

1. <complex> 头文件简介

在 C++ 中,复数通过 std::complex<T> 来表示,其中 T 代表浮点数类型,常见的类型包括:

  • std::complex<float>:单精度复数
  • std::complex<double>(默认类型):双精度复数
  • std::complex<long double>:扩展精度复数

要使用 <complex>,需要包含头文件:

#include <complex>
#include <iostream>


2. std::complex 的基本操作

2.1 创建复数对象

可以通过以下方式创建 std::complex 对象:

#include <iostream>
#include <complex>

int main() {
    std::complex<double> c1(3.0, 4.0);  // 3 + 4i
    std::complex<double> c2 = 5.0;      // 5 + 0i

    std::cout << "c1: " << c1 << std::endl;
    std::cout << "c2: " << c2 << std::endl;
    return 0;
}

输出:

c1: (3,4)
c2: (5,0)

说明:

  • std::complex<T>(real, imag):指定实部和虚部。
  • std::complex<T>(real):只传递实部,默认虚部为 0

3. 访问复数的实部和虚部

可以使用 real()imag() 访问复数的实部和虚部:

std::complex<double> c(3.0, 4.0);
std::cout << "Real part: " << c.real() << std::endl; // 3.0
std::cout << "Imaginary part: " << c.imag() << std::endl; // 4.0


4. 复数的基本运算

4.1 复数的四则运算

C++ 允许对 std::complex 对象进行加、减、乘、除等运算:

std::complex<double> c1(3.0, 4.0);
std::complex<double> c2(1.0, 2.0);

std::complex<double> sum = c1 + c2;  // 复数加法
std::complex<double> diff = c1 - c2; // 复数减法
std::complex<double> prod = c1 * c2; // 复数乘法
std::complex<double> quot = c1 / c2; // 复数除法

std::cout << "Sum: " << sum << std::endl;
std::cout << "Difference: " << diff << std::endl;
std::cout << "Product: " << prod << std::endl;
std::cout << "Quotient: " << quot << std::endl;


5. 复数的数学函数

5.1 计算复数的模(Magnitude)和幅角(Phase)

C++ 提供了 std::abs()std::arg() 计算复数的模和幅角:

std::complex<double> c(3.0, 4.0);
std::cout << "Magnitude: " << std::abs(c) << std::endl; // 5.0
std::cout << "Phase: " << std::arg(c) << std::endl; // 0.927295

说明:

  • std::abs(c) 计算复数的模,即 sqrt(real² + imag²)
  • std::arg(c) 计算复数的幅角(弧度)

5.2 计算复共轭

使用 std::conj() 计算复数的共轭:

std::complex<double> c(3.0, 4.0);
std::cout << "Conjugate: " << std::conj(c) << std::endl; // (3,-4)

5.3 计算极坐标转换

  • std::polar(r, θ) 通过模 r 和相角 θ 创建复数:
std::complex<double> c = std::polar(5.0, 0.927295);
std::cout << "Polar form: " << c << std::endl; // (3,4)

5.4 复数的指数、对数和幂运算

C++ 提供了多个数学函数:

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

std::cout << "Exp: " << std::exp(c) << std::endl;
std::cout << "Log: " << std::log(c) << std::endl;
std::cout << "Pow: " << std::pow(c, 2.0) << std::endl;

5.5 复数的三角函数

C++ 还支持 std::sin()std::cos()std::tan() 及其反函数:

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

std::cout << "Sin: " << std::sin(c) << std::endl;
std::cout << "Cos: " << std::cos(c) << std::endl;
std::cout << "Tan: " << std::tan(c) << std::endl;


6. 复数的输入输出

标准库支持直接使用 std::cinstd::cout 进行输入输出:

std::complex<double> c;
std::cout << "Enter a complex number (format: real imag): ";
std::cin >> c;
std::cout << "You entered: " << c << std::endl;

输入示例:

Enter a complex number (format: real imag): 2 3
You entered: (2,3)


7. std::complexstd::vector 结合使用

可以将 std::complex 存储到 std::vector 里,以便处理复数数组:

#include <vector>
#include <complex>

std::vector<std::complex<double>> v = {
    {1.0, 2.0},
    {3.0, 4.0},
    {5.0, 6.0}
};

for (const auto& c : v) {
    std::cout << c << std::endl;
}


8. 典型应用场景

  • 傅里叶变换(FFT):在信号处理中,复数用于频谱分析和变换计算。
  • 电路分析:在交流电路计算中,阻抗通常表示为复数。
  • 量子计算:复数广泛应用于量子态计算和模拟。

9. 结论

C++ 标准库的 <complex> 头文件提供了强大的复数计算能力,支持基础运算、数学函数以及极坐标转换。掌握 std::complex 的用法,有助于高效处理数学建模、信号分析等问题。

推荐阅读: