複素数を使います。
\[
\sqrt{ -2 }=
\]
この式を虚数を使って表すと、
\[
\sqrt{ 2 }i
\]
ですね。
複素数をFortranで使うには、complexを使います。
complex 変数名/(実数, 虚数)/
と定義します。
実数-2の平方根を求めるプログラムです。
takk@deb9:~$ cat func-complex-1.f90 program main complex a/(-2.0, 0)/ write(*,*) a write(*,*) sqrt(a) stop end takk@deb9:~$
実行すると、実数部が0で虚数部が1.414(√2)…となりました。
takk@deb9:~$ gfortran func-complex-1.f90 takk@deb9:~$ ./a.out ( -2.00000000 , 0.00000000 ) ( 0.00000000 , 1.41421354 ) takk@deb9:~$
虚数-2の2乗を求めるプログラムです。
takk@deb9:~$ cat func-complex-2.f90 program main complex a/(0, 2.0)/ write(*,*) a write(*,*) a * a stop end takk@deb9:~$ vi func-complex-2.f90 takk@deb9:~$ gfortran func-complex-2.f90 takk@deb9:~$ ./a.out ( 0.00000000 , 2.00000000 ) ( -4.00000000 , 0.00000000 ) takk@deb9:~$
実数が-4、虚数0となりました。
定数から複素数計算することもできます。
takk@deb9:~$ cat func-complex-3.f90 program main write(*,*) sqrt((-4.0, 0)) write(*,*) (0, 2)**2 stop end takk@deb9:~$ gfortran func-complex-3.f90 takk@deb9:~$ ./a.out ( 0.00000000 , 2.00000000 ) ( -4.00000000 , 0.00000000 ) takk@deb9:~$
Pythonの結果とも比べてみます。
takk@deb9:~$ python Python 2.7.13 (default, Jan 19 2017, 14:48:08) [GCC 6.3.0 20170118] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import cmath >>> cmath.sqrt(-4) 2j >>> 2j ** 2 (-4+0j) >>>
Pythonを使うと随分計算が分かりやすくなったものだなあと思います。
コメント