目录
<complex>
头文件简介std::complex
的基本操作- 2.1 创建复数对象
- 访问复数的实部和虚部
- 复数的基本运算
- 4.1 复数的四则运算
- 复数的数学函数
- 5.1 计算复数的模(Magnitude)和幅角(Phase)
- 5.2 计算复共轭
- 5.3 计算极坐标转换
- 5.4 复数的指数、对数和幂运算
- 5.5 复数的三角函数
- 复数的输入输出
std::complex
与std::vector
结合使用- 典型应用场景
- 结论
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::cin
和 std::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::complex
与 std::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
的用法,有助于高效处理数学建模、信号分析等问题。
推荐阅读:
发表回复