- ベストアンサー
連立方程式をSOR法を用いてコンピュータで解く
{ 2 1 1 }{ X1 } { 2 } { 2 3 1 }{ X2 }={ 4 } { 1 1 3 }{ X3 } {-1 } という問題をSOR法を用いてコンピュータ(fortran)で解け。ただし初期値は0とし許容誤差eps=10^-5とする。そこで私は次のようなプログラムで解きました。 ____dimension a(20,20),b(20),x(20),x0(20) ____open(5,file='senkei.d') ____open(6,file='senkei.r') ____open(7,file='senkei.k') ____read(5,*)n,max,eps,u ____read(5,*)((a(i,j),i=1,n),j=1,n) ____read(5,*)(b(i),i=1,n) ____read(5,*)(x0(i),i=1,n) ____do i=1,n ____ad=a(i,i) ____a(i,i)=0.0 ____b(i)=b(i)/ad ____do j=1,n ____a(i,j)=a(i,j)/ad ____end do ____end do ____do k=1,max ____do i=1,n ____w=0.0 ____do j=1,n ____if(j.lt.i)x0(j)=x(j) ____w=w+a(i,j)*x0(j) ____end do ____x(i)=u*(b(i)-w)+(1-u)*x(i) ____write(7,10)x(i) _10_format(3f10.5) ____end do ____w=0.0 ____do i=1,n ____w=w+(x(i)-x0(i))**2 ____end do ____w=sqrt(w/n) ____if(w.lt.eps)go to 20 ____do i=1,n ____x0(i)=x(i) ____end do ____end do ____write(6,*)'error' ____go to 30 _20_write(6,*)'sulution' ____write(6,40)(x(i),i=1,n) _40_format(3f15.5) _30_stop ____end max:最大繰り返し回数,u:緩和係数,a(i,j):係数行列, b(i):既知項,x(i):未知項としました。データではeps=0.00001,max=50,緩和係数uは0.8から0.1ずつ増やして1.5までそれぞれ答えを求めました。私のプログラムではu=1.1の時7回で収束しました。しかしu=1.5の時3回で収束したのですが答えはかなりの誤差ありました。許容誤差eps=10^-5としたのになぜ誤差が大きいまま、しかも三回で収束してしまったのかわかりません。誰かわかる方いらっしゃったら教えていただけませんか?長々と申し訳ありません。お願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
許容誤差を10e-5としていますが、 連立方程式の解との誤差でもって評価しておられませんよね。(普通はしませんけどね) この場合だと、係数xの係数修正量が小さくなった(要するに収束したってことだと思います)だけで、真の解との誤差が10e-5になったわけではないと思います☆