Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
マトリクス構造解析II 第1回
[go: Go Back, main page]

 

[Google] [情報統括センター] [WebClass] (構力I) (構力II) (構造メモ) (構造実験) (Fortran) (Ruby) (後藤資料)

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

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

YouTube授業動画リスト

注意:以下は、2024年度のgfortran用のテキストをPython用に書き換えようとしている途中なので、 書き換え途中で、色々とおかしい記述があります。 2025年度は、情報統括センターのパソコンで、WindowsではなくUbuntuを起動して行います。

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

今度 授業で確認するが、2025年度現在の3年生の多くは既に情報系の選択科目で、 Python はやっているようであり、そういうことであれば、 マトリクス解析の言語もPythonにしてしまった方が、話が早いかもしれないので、 2025年度は、Python で問題なさそうかどうか試してみようかと思っている。 プログラム言語というのは非常にたくさんあって、常に新しいものが開発されている。 最近だと、業界にもよるが、 Julia だの Python だのが流行りだろうか。 そうした中で、2024年度までマトリクス構造解析で使っていた Fortranというのは、数値計算の分野で昔(1970年代頃から1990年代頃とか) 多用されていた古典的なプログラム言語だ。 今でも、数値計算の分野ではそれなりには使われていると思う。 というのは、マトリクス計算が簡単に書けるとか、数値計算に特化した 特徴があるのだが、そういうことを別にしても、 Fortran(少なくともFortran90以降のgfortranとか)は、 覚えること(コマンドだけでなく、新しい概念とか、その概念を前提にした書き方や読み方)が少なく、 割とすぐに使えるようになるプログラム言語だと思う。 プログラム言語の場合、 高機能で汎用性が高く様々な領域で多用されているプログラム言語だということと、 そのプログラム言語がわかりやすく簡単に書けるかということは別のことだ。 最初にプログラムに触れてもらう教育用の言語として、 Fortran(gfortran)は、割とわかりやすくそう悪くないと私は(2025年現在でも)思う。 これでプログラミングに興味を持った人は、 どんどん今時の新しい言語を勉強してみたらいいと思う。

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

目次

プログラムの実行環境

情報統括センターでPythonを実行する環境はいくつかあるようだが、 比較的 軽くコマンドだけで作業できるという意味で(後藤の好みの問題もあるが)、 授業では、 Windowsではなく、Ubuntu Linuxで作業する。 ちなみに、Windowsの方は、Anaconda Promptとかいうウィンドウを開いて、 そこで、コマンド操作でPythonを実行できるようだ。 具体的な操作方法は、今度、暇があったらメモしておく。 ただ、xyzzy等のエディターでプログラム編集する場合、 プログラムを置いてあるフォルダーを Anaconda のコマンド操作で探して、そこに移動できるかとか、 その辺の課題はありそうだ (実は、情報統括センターの端末でそういうことをやってみようとして、 Windowsに使い慣れてないこともあり難儀して、 Ubuntu Linuxの方が、その辺はすんなりできると主観的に判断した次第)。 ちなみに、Linuxというのは、 プログラム本体が公開されていて、それをコピーしたり改造したりが自由にできる GPLというライセンスで開発されている フリーのOSである。 なので、Ubuntu Linuxの他にも、 たくさんの Linux がある。

Ubuntu Linux の起動方法

情報統括センターのパソコン端末の電源ボタンを押すと 「起動したい項目を選んでください」と表示されて、 WindowsかUbuntuを選択できるので、Ubuntuの方を選択して、エンターキーを押す。 すると、「ログイン」と表示され、ユーザー名を入力する欄が出てくるので、 ユーザーIDを入力し、パスワードを入力すると、Ubuntu Linuxのデスクトップ画面が現れる。

端末の起動

左下の9つの□(私の世代だとBCGマーク)のところにマウスのポインターを持っていくと、 ソフトウェアの検索欄と主要なソフトウェアのアイコンが現れる。 その中から「端末」というのをクリックすると、「端末」が開く。 端末には、「$」のマークの隣で点滅する■マークがあるが、これを「カーソル」と言い、 ここにコマンドを打ち込んで操作をする。 例えば、Pythonのバージョンを調べるために、 $マークの隣に python3 -V と打ち込んでからエンターキーを押してみる。 この操作をこのテキストでは、以下のように書く。

