уравнение с комплексными числами, дающее неправильный результат в переполнении стека

Привет я получаю неправильный ожидаемый результат, и я думаю, что это нужно для std :: complex, вот результат, который я должен получить в соответствии с MATLAB и вот результат, если вы запустите код ниже, это результат я понимаю, в основном все просто NAN, где я ошибся?

#include<cmath>
#include<complex>
#include<new>
#include<iostream>int sign(double x){
if(x > 0)    {
return 1;
}
else if(x < 0)    {
return -1;
}
else    {
return 0;
}
}

int main(){

double alpha = 1.8;
double beta = .35;
double sigma = 1;
double mu = 0.5;
double PI = 3.1416;
int N = 8192;
double h = 0.01;
std::complex<double>phi[N];
double* in_t2= new double[N];double* abs_t = new double [N];
double* sign_t = new double [N];

std::complex<double> I(0,1);
double s = 0.01;

s = 1/(h*N);
std::cout<<s;
for (int i=1; i<=N; i++) {
in_t2[i-1] = 2*PI * (i - 1 - N/2)*s; // x1

}

for (int i = 0; i < N; i++){
abs_t[i] = std::abs(in_t2[i]);
}

for (int i = 0; i < N; i++){
sign_t[i] = sign(in_t2[i]);
}

for (int i = 0; i < N; i++){
//where i suspect the error is..phi[i] = pow(abs_t[i],sign_t[i]);
}for ( int i = 0; i< N; i++){
if (in_t2[i] == 0){
phi[i] = 0;
}
phi[i] = std::exp(phi[i]);
}return 0;
}

0

Решение

std::pow вернет тот же тип, который передан ему.

Если вам нужно std::complex быть возвращенным из std::pow()Вы должны пройти std::complex к функции.

Вы можете легко решить это, приведя любое выражение

pow( expression )

чтобы:

pow( std::complex( expression ) )
2

Другие решения

pow функция называется здесь

pow((-1.0*abs_t[i]), alpha)

это тот, для double аргументы и результаты, которые возвращают NaN для отрицательных оснований.

2

По вопросам рекламы [email protected]