2017年10月26日木曜日

連立方程式の解法1 掃き出し法

連立方程式の解法1 掃き出し法


次の連立3元方程式を例に、数値計算で用いられる、連立方程式を解くための掃き出し法――中学で習う連立方程式の解法の一つである、加減法とほとんど同じもの――について説明する。

まず、係数だけを取り出し、次のような表(行列)を作る。
①に1/2を掛けて、xの係数を1にする。
次に、②、③のxの係数を0にするために、②−5×①’、③−3×①’を計算する。
②の係数を1にするために、②’に−2/11を掛ける。
①’と③’のyの係数を0にするために、
①’−3/2×②’’、③’−1/2×②’’を計算する。
③’’のzの係数を1にするために、
③’’×11/94
を計算する。
①’’と②’’のzの係数を0にするために、
①’’−7/11×③’’’、②’’+1/11×③’’’を計算する。
①’’’、②’’’、③’’’を連立方程式の形に書き換えると、
だから、この連立方程式の解は(x,y,z)=(1,1,0)である。

要するに、連立方程式
の係数行列を
を単位行列
に変形することによって連立方程式の解(x,y,z)を求める方法を掃き出し法という。

連立3元方程式だと書くのが大変なので、次の連立2元方程式を掃き出し法で、もう一度、解くことにする。
係数だけを取り出すと次のようになる。
×1/2
②−3×①’
(-2/25)×②’
①’−7/2×②’’
よって求める解は

この作業をコンピュータにさせるためにプログラムを書くことは大変そうだけど、実は、簡単に書けてしまう。
Fortranによるサンプルプログラムを以下に示す。
! 掃き出し法で連立方程式を解く
real a(50,51)

! sample data
a(1,1)=2; a(1,2)=3; a(1,3)=1; a(1,4)=4
a(2,1)=4; a(2,2)=1; a(2,3)=-3; a(2,4)=-2
a(3,1)=-1; a(3,2)=2; a(3,3)=2; a(3,4)=2

n=3 ! 3元連立方程式だからn=3

call hakidashi(a,n) ! 掃き出し法を呼び出す

do i=1, n
write(6,100) 'x(',i,')=', a(i,n+1)
end do
100 format(a,i2, a,f10.6)
end

! 掃き出し法
subroutine hakidashi(a,n)
real a(50,51)

do k =1, n
p= a(k,k)
do j=k+1, n+1
a(k,j)= a(k,j)/p
end do
do i=1, n
if (i.ne.k) then
do j=k+1, n+1
a(i,j)=a(i,j)-a(i,k)*a(k,j)
end do
end if
end do
end do

end

解いているのは、次の連立方程式。
上のプログラムは、より一般の
すなわち、
も解けるようになっている。

プログラム使用上の注意は、に格納し、サブルーティンhakidashiを呼び出し後には、解に格納されていること。
これは、連立方程式(1)を
という行列に置き換え、この行列の操作によって連立方程式の解を求めているためで、この行列のn+1列目に
ためである。


0 件のコメント:

コメントを投稿