方程式を解く−連立一次方程式、非線形方程式−

 連立一次方程式の解法

 気象予測など最先端の数値計算もその中身は連立一次方程式を解くことに帰着されている。スーパーコンピュータの世界でも巨大な連立一次方程式をいかに早く解くかが競われている。

連立一次方程式を行列形式で書くと次式。

([A]はn次正方行列。。{a}はn次ベクトル。)

この両辺に左から[A]-1をかけると、

[A] -1[A]{x}=([A] -1[A]){x}=[A] -1{a}

すなわち、{x}=[A]-1{a}となり、係数行列の逆行列を求めることがこの連立一次方程式を解くことになる。

逆行列を求めるには「掃き出し法(sweep out method)」による。それは以下の手順である。

(1)   aiiが1となるようI行目をaiiで割る。(この中心となる対角成分をピボットpivotという。)

(2)   j行目(j≠ i)のk成分に対して-aji×ajkを加える。(k=1〜n)これにより i列目の成分はaiiが1となり、他はaji=0となる。

(3)   もしaii=0の場合は適当な行をI行目に定数倍して加えるか、行交換してaji≠0とする。

【例】連立一次方程式:

を消去法と逆マトリックスを求める方法(掃き出し法)を比較して解く。

式番号

消去法

 

@

A

B

3=C

A-2×C=D

B-(-2) 2×C=E

C-(-4/3) ×G=F

23/3=G

E-(1/3) ×G=H

F-(22/23) ×K=I

G-(5/23) ×K=J

H+(-17/23)=K

 

なお、実際の数値計算では([A]の横{a}を並べてn×(n+1)次マトリックスとしたもの。拡大係数マトリックスという。)に基本変形をほどこす計算をおこなう。その結果は{a}の列が解となる。

 

【実習】表計算の行列計算の機能を使って上式を解く。Excelには逆行列関数MINVERSE(配列範囲)と行列の積を求める関数MMULT(配列1,配列2)がありこれで連立一次方程式を解くことができる。これらの式は特殊な「配列数式」で入力する。(解を記入するセル範囲を選択→(数式)の入力→Ctrl+Shift+Enter)

非線形方程式(1変数)の解法

 

@2分法:確実に解が得られる

手順1  f (x1), f (x2)が反対の符号を持つように区間[x1, x2]を選ぶ
手順2 x1x2の中間の値 x* を選び,f (x*)がf (x2)と同じ符号ならx2の第二の近似値x2 (2) x2 (2) = x*、x1の第二の近似値x1 (2) x1 (2) = x1 として新しい区間とする。符号が反対なら、x1 (2) = x*、x2 (2) = x2。以降これを繰り返す。

A逐次代入法:

の解を求める場合、この式を

として、xの初期値x(1) から、

で次の値x(2)

を計算し、以降繰り返す。解が求まる条件はg(x)の傾きの絶対値g’(x)が1より小さいことである。(図参照)

 

【実習】逐次代入法で
van der Waals式:
(R=8.31×10-6 m3-MPa/(mol-K), a=3.65×10-7 MPa-(m3/mol)2, b= 4.28 ×10-5 m3/mol)
により、T=280 K, P= 5 MPaにおける炭酸ガスのモル容積v [m3/mol]を求める。

式を変形して:

例えば、v(1)=1×10-3 m3/molから出発して、繰り返し計算をおこなう。

 

 

BSteffensenの反復法:お薦め
1 方程式  を  に変形,
2 初期値X0 を選び n=0 とおく
3 x0=X0とおき,x1=g(x0),x2=g(x1) を計算する
4  Xn+1=Xn-(x1-x0)2/(x2-2x1+x0) を計算し,n=n+1として3に戻る
5 Xn+1 の値を解αの近似値とする
特徴:g'(α)>1 でも収束する。またNewton法に比べて導関数の値を必要としない。

 


反復法による非線型方程式解法プログラム
100 '===== ヒセンケイ ホウテイシキ =====
110 '  Steffensen's Method
120 'by スノウチ ハルオ "パソコンニヨルスウチケイサン",p.56,サイエンスシャ
140 NL1 = 20 'サイダイ ハンプクカイスウ
150 ZEP = .001'シュウソクハンテイ ジョウスウ
220 READ ZX0
240 PRINT "*****ハンプク ノ ヨウス*****"
260 FOR NL = 1 TO NL1    (x0=X0とおき,x1=g(x0),x2=g(x1) を計算)
270   X = ZX0: GOSUB 1000: ZX1 = G
275   X = ZX1: GOSUB 1000: ZX2 = G
280   '---- シュウソク ハンテイ    (Xn+1=Xn-(x1-x0)2/(x2-2x1+x0) を計算 )
290   ZXD = ZX2 - 2 * ZX1 + ZX0: ZX3 = ZX2
300   IF ABS(ZXD) < ZEP THEN 390
310   ZX3 = ZX0 - (ZX1 - ZX0) * (ZX1 - ZX0) / ZXD
320   PRINT " ハンプク カイスウ="; NL; "  X="; ZX3
330   ZX0 = ZX3
340 NEXT NL
390 PRINT "***** コタエ *****"
395 PRINT " ハンプク カイスウ ="; NL; "  X="; ZX3
400 END
1000 '**** 非線形方程式 ****
1010 '  例: van der Waals 式
1020 ' f(x)=0 を変形して x=g(x) の形式にして 1080 G=g(x) に書く
1025 ' (注:Z,N のつく定数は使わない)
1030 '---- 未知数の初期値
1035 DATA   50
1040 '---- 方程式の内容
1041 V = X  (未知数Xを置き換える)
1042 A = 3600000!: B = 42.8 (定数はいくらあってもよい)
1043 R = 82.06
1045 T = 273 + 25
1046 P = 100
1080 G = R * T / (P + A / V ^ 2) + B (方程式)
1130 RETURN


 

CNewton 法

関数の解を求めようとするとき、関数f(x)を1次のテーラー展開すると、次式

となるので、

Newton法はこれを使って、初期値x0から近似解x1を求め、さらにx1からその次の近似解x2を求める手順を繰り返すことで解を得る方法である。汎用性がある。数値計算では微分値は数値微分法により求める。

 

【例】を解く。である。

x0=3から出発すると、

以下、x3=0.9518, x4=0.7265, x5=0.6422, x6=0.6302, x7=0.6299, x8=0.6299

 

D 表計算の機能「ゴールシーク」は非線形方程式(1変数)を解くための機能である。「数式入力セル」(関数f(x))、その「目標値」(=0)、「変化させるセル」(x)を指定する。

 

応用化学・化学工学での非線形方程式

 2成分系気液平衡計算

 

2成分系気液平衡計算は液組成xと全圧πを指定して、温度tを求める非線形方程式を解く問題である。エタノール/水系につき、x=0.1,π=101 kPaのとき温度(沸点、露点)と蒸気組成yを求める。解くべき式と定数は以下のよう。

活量係数γにvan Laar式、純成分の蒸気圧にAntoine式を用ると次式となる。変数はt のみである。
すなわち

【実習】ゴールシークで上の方程式を解き、2成分系気液平衡を計算する。
 pr07.xls (参考:2成分系気液平衡 pr01.xls)