ページ 11

ガウスの消去法

Posted: 2015年6月15日(月) 10:47
by kohaA
実行してもバスエラー(コアダンプ)となってしまいます
どこを修正したらいいのかご教授いただけたら

コード:

#include<stdio.h>
#define n 3
int main(void)
{
 int i,j,k; 
double w;
double a[n][4] = {{6,5,4,8},
                  {12,13,10,16},
		 {18,21,17,27}};
  //前進消去
  for( k=0 ; k <= n-1 ; k++ ){
    for( i=k+1 ; i <= n ; i++ ){
      w = a[i][k] / a[k][k];
      for( j=k+1 ; j <= n+1 ; j++ ){
	a[i][j] = a[i][j] - w*a[k][j];
      }}}

  //後退代入
  for( i=n-1 ; i>=0 ; i--){
    w = a[i][n];
    for( j=i+1 ; j<n ; j++ ){
      w = w - a[i][j]*a[j][n];
      a[i][n] = w / a[i][i];
    }
  }
//結果を表示
      for(k=0;k<n;k++){
	printf("x%d=%f\n",k+1,a[k][n]);
      }
}

Re: ガウスの消去法

Posted: 2015年6月15日(月) 12:59
by みけCAT
コードはBBCodeを有効にした状態でcodeタグで囲み、かつ適切にインデントをしていただけると、見やすくてありがたいです。
kohaA さんが書きました:実行してもバスエラー(コアダンプ)となってしまいます
テストしていないので直接の原因かはわかりませんが、
27行目の w = a[k] / a[k][k];

31行目の a[j] = a[j] - w*a[k][j];
で確保された領域の範囲外にアクセスすることがありそうです。

Re: ガウスの消去法

Posted: 2015年6月15日(月) 14:34
by kohaA
ありがとうございます
l11~l15の範囲を変えたら動きました!