Fortran(complex)

旧2-5. Fortran毎日学習


複素数を使います。
\[
\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を使うと随分計算が分かりやすくなったものだなあと思います。

コメント

タイトルとURLをコピーしました