$ python3 -V

するとたぶん、

Python 3.10.12

みたいなのが表示されただろうか。

Linuxコマンド
ls リスト表示。ls -lで詳細表示。ls -aで隠しファイル表示。 ls -ltr 最新ファイルを下に表示。
pwd 今いるディレクトリのパスを表示
cd ディレクトリ移動。cd ..で上の階層へ移動
cp コピー。cp aaa bbb でaaaをbbbにコピー
mv 移動。mv aaa bbb でaaaをbbbに移動
rm ファイル削除。ディレクトリを中身ごと削除するときはrm -r
mkdir ディレクトリ作成
cat テキストファイルの中身を表示
> コマンド>ファイルでコマンドの実行画面をファイルに書き込む

プログラムの作成と保存

プログラムはテキストファイルなので、 テキストエディターで編集する。 この授業では、geditというテキストエディターを使うことにする。 では、画面に「あいうえお」と表示するだけのプログラムを書いてみよう。 まず、プログラムのファイル名を決めるが、 「あいうえお」と表示させるプログラムだから、aiueo.py としておく。 拡張子の.pyは、Pythonのプログラムという意味。 端末を開いておいて、

$ gedit aiueo.py & 

と打ち込んでエンターを押すとgeditが立ち上がる。 ちなみに、最後の & をつけないで起動すると、 端末上でgeditが実行され、端末にコマンドを打ち込めなくなる (&をつけた場合とつけない場合を実際に比較してみれば、意味がわかると思う)。 そしたら、以下のように書き込んで保存してみよう。

print("あいうえお")

上の1行をコピペして貼り付けてもよい。 自分で打ち込むときに注意することは、 コマンドの書き始めは左端からでスペースとかは入れない。 第2回でやるif構文などでは、 if構文を適用する行をすべて同じインデントで書かなければならないなど、 Pythonでは、スペースも文法的な意味を持っているので、 不適切なスペースの入れ方をするとエラーが出る。 ( や " や ) は、半角英数で、 全角の ( “ ” ) ではない。 コマンドは基本的に半角英数で書かれるので、 表示させるための全角文字を入力したときなど、 コマンドの部分を全角文字のまま打ち込んでしまわないように 注意する。

プログラムの実行

端末で、

$ ls

と打ち込んでエンターを押すと、今、保存した aiueo.py がリストに現れる。 こういうプログラム本体が書かれたテキストファイルのことを プログラムソースとかソースコードと言ったりする。 プログラム言語には、プログラムソースを機械語に変換(コンパイル)して作られる 実行ファイルを実行するコンパイラー型のプログラム言語(CとかFortranとか)と、 プログラムソースに書かれたコマンドを1行ずつ解釈しながら逐次実行していく インタープリターというツールを使って実行するインタープリター型の言語 (PythonとかJavaScript)とがある。 Pythonはインタープリター型なので、インタープリターに aiueo.py を読み込ませて実行させる必要がある。 端末上でPythonのインタープリターにaiueo.pyを読み込ませて 実行するには、

$ python aiueo.py

と打ち込んでエンターを押す。 すると、画面に「あいうえお」と表示されるのではないかと思う。

プログラムの強制終了

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

先頭目次

プログラム例題(入力、代入)

キーボードから文字列を打ち込んで、それをそのまま出力するプログラム を作ってみよう。 まず、エディターで、 以下のように打ち込んでみよう。 コピペして貼り付けても構わない。 そして、適当な名前(ここでは a.pyとする)をつけて保存する。

a=input("aを入力して下さい:")
print(a)

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

a=input("aを入力して下さい:")

画面に「aを入力して下さい:」と表示して、 キーボードからの入力を待ち、 何らかの文字列が入力されて、エンターが押されたら、 その文字列をaに代入する。 こういう文字列とか数値とかのデータを代入するaのような 入れ物のことを「変数」と呼ぶ。

print(a)

aに代入されていた文字列を表示する。 aを使わずにこの2行を1行で書きたければ、以下のように書いてもよい。

print(input("aを入力して"))

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


tanpen = float(input("長方形の短辺を入力して下さい: "))
tyouhen = float(input("長方形の長辺を入力して下さい: "))
menseki = tanpen * tyouhen
print("長方形の面積は:", menseki)

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

tanpen = float(input("長方形の短辺を入力して下さい: "))

これは、「長方形の短辺を入力して下さい:」と画面表示して、 キーボードから数値が入力されたら、その数値を実数型に変換してtanpenに代入するということ。 まず、
tanpen= の意味だが、これは、右辺を左辺に代入するということ。
tanpen=3
と書けば、3をtanpenに代入するということになる。等式ではないので、
3=tanpen
と書いたらエラーになる。
tanpen = input("長方形の短辺を入力して下さい: ")
これは、画面に「長方形の短辺を入力して下さい: 」と表示して、 キーボードから入力された文字列をtanpenに代入するということ。 今回は、数字を入力してそれを実数として扱いたいので、float()でくくっている。 float(a)とすれば、aに代入された数字の文字列を実数に変換する。 もし、整数に変換したい場合はint(a)とする。 floatもintもつけずに、

a=input("aを入力して下さい:")

とした場合、入力された文字列が数値ではなく文字列のまま aに代入される。 動画の中で、私は int(input("aを入力して下さい:"))みたいな入力に対して、 1.234と入力してエラーになることを不思議がっているが、 input()で入力されたデータは、文字列のデータであるため、 そのまま整数に置き換えられる文字列でないとエラーとなるということのうようだ。 小数を入力して整数部分を取り出したければ、 int(float(input("aを入力して下さい:")))みたいに、文字列を一旦floatで 実数型にしてからなら、int()で整数部分を取り出せる。

menseki = tanpen * tyouhen

この=は、右辺を左辺に代入するという意味で、等式を表しているわけではない。 この場合、 tyouhen と tanpen を掛け算した数値を menseki に代入する。 例えば、x を x+1 と置き換える場合は、x=x+1 のように書く (tyouhen*tanpen=mensekiとかx+1=xみたいに 逆に書くとエラーになるので注意!)。 かけ算の$\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)
abs(a)aの絶対値
int(a)aを整数に変換
float(a)aを実数(浮動小数点数)に変換
print("長方形の面積は:", menseki)

