for (i = N - 1; i >= 0; i--) { d = a[i][N]; for (j = i + 1; j < N; j++) d -= a[i][j] * a[j][N]; a[i][N] = d / a[i][i]; }
を皆さんの力を借りて以下のように分解しました。そこで疑問がわいたのですが、
//for (i = N - 1; i >= 0; i--) { i = N - 1; //i == 3 d = a[i][N]; //for (j = i + 1; j < N; j++) { j = i + 1; //j == 4 //} a[i][N] = d / a[i][i]; i--; //i == 2 d = a[i][N]; //for (j = i + 1; j < N; j++) { j = i + 1; //j == 3 d -= a[i][j] * a[j][N]; //} a[i][N] = d / a[i][i]; i--; //i == 1 d = a[i][N]; //for (j = i + 1; j < N; j++) { j = i + 1; //j == 2 d -= a[i][j] * a[j][N]; j++; //j == 3 d -= a[i][j] * a[j][N]; //} a[i][N] = d / a[i][i]; i--; //i == 0 d = a[i][N]; //for (j = i + 1; j < N; j++) { j = i + 1; //j == 1 d -= a[i][j] * a[j][N]; j++; //j == 2 d -= a[i][j] * a[j][N]; j++; //j == 3 d -= a[i][j] * a[j][N]; //} a[i][N] = d / a[i][i]; //}
以下の部分のjは j++より1ずつ増えていくはずが減っていっているのは二重ループが働いているためでしょうか?
もちろんiを考慮してj=i+1となっているためj==4からj==3となるのはわかるのですが、では(j = i + 1; j < N; j++)のj++の意味は何なのかと混乱しています。
iはi = N - 1よりi == 3となりfor (i = N - 1; i >= 0; i--) のi--によりi == 2となるのに、やはり二重ループが原因なのでしょうか?
どうかわかりやすく解説していただけないでしょうか?
どうか絶対に理解したいのでよろしくお願いいたします。
//for (i = N - 1; i >= 0; i--) { i = N - 1; //i == 3 d = a[i][N]; //for (j = i + 1; j < N; j++) { j = i + 1; //j == 4 //} a[i][N] = d / a[i][i]; i--; //i == 2 d = a[i][N]; //for (j = i + 1; j < N; j++) { j = i + 1; //j == 3 d -= a[i][j] * a[j][N]; //}
8/17<編集>
質問ではないのですが、以下のような三重ループのプログラムを練習したいと思うのですが似たようなプログラムを載せて頂けないでしょうか?出来れば詳しい解説なども表示して頂けるとありがたいです。
for (i = 0; i < N - 1; i++) { for (j = i + 1; j <= N - 1; j++) { for (k = i + 1; k <= N - 1; k++) { A[j][k] = A[j][k] - A[i][k] * A[j][i] / A[i][i]; } b[j] = b[j] - b[i] * A[j][i] / A[i][i]; } }
回答2件
あなたの回答
tips
プレビュー