高見穎郎・河村哲也 : 偏微分方程式の差分解法

作成日 : 2022-06-13
最終更新日 :

概要

「はじめに」から引用する。

本書では,理工学の各方面で今後ますます重要になると思われる差分法を, 基礎から始めて実用上重要な格子生成法にいたるまで,入門書としてはかなり詳しく解説した。

FORTRAN 77 から Fortran 90 へ

本書では付録に差分法のプログラムが載っているが、あいにく FORTRAN 77 である。 Fortran 90 にするにはどうしたらよいのか、本書の意図とは全く異なるが、少し考えてみた。

FORTRAN 77
Fortran 90
注釈
(主プログラムの名前なし)
program main_program
主プログラムは名前を付ける
(変数名、関数名などは大文字)
(変数名、関数名などは小文字)
小文字でも大丈夫。ただし大文字と小文字の区別はない。
C
!
コメント行
(なし)
implicit none
暗黙の型宣言を使わない。暗黙の型宣言とは、i,j,k,l,m,n で始まる変数は整数型 integer で、 他の文字で始まる変数は実数型 real とすることを指す。
.EQ., .NE., .GT., .GE., .LT., .LE.
==, /=, >, >=, <, <=
if 文などで使う論理式
DO 10 I=1,MX
X=I
10 CONTINUE
DO i = 1, mx
x = i
end do
do 文の文番号のかわりに end do を使う
DO 50 I=23,1,-1
WRITE(*,600) (Z(I,J),I=1,60)
50 CONTINUE
600 FORMAT(1H ,60A1)
do i=23,1,-1
write(*,'(1H ,60A1)') (z(i,j),i=1,60)
end do
write 文の文番号のかわりに直接書式文字列を記述する
DO 40 I=1,MX
J=U(I)+40+.001
IF(J.GT.23) GO TO 40
Z(I,J)='*'
40 CONTINUE
do i=1,mx
j=u(i)*40+.001
if(j > 23) exit
z(i,j)='*'
end do
go to 文のかわりに適切な制御文(この場合は exit)を記述する

この書き換えを通して気づいたことがある。付録 D の FORTRAN プログラムの p.196 では、 次のようなプログラムコードがある。CHARACTER Z(60,23)に対して 2 次元配列の処理を行っている個所で、 58 行から 61 行を掲げる。

    DO 10 J=1,23
    DO 10 I=2, MX-1
      Z(I,J)=' '	
    10 CONTINUE

私の考えでは、これは次のほうがよいと思う

    DO 10 J=1,23
    DO 10 I=1,60
      Z(I,J)=' '	
    10 CONTINUE

というのは、この配列は 23 行 60 列の 2 次元配列だから、すべての要素を初期化の対象とすべきだからだ。 それに、このプログラム 81 行から 83 行は次のようになっているからだ。

    DO 50 J=23,1,-1
      WRITE(*,600) (Z(I,J)=I,60)	
    50 CONTINUE

つまり、2 次元配列の要素すべてを表示するというプログラムになっている。事実、 私がこの本の通り(といっても FORTRAN 77 を Fortran 90 に直して)実行すると、 ところどころ、配列の初期化がされていない要素が表示されてしまい、がっかりした。 すべての要素を初期化すれば、ごみは当然表示されない。私がこの本で学習したのは、 些末なここだけだった。あとは私の頭が弱すぎて理解できなかった。

数式記述ほか

このページの数式は MathJax で記述している。

書誌情報

書名偏微分方程式の差分解法
著者高見穎郎・河村哲也
発行日1994 年 6 月 20 日 初版
発行元東京大学出版会
定価3200 円(本体)
サイズA5 版 228 ページ
ISBN4-13-062901-8
その他川口市立図書館にて借りて読む

まりんきょ学問所数学の部屋数学の本 > 高見穎郎・河村哲也 : 偏微分方程式の差分解法


MARUYAMA Satosi