IT Notes

Комплексные числа в C++

Класс комплексных чисел в C++

Для комплексных чисел в C++ предусмотрен шаблонный класс std::complex. Параметр его шаблона определяет тип коэффициентов, соответствующих действительной и мнимой части комплексного числа. В большинстве случаев в качестве параметра можно использовать тип double. Объявим простое комплексное число 1+2i:

#include <iostream>
#include <complex>

int main() {
    std::complex< double > z( 1.0, 2.0 );     // z = 1 + 2i
    std::cout << z              << std::endl; // Комплексное число выводится в виде вектора: (1, 2)
    std::cout << std::conj( z ) << std::endl; // Комплексно-сопряженное: (1, -2)
    std::cout << z.real()       << std::endl; // Действительная часть комплексного числа: 1
    std::cout << z.imag()       << std::endl; // Мнимая часть комплексного числа: 2

    return 0;
}

Математические операции с комплексными числами в C++

С комплексными числами в C++ можно работать так же, как и с остальными числовыми типами данных:

#include <iostream>
#include <complex>

int main() {
    std::complex< double > z1( 1.0, 2.0 );
    std::complex< double > z2( 2.0, 1.0 );

    std::cout << z1 + z2           << std::endl; // Сложение комплексных чисел: (3, 3)
    std::cout << z1 - z2           << std::endl; // Разность комплексных чисел: (-1, 1)
    std::cout << z1 * z2           << std::endl; // Умножение комплексных чисел: (0, 5)
    std::cout << z1 / z2           << std::endl; // Деление комплексных чисел: (0.8, 0.6)
    std::cout << std::pow( z1, 2 ) << std::endl; // Возведение в степень комплексного числа: (-3, 4)

    return 0;
}

Показательная и тригонометрическая форма комплексного числа в C++

В стандартной библиотеке C++ также предусмотрены функции для работы с различными формами комплексных чисел:

#include <iostream>
#include <complex>

int main() {
    std::complex< double > z( 3.0, 4.0 );

    double rho = std::abs( z ); // Модуль комплексного числа: 5
    double phi = std::arg( z ); // Аргумент комплексного числа: 0.927295

    // Тригонометрическая форма комплексного числа: 5*(cos(0.927295) + i*sin(0.927295))
    std::cout << rho << "*(cos(" << phi << ") + i*sin(" << phi << "))" << std::endl;

    // Показательная форма комплексного числа: 5*exp(i*0.927295)
    std::cout << rho << "*exp(i*" << phi << ")" << std::endl;

    // Получаем исходное комплексное число по модулю и аргументу: (3, 4)
    std::cout << std::polar( rho, phi ) << std::endl;

    return 0;
}
Понравилась статья?
Не забудь поделиться ей с друзьями!

Похожие публикации

Комментарии

Не правильно. z = (0,1) != i. z = 1. В Visual Studio комплексное число представляется так

Здравствуйте. Спасибо за комментарий.

Уточнил в MSDN ( https://msdn.microsoft.com/ru-ru/library/xz7hhb93.aspx ):

Код:

#include <complex>

#include <iostream>

int main( )

{

using namespace std;

complex <double> c1 ( 4.0 , 3.0 );

cout << "The complex number c1 = " << c1 << endl;

double dr1 = c1.real ( );

cout << "The real part of c1 is c1.real ( ) = " << dr1 << "." << endl;

double di1 = c1.imag ( );

cout << "The imaginary part of c1 is c1.imag ( ) = " << di1 << "." << endl;

}

Соответствующий output:

The complex number c1 = (4,3)

The real part of c1 is c1.real ( ) = 4.

The imaginary part of c1 is c1.imag ( ) = 3.

Сам конструктор определен следующим образом:

constexpr complex( const T& _RealVal = 0, const T& _ImagVal = 0);

Где

_RealVal - Значение вещественной части, используемое для инициализации конструируемого комплексного числа.

_ImagVal - Значение мнимой части, используемое для инициализации конструируемого комплексного числа.

Т.е. z = (0,1) все же равно i.

RSS RSS-рассылка

Популярное

Дешевый хостинг