15
Fortran 入門

Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

Fortran 入門

Page 2: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

はじめに1

• 自然科学では連立一次方程式を解く機会がたくさんある.

–連立 n 次方程式を, (線形化して)連立一次方程式にして解くこともある.

–連立微分方程式を, 連立一次方程式に変形することで解くこともある.

Page 3: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

はじめに2

• 説明のために次の連立一次方程式を考える.

• このような方程式を解く方法は大きく分けて下の二つの種類がある.– 直接法– 反復法

• ここでは, 直接法の一つであるガウス・ジョルダンの消去法を考える.

𝑎1,1𝑥 + 𝑎1,2𝑦 + 𝑎1,3𝑧 = 𝑏1𝑎2,1𝑥 + 𝑎2,2𝑦 + 𝑎2,3𝑧 = 𝑏2𝑎3,1𝑥 + 𝑎3,2𝑦 + 𝑎3,3𝑧 = 𝑏3

Page 4: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

行列を用いた表記

• 先の方程式は下のように書き直すことができる.

• そして ,この方程式を解くことは, 何らかの方法で下のように変形することに等しい.

𝑎1,1𝑎2,1𝑎3,1

𝑎1,2𝑎2,2𝑎3,2

𝑎1,3𝑎2,3𝑎3,3

𝑥𝑦𝑧

=

𝑏1𝑏2𝑏3

100

010

001

𝑥𝑦𝑧

=

𝑐1𝑐2𝑐3

Page 5: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

ガウス・ジョルダンの消去法 (1)

• 説明のために下の方程式を考える.

224

4610

6810

𝑥𝑦𝑧

=201640

Page 6: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

ガウス・ジョルダンの消去法 (2)

• 方程式は下のような手順で変形すればよい.1. 1行目を 2 (= 𝑎1,1)で割る.

2. 1行目に 2 (= 𝑎2,1)をかけ, 2行目から引く.

3. 1行目に 4 (= 𝑎3,1)をかけ, 3行目から引く

124

2610

3810

𝑥𝑦𝑧

=101640

104

2210

3210

𝑥𝑦𝑧

=10−440

100

222

32−2

𝑥𝑦𝑧

=10−40

224

4610

6810

𝑥𝑦𝑧

=201640

Page 7: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

ガウス・ジョルダンの消去法 (3)

4. 2行目を 2 (= 𝑎2,2)で割る.

5. 2行目に 2 (= 𝑎3,2)をかけ, 3行目から引く.

100

212

31−2

𝑥𝑦𝑧

=10−20

100

210

31−4

𝑥𝑦𝑧

=10−24

100

222

32−2

𝑥𝑦𝑧

=10−40

Page 8: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

ガウス・ジョルダンの消去法 (4)

6. 3行目を -4 (= 𝑎3,3)で割る.

7. 3行目に 1 (= 𝑎2,3)をかけ, 2行目から引く

8. 3行目に 3 (= 𝑎1,3)をかけ, 1行目から引く

100

210

311

𝑥𝑦𝑧

=10−2−1

100

210

301

𝑥𝑦𝑧

=10−1−1

100

210

001

𝑥𝑦𝑧

=13−1−1

100

210

31−4

𝑥𝑦𝑧

=10−24

Page 9: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

ガウス・ジョルダンの消去法 (5)

7. 2行目を 1 (= 𝑎2,2)で割る. (ここでは変化なし)

8. 2行目に 2 (= 𝑎1,2)をかけ, 1行目から引く.

100

210

001

𝑥𝑦𝑧

=13−1−1

100

210

001

𝑥𝑦𝑧

=13−1−1

100

010

001

𝑥𝑦𝑧

=15−1−1

Page 10: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

ガウス・ジョルダンの消去法 (6)

• ここまでに説明した手順には, いくつかの規則的な処理によって構成されている.

– その規則性を理解できれば, 「繰り返し」(do ループ)によってプログラムで処理できる.

• なお, この方法では, 行列の対角成分がゼロの場合, 工夫が必要である(ピボット選択).

Page 11: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

ピボット選択 (1)

• 次に, 下の方程式を考える.

224

4410

6810

𝑥𝑦𝑧

=201640

Page 12: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

ピボット選択 (2)

• 方程式は下のような手順で変形すればよい.1. 1行目を 2 (= 𝑎1,1)で割る.

2. 1行目に 2 (= 𝑎2,1)をかけ, 2行目から引く.

3. 1行目に 4 (= 𝑎3,1)をかけ, 3行目から引く

124

2410

3810

𝑥𝑦𝑧

=101640

104

2010

3210

𝑥𝑦𝑧

=10−440

100

202

32−2

𝑥𝑦𝑧

=10−40

224

4410

6810

𝑥𝑦𝑧

=201640

Page 13: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

ピボット選択 (3)

4. 2行目を 0 (= 𝑎2,2)で割る…ことはできない.

5. 仕方がないので, 2 行目と 3 行目を入れ替える

これで, 𝑎2,2 = 2で割ることができる.

100

202

32−2

𝑥𝑦𝑧

=10−40

100

220

3−22

𝑥𝑦𝑧

=100−4

以後の作業は先の例と同じ.このような操作をピボット選択と呼ぶ.ここでは行を入れ替えたが, 列を入れ替えても良い.

Page 14: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

参考

• 連立一次方程式を解く方法には他にもある.

– 直接法

• ガウスの消去法

• LU 分解法

• …

– 反復法

• ヤコビ法

• …

Page 15: Fortran 入門 - IT pass (Informational Training program with a ...itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/2020-XX-XX...はじめに2 •説明のために次の連立一次方程式を考える

実習へ

• 連立一次方程式を解く Fortran プログラムを作ってみよう.