60 likes | 403 Views
連立一次方程式の解法(1). 連立二元 一次方程式. クラメール ( Cramer )の公式. 元の 数が大きくなると行列式の計算は困難. 連立一次方程式の解法( 2). 連立 n 元 一次方程式. 第一式を a 11 で割って、 a k1 倍して第 k 式から引く. 第二式を a’ 22 で割って、 a’ k2 倍して第 k 式から引く. 以降 同様 の 処理 を繰り返す. 連立一次方程式の解法 (3 ). 第 n 式を a n-1,n 倍して上の式(第 n-1 式)から引く. 第 n 式を a n-2,n 倍し 、 第 n-1 式 を a n-2,n-1 倍し て
E N D
連立一次方程式の解法(1) 連立二元一次方程式 クラメール(Cramer)の公式 元の数が大きくなると行列式の計算は困難
連立一次方程式の解法(2) 連立n元一次方程式 第一式をa11で割って、ak1倍して第k式から引く 第二式をa’22で割って、a’k2倍して第k式から引く 以降同様の処理を繰り返す
連立一次方程式の解法(3) 第n式をan-1,n倍して上の式(第n-1式)から引く 第n式をan-2,n倍し、第n-1式をan-2,n-1倍して 上の式(第n-2式)から引く 以降同様の処理を繰り返す ガウス(Gauss)の消去法
連立一次方程式の解法(4) ガウスの消去法で連立方程式を解く外部関数: gauss.f コマンドプロンプトで次のコマンドを入力 [s2………]$ cp~takizawa/gauss.f. 半角スペースとピリオドを忘れずに!! [s2………]$ ls でファイルリストを表示、「gauss.f」がコピーされていることを確認 gauss.f の呼び出し利用するメインプログラム(例えば prog10.f)を自分で作成し、 [s2………]$ gfortranprog10.fgauss.f としてプログラムをコンパイル
連立一次方程式の解法(5) ガウスの消去法で連立方程式を解く外部関数: gauss.f 関数の引数 functiongsnelm(mat, vec, dim, mxdim) Integer::dim, mxdim, gsnelm double precision::mat(mxdim,mxdim),vec(mxdim) gsnelm → 解が求まったら「0」、解がない時は「0」以外の値を返す関数 dim→ 連立方程式の数(元の数) mxdim→ メインプログラムで宣言された配列の数(mxdim≧ dim) mat → 連立方程式の係数(aij)行列を表す二次元配列 vec→ 連立方程式の右辺(bk)を表す一次元配列
連立一次方程式の解法(6) ガウスの消去法で連立方程式を解く外部関数: gauss.f メインプログラムの例 連立三元方程式を解く場合 integer::dim,mxdm,gsnelm,rc doubel precision::mat(5,5),vec(5) dim=3 mxdm=5 mat(1,1)=1.0d+0 mat(1,2)=3.0d+0 ・・・ mat(3,3)=2.0d+0 vec(1)=12.0d0 ・・・ rc=gsnelm(mat,vec,dim,mxdm) ・・・ if (rc==0) then print *,’x(1)=‘,vec(1) print *,’x(2)=‘,vec(2) ・・・ endif ・・・ 必ず一致させる!