Стандартная библиотека C++<complex>
В математике и инженерных вычислениях нам часто приходится иметь дело с комплексными числами, например в обработке сигналов, преобразованиях Фурье, анализе цепей и т. д.
Стандартная библиотека C++ предоставляет<complex>Заголовочный файл позволяет работать с комплексными числами так же легко, как с обычными числами.
Комплексное число состоит из действительной и мнимой частей, в форме:
z = a + bi
Комплексное число — это комбинация действительного и мнимого числа, обычно представляемая какa + bi, гдеa— действительная часть,b— мнимая часть,i— мнимая единица, удовлетворяющаяi^2 = -1。
В C++ тип complex — этоstd::complex<T>представлено, гдеTможет быть любым арифметическим типом, напримерfloat、doubleилиlong double。
Чтобы использовать<complex>Для библиотеки сначала нужно включить этот заголовочный файл в вашу программу на C++:
#include <iostream> #include <complex>
Пример
#include <complex> // заголовочный файл для комплексных чисел
int main() {
std::complex<double> z1(3.0, 4.0); // 3 + 4i
std::complex<double> z2(1.0, -2.0); // 1 - 2i
std::cout << "z1 = " << z1 << std::endl;
std::cout << "z2 = " << z2 << std::endl;
}
Вывод:
z1 = (3,4) z2 = (1,-2)
Базовый синтаксис
Создание комплексных чисел
std::complex<double> c(5.0, 3.0); // 创建一个复数 5 + 3i
Доступ к действительной и мнимой частям
double realPart = c.real(); // 获取实部 double imagPart = c.imag(); // 获取虚部
Основные операции над комплексными числами
Стандартная библиотека C++<complex>поддерживает следующие основные операции:
- Сложение:
operator+ - Вычитание:
operator- - Умножение:
operator* - Деление:
operator/ - Сопряжение:
conj - Модуль:
abs - Аргумент:
arg
1. Получение действительной и мнимой частей
std::cout << "实部: " << z1.real() << std::endl; // 3 std::cout << "虚部: " << z1.imag() << std::endl; // 4
2. Четыре основные арифметические операции:
Пример
auto z4 = z1 - z2; // (2, 6)
auto z5 = z1 * z2; // (11, -2)
auto z6 = z1 / z2; // (-1, 2)
std::cout << "z1 + z2 = " << z3 << std::endl;
std::cout << "z1 * z2 = " << z5 << std::endl;
3. Общие функции
Заголовочный файл<complex>предоставляет множество математических функций, связанных с комплексными числами.
Пример
std::cout << "Модуль |z1| = " << std::abs(z1) << std::endl; // 5
std::cout << "Аргумент arg(z1) = " << std::arg(z1) << std::endl; // 0.927 (радианы)
std::cout << "Сопряжённое conjugate(z1) = " << std::conj(z1) << std::endl; // (3,-4)
std::cout << "exp(z1) = " << std::exp(z1) << std::endl; // e^(3+4i)
std::cout << "sin(z1) = " << std::sin(z1) << std::endl;
std::cout << "cos(z1) = " << std::cos(z1) << std::endl;
4. Представление в полярных координатах
Иногда нам нужно представлять комплексные числа в полярных координатах (модуль + фазовый угол).
Пример
double r = 5.0; // Модуль
double theta = M_PI / 4; // 45 градусов
std::complex<double> z = std::polar(r, theta);
std::cout << "Полярное комплексное число z = " << z << std::endl; // (3.53553,3.53553)
5. Параметры шаблона
std::complex<T>Это шаблонный класс, поддерживающий различные числовые типы:
std::complex<float>std::complex<double>(часто используется)std::complex<long double>
Пример
std::complex<double> zd(1.0, 2.0);
Пример
Ниже приведён пример использования<complex>Простой пример заголовочного файла, включающий создание комплексных чисел, базовые операции и вывод результатов.
Пример
#include <complex>
int main() {
// Создать два комплексных числа
std::complex<double> c1(5.0, 3.0); // 5 + 3i
std::complex<double> c2(2.0, -4.0); // 2 - 4i
// Вывод комплексных чисел
std::cout << "c1: " << c1 << std::endl; // (5,3)
std::cout << "c2: " << c2 << std::endl; // (2,-4)
// Сложение комплексных чисел
std::complex<double> sum = c1 + c2;
std::cout << "Сумма: " << sum << std::endl; // 7 - i
// Вычитание комплексных чисел
std::complex<double> diff = c1 - c2;
std::cout << "Разность: " << diff << std::endl; // 3 + 7i
// Умножение комплексных чисел
std::complex<double> product = c1 * c2;
std::cout << "Произведение: " << product << std::endl; // 22 - 14i
// Деление комплексных чисел
std::complex<double> quotient = c1 / c2;
std::cout << "Частное: " << quotient << std::endl; // -0.1 + 1.3i
// Комплексное сопряжение
std::complex<double> conjugate = std::conj(c1);
std::cout << "Сопряжённое c1: " << conjugate << std::endl; // 5 - 3i
// Модуль комплексного числа
double modulus = std::abs(c1);
std::cout << "Модуль c1: " << modulus << std::endl; // sqrt(34) ≈ 5.83095
// Аргумент комплексного числа (в радианах)
double argument = std::arg(c1);
std::cout << "Аргумент c1: " << argument << std::endl; // atan(3/5) ≈ 0.54042 rad
return 0;
}
При запуске вышеприведённой программы вы получите следующий вывод:
c1: (5,3) c2: (2,-4) Sum: (7,-1) Difference: (3,7) Product: (22,-14) Quotient: (-0.1,1.3) Conjugate of c1: (5,-3) Modulus of c1: 5.83095 Argument of c1: 0.54042Другие расширения