0

こんにちは私は間違った期待される結果を取得しています、そしてそれは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;
    }
4

2 に答える 2

2

ここpowで呼び出される関数

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

double引数と結果用のもので、負数進のNaNを返します。

于 2012-09-08T22:38:55.940 に答える
2

std::pow渡されたのと同じタイプを返します。

std::complexから返される必要がある場合は、関数にstd::pow()aを渡す必要がありstd::complexます。

任意の式をキャストすることでこれを簡単に解決できます

pow( expression )

に:

pow( std::complex( expression ) )
于 2012-09-08T22:40:23.573 に答える