新しく発言する  EXIT  インデックスへ

ガウスの消去法連立1次方程式の解Ax=b


  ガウスの消去法 連立1次方程式の解 Ax=b 山中和義 2007/11/25 10:21:25 
  !ガウス・ジョルダン(Gauss-Jordan)法N元... 山中和義 2007/11/25 10:22:50 
  │└FullBASICなら逆行列による計算がお手軽です... 山中和義 2007/11/25 10:28:23 
  ヤコビ反復法(Jacobi) 山中和義 2008/09/29 10:28:16 
  │└ガウス・ザイデル反復法(Gauss-Seidel) 山中和義 2008/09/29 10:32:12 
  !共役勾配法(conjugategradientmethod)N元... 山中和義 2008/10/06 20:58:41 
Re: ガウスの消去法 連立1次方程式の解 Ax=b  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/10/06 20:58:41
!共役勾配法(conjugate gradient method) N元連立1次方程式の解 Ax=b

!2*x1 +3*x2 +x3 = 4
!4*x1 +x2 -3*x3 = -2
! -x1 +2*x2 +2*x3 = 2

!連立方程式を記述する
LET N=3 !変数(元)の数

DIM A(N,N) !左辺
DATA 2,3, 1 !係数のみ配列で記録する
DATA 4,1,-3
DATA -1,2, 2
MAT READ A

DIM b(N) !右辺
DATA 4,-2,2
MAT READ b


DIM x(N) !解
MAT x=ZER

DIM tA(N,N), c(N),p(N),q(N),r(N),s(N), T1(N)
MAT T1=A*x !c0=b-A*x0
MAT c=b-T1
MAT tA=TRN(A)
MAT r=tA*c
MAT p=r !p0=r0

LET c2=DOT(c,c) !c2=(c0,c0)
DO
LET c1=c2

MAT q=A*p !qk=A*pk
MAT s=tA*q !sk=tA*qk

LET alpha=DOT(p,r)/DOT(q,q) !αk=(pk,rk)/(qk,qk)
MAT T1=(alpha)*p !xk+1=xk + αk*pk
MAT x=x+T1
MAT T1=(alpha)*q !ck+1=ck - αk*qk
MAT c=c-T1
MAT T1=(alpha)*s !rk+1=rk - αk*sk
MAT r=r-T1

LET beta=-DOT(r,s)/DOT(q,q) !β=-(rk+1,sk)/(qk,qk)
MAT T1=(beta)*p !pk+1=rk+1 + βk*pk
MAT p=r+T1

LET c2=DOT(c,c) !c2=(c+1,ck+1)
LOOP UNTIL c1<=c2 !収束するまで

MAT PRINT x; !結果を表示する


END

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。