复数的方程在c ++中给出了错误的结果

时间:2012-09-08 22:25:00

标签: c++ complex-numbers

嗨,我得到了错误的预期结果,我认为这对std :: complex来说,这是我应该根据matlab获得的结果,而这里是结果如果你运行下面的代码这是我得到的result,基本上一切都只是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;
    }

2 个答案:

答案 0 :(得分:2)

此处调用的pow函数

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

double参数和结果的参数,它返回NaN作为负碱基。

答案 1 :(得分:2)

std::pow将返回传递给它的相同类型。

如果您需要从std::complex返回std::pow(),则必须将std::complex传递给该功能。

您可以通过转换任何表达式

轻松解决此问题
pow( expression )

为:

pow( std::complex( expression ) )