「長方形の面積は:」と画面に表示して、mensekiに代入された数値を表示する。 print()文で複数のものを並べて表示したい場合は、 print(a,b,c)みたいに並べて書く。 変数aに代入されている値ではなく、「a」という文字自体を表示したいときは、 print("a",b,c)みたいに""でくくる。 例えば、

print(tanpen,"*",tyouhen,"=",menseki)

みたいに書けば、tanpen=3, tyouen=4の場合は、
3.0 * 4.0 = 12.0
みたいに表示される。


プログラム課題1

menseki1.py を参考にして、 三角形・台形などの幾何学図形の面積や、 円錐・球などの立体の体積を求めるプログラムを作りなさい (長方形の面積はここに書いてあるのでダメ)。 WebClassの「プログラム課題1」の問1から、 プログラム本体(例えば kadai1.py とか)を提出する。 プログラムを実行し こんな感じの 実行画面 (仮にエラーが取れずにどうしても実行できなかった場合は、 コンパイル時にエラーが出ている画面) をマウスで領域選択してテキストエディタ(gedit等)に貼り付けて、 適当な名前(kekka.txtとか)をつけて保存し、それを 問2から提出する。 ファイルの提出の際は、WebClassの「参照 ファイルが選択されていません。」というところを クリックすると、 こんな感じのウィンドウが現れるので、 左側の「ホーム」というところをクリックすると、 ログインして最初のディレクトリ内が表示されると思うので、 自分がマトリクス構造解析IIのファイル置き場に使っている ディレクトリ(matrixとか)を選んで、その中から提出するファイルを選択して 「選択」をクリックし、WebClass側で「レポート提出」をクリックする。

球の体積とかで、円周率$\pi$を使いたい場合は、 プログラムソースの先頭に、mathモジュールを使うために

import math

と書いておいて、

pi=math.pi

みたいに定義すればよい。 何回も繰り返し使うわけでなければ、piに代入せずに、 math.piのまま使ってもよい。 それほどの有効桁を必要としないのであれば、

pi = 3.14159265

みたいに書いてもよい。

先頭目次