ガウスの消去法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kohaA
記事: 10
登録日時: 10年前

ガウスの消去法

#1

投稿記事 by kohaA » 10年前

実行してもバスエラー(コアダンプ)となってしまいます
どこを修正したらいいのかご教授いただけたら

コード:

#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]);
      }
}
最後に編集したユーザー kohaA on 2015年6月15日(月) 14:24 [ 編集 2 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ガウスの消去法

#2

投稿記事 by みけCAT » 10年前

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

31行目の a[j] = a[j] - w*a[k][j];
で確保された領域の範囲外にアクセスすることがありそうです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kohaA
記事: 10
登録日時: 10年前

Re: ガウスの消去法

#3

投稿記事 by kohaA » 10年前

ありがとうございます
l11~l15の範囲を変えたら動きました!

閉鎖

“C言語何でも質問掲示板” へ戻る