Имеется ли в C++ литера для мнимой еденицы?
Пишу программу для генератора сигналов на Qt C++. Нужно создать сигнал по средствам exp, т.е привести к виду y = A * exp^(i(phi)), но я не знаю как записать мнимую единицу. Y в комплексном виде объявил std::complex y ;. На нынешнем этапе разработки записываю сигнал через косинус. Пример генерации сигнала :
void MainWindow::on_pushButton_clicked() //ЛЧМ импульс
{
Vector_clear();
for(X = xBegin_2 ; X<= xEnd_2; X += h)
{
x_rab = A*cos((X*0)+(2*pi*d_f*(X*X))/(2*xEnd_2));
Vector_push_back(x_rab);
}
draw_graph();
for(X = xEnd_2 ; X<= new_T; X += h)
{
x_rab = 0;
Vector_push_back(x_rab);
}
draw_graph();
}
void MainWindow::Vector_clear()
{
ui->widget->clearGraphs();
x.clear();
y.clear();
}
double MainWindow::Vector_push_back(double x_rab)
{
x.append(X);
y.append(x_rab);
return 0;
}
Ответы (2 шт):
Начните с #include<complex>.
А работая с комплексными числами, вы можете использовать соответствующие литералы и писать что-то типа
std::complex<double> c = 1.0 + 1i;
Впрочем, и без литералов можно записать что-то типа
std::complex<double> uno{0.0,1.0};
Если есть поддержка C++14, то можно использовать суффикс i
#include <complex>
using namespace std::complex_literals;
auto value = std::exp( 1. + 2.i );
Для более ранних версий, можно ввести глобальную константу:
constexpr std::complex<double> _i = { 0, 1 }; // или const для c++ < 11
auto value2 = std::exp( 1. + 2.*_i );
Или, вводить комплексные числа непосредственно через конструктор std::complex с двумя аргументами. Тогда отдельная константа не понадобится.
auto value3= std::exp( std::complex<double>(1., 2.) );