[Google] [ウィキペディア] [附属図書館] [ シラバス ] (構力I) (構力II) (構造メモ) (構造実験) (フォートラン) (後藤資料)

マトリクス構造解析II 第1回

(マトリクス構造解析 第9回)

2023年度マトリクス構造解析II受講者へのお知らせ: 6/14からの対面授業では、PC実習室Bのパソコンの WindowsのCygwin窓内でコンパイルしようと思います。 Fortranのプログラムは、xyzzyなりサクラエディタなりで作成して、 Windows内の(Documentsとかがある)Hドライブ内に保存して下さい。 Cygwin窓を立ち上げるには、スタート→その他→ Cygwin64 Terminalを選択して下さい。 Cygwin窓のフォントサイズなどを変更する場合には、 右クリック→オプションから、Textなどを選択して、 フォントサイズなどを変更して下さい。 Cygwin窓から、Hドライブ(Documentsとかのあるところ)を参照するには、 cd /cygdrive/h でHドライブに移動して、そこでコンパイルや実行を 行って下さい。 また、プログラム内で日本語を使っている場合は、保存オプションの エンコード(文字コード)でShift-JISではなく、UTF-8を指定して下さい。

小さい字は補足説明なので、読み飛ばしてもいいです。

第9回以降は、コンピューターを使って マトリクス解析を行うために、Fortranというプログラム言語を使う。 プログラム言語というのは非常にたくさんあって、常に新しいものが開発されている。 最近だと、業界にもよるが、 Julia だの Python だのが流行りだろうか。 そうした中で、Fortranというのは、数値計算の分野で昔(1970年代頃から1990年代頃とか) 多用されていた古典的なプログラム言語だ。 今でも、数値計算の分野ではそれなりには使われていると思う。 というのは、マトリクス計算が簡単に書けるとか、数値計算に特化した 特徴があるのだが、そういうことを別にしても、 Fortran(少なくともFortran90以降のgfortranとか)は、 覚えることが少なく、割と簡単に使えるようになるプログラム言語だと思う。 プログラム言語の場合、 高機能で様々な領域で多用されているプログラム言語だということと、 そのプログラム言語がわかりやすく簡単に書けるかということは別のことだ。 最初にプログラムに触れてもらう教育用の言語として、 Fortran(gfortran)は、割とわかりやすくそう悪くないと私は思う。 これでプログラミングに興味を持った人は、 どんどん今時の新しい言語を勉強してみたらいいと思う。

このページのオリジナルの作者は 後藤文彦です。
クリエイティブ・コモンズ・ライセンス
マトリクス構造解析オンライン授業用テキスト
第9回オンライン授業

目次

gfortranのインストール

以下は、Windows10またはWindows8にTDM-gccというツールをインストールする方法を 書いている。 MACなど、 それ以外のOSの人は、後藤に個別に相談すること。 パソコン操作やプログラミングに慣れていて、 自分の使い慣れたコンパイラーやエディタを使いたいという人はそれでも 構わない。

プログラムの実行方法

プログラムを実行するウィンドウの開き方
プログラムの作成と保存

print*, "日本語が表示できるか"
end
プログラムの実行

さて、aaa.f90 は単なるテキストファイルなので、 このままでは、コンピューターが aaa.f90 に書かれた プログラムの内容を理解して実行することはできない。 これを実行できるようにするには、 aaa.f90 に書かれたプログラムを、 コンピューターが理解できる機械語に翻訳する必要がある。 人間が理解できるプログラム言語で書かれたテキストファイル (ソースコード)を コンピューターが理解できる機械語に翻訳する操作のことを コンパイルと言う。 aaa.f90 をコンパイルするには、以下のように打ち込んで、エンターキーを押す。


gfortran aaa.f90 -o aaa
print*, "日本語が表示できるか"
end

1行目のprint*で、""で挟まれた文字列を画面に表示し、 2行目のendでプログラムが終了したということである。

プログラムの強制終了

プログラムが終了しない場合(無限ループを作ってしまった場合など)は、 Cntlキーを押しながらcを押すと強制終了できる。

先頭目次

プログラム例題(型宣言、データ入力、代入)

 長方形の短辺と長辺を入力すると長方形の面積を表示するプログラムを 作ってみよう。まず、エディター(ワードパッド等)で、 以下のように打ち込んでみよう。 コピペして貼り付けても構わない。 そして、適当な名前(ここでは menseki1.f90とする)をつけて保存する。 ワードパッドの場合は、"menseki1.f90"のように「"」で挟んで保存すること。


       implicit none
       real :: tanpen, tyouhen, menseki
         print *,"長方形の短辺を入力して下さい"
          read *,tanpen
         print *,"長方形の長辺を入力して下さい"
          read *,tyouhen
         menseki=tyouhen*tanpen
         print *,"長方形の面積は:",menseki
       end

 プログラムの中身を説明する。

       implicit none

