複素数を使いたい


Tips

解説

複素数を使います。 oct-cmplx.hをインクルードし、Complexクラスを利用します。 このComplexはC++標準ライブラリcomplexのcomplexテンプレートをリネームしたものです。

typedef std::complex< double >  Complex;

複素数の加減乗除算や指数関数、三角関数などが利用できます。

サンプルプログラム

filecomplex.cpp

#include <iostream>
#include <octave/config.h>
#include <octave/oct-cmplx.h> 

using namespace std; 

int main()
{
  cout.precision(3);
  cout.setf(ios::fixed); 

  Complex a(1.0, -0.5);
  cout << "a       = " << a << endl;
  cout << "real(a) = " << real(a) << endl;
  cout << "imag(a) = " << imag(a) << endl;
  cout << "a.real()= " << a.real() << endl;
  cout << "a.imag()= " << a.imag() << endl;
  cout << "abs(a)  = " << abs(a) << endl;
  cout << "arg(a)  = " << arg(a) << endl;
  cout << "norm(a) = " << norm(a) << endl;
  cout << "conj(a) = " << conj(a) << endl;
  cout << "sqrt(a) = " << sqrt(a) << endl;
  cout << "sin(a)  = " << sin(a) << endl;
  
  Complex const IU(0.0, 1.0);
  Complex b = 1.0 + IU;
  cout << "b       = " << b << endl;
  cout << "a + b   = " << a + b << endl;
  cout << "a * b   = " << a * b << endl;
  cout << "a / b   = " << a / b << endl;
}

出力

a       = (1.000,-0.500)
real(a) = 1.000
imag(a) = -0.500
a.real()= 1.000
a.imag()= -0.500
abs(a)  = 1.118
arg(a)  = -0.464
norm(a) = 1.250
conj(a) = (1.000,0.500)
sqrt(a) = (1.029,-0.243)
sin(a)  = (0.949,-0.282)
b       = (1.000,1.000)
a + b   = (2.000,0.500)
a * b   = (1.500,0.500)
a / b   = (0.250,-0.750)

コメント