この宣言をしておくと、暗黙の型宣言(先頭文字がi-nの変数が整数型でそれ以外は実数型)が 無効になるので、うっかり宣言していない変数を書いたりすると、 コンパイル時にエラーが出て教えてくれるようになる。 必ず毎回、先頭にこの1行を書くということにしておけばよい。

       real :: tanpen, tyouhen, menseki 

これは、tanpen, tyouhen, menseki という3つの変数を実数として使うことを 宣言している テキスト参照箇所: 4.1.1. 基本的な型宣言)。 ちなみに、整数型の変数を宣言する場合は、integerを使う。

       print *,"長方形の短辺を入力して下さい" 

これは、「長方形の短辺を入力して下さい」と画面表示するということ。

        read *,tanpen

これは、キーボードから入力した数字を tanpen に入れるという こと テキスト参照箇所: 7.2.1. 入出力文)。

        menseki=tyouhen*tanpen 

この=は、右辺を左辺に代入するという意味で、等式を表しているわけではない。 この場合、 tyouhen と tanpen を掛け算した数値を menseki に代入する。 例えば、x を x+1 と置き換える場合は、x=x+1 のように書く (tyouhen*tanpen=mensekiとかx+1=xみたいに 逆に書くとエラーになるので注意! テキスト参照箇所: 2.1. 算術演算)。 かけ算の$\times$は * で表す。 その他の演算は、以下のように表す。

$a + b$a + b
$a - b$a - b
$a \times b$a * b
$\frac{a}{b}$a / b
$a^{b}$a ** b
$a\{b+c(d+e)\}^{(f+g)}$a*(b+c*(d+e))**(f+g)
menseki1.f90を実行してみる
gfortran menseki1.f90 -o menseki1
エラーでコンパイルできない例

プログラムに間違い(バグ)があると、 コンパイルしたときに、 そのバグがある行と、その行内でのおよその位置、 エラーの内容を表す単純な英語で エラーメッセージが示される。 エラーメッセージを読めば、どういうエラーなのか、 ある程度は推測できると思う。

tyouhen*tanpen=mensekiと代入文の右辺と左辺を逆に書いてしまった場合。
7行目のtyouhen*tanpen=mensekiと書かれた行の 「1」で示した辺りに、Unclassifiable statement (よくわからない文)がある。

print*文の右側のスペースの中に、全角スペースを1個 打ってしまった (ワードパッド上では、全角スペースも半角スペースも空白にしか見えないので 気づけない)。
5行目の print*," と書かれた行の「1」で示した辺りに Invalid character (無効な文字)がある。

print *,"長方形の短辺を入力して下さい"の右側の「"」を全角の「❞」にしてしまった。
3行目の print*," と書かれた行の「1」で示した辺りに、 Unterminated character (終わらない文字列)、 文法的なつながりとここでのconstantの品詞が今ひとつわからないが、 constant beginning at (1)(の継続。「1」で始まったやつの)。 動詞のない名詞句と解釈すると、 「1で始まって終わらない文字列の継続」とか。


プログラム課題1

menseki1.f90 を参考にして、 三角形・台形などの幾何学図形の面積や、 円錐・球などの立体の体積を求めるプログラムを作りなさい (長方形の面積はここに書いてあるのでダメ)。 WebClassの「プログラム課題1」から、 プログラム本体(例えば kadai1.f90 とか)をアップロードし、 こんな感じの 実行画面 (仮にエラーが取れずにどうしても実行できなかった場合は、 コンパイル時にエラーが出ている画面) を写真で撮影したものをアップロードする。

球の体積とかで、円周率$\pi$を使いたい場合は、 三角関数の逆関数を用いて$\pi$を与えることができる。 例えば、$\cos(\pi)=-1$から$\pi=\arccos(-1)$の関係を用いるのであれば、

pi=acos(-1.)

みたいに定義すればよい。もちろん、piを実数変数として定義する必要もある。 あるいは、$\sin(\frac{\pi}{2})=1$から$\pi=2\arcsin(1)$の関係を 用いるのであれば、以下のように与える。

pi=2.*asin(1.)

それほどの有効桁を必要としないのであれば、

pi=3.14159265

みたいに書いてもよい。

先頭目次