数時間前に投稿したこちらの質問に載せた完成したプログラムをコンパクトにするためのアドバイスをいただきたく質問しました。
#include <stdio.h> #include <time.h> #define N 3 int main(void) { clock_t start, end; start = clock(); float a[N][N+1] = { {5,-1,-1,0}, { 2,1,-3,-5 }, { 1,1,1 ,6} }; // The matrix //前進消去 int i; float d = a[1][0] / a[0][0]; for (i = 0; i <= 3; i++) {//forを使う上で上限がなかったので3までが上限なのでi<=3と書いた。 a[1][i] = a[1][i] - a[0][i] * d; { printf("a[1][%d]=%fとなる\n", i,a[1][i]); } } float r; r = a[2][0] / a[0][0]; for (i = 0; i <= 3; i++) { a[2][i] = a[2][i] - a[0][i] * r; } int I; for (I = 0; I <= 3; I++) { printf("a[2][%d]=%fとなる\n", I,a[2][I]); } float z; z= a[2][1] / a[1][1]; int y; //iは1から3まで入るのでkに+1した形で入ってもらいiを利用する。kはforより3までとする。 for (y = 0; y <= 3; y++) { a[2][y] = a[2][y] - a[1][y] * z; printf("a[2][%d]=%fとなる\n", y, a[2][y]); } //前進消去終わり //後退代入 float g = a[2][3] / a[2][2]; printf("Z=%f\n", g); float h; h = a[1][3] / a[1][1] - a[1][2] / a[1][1]* a[2][3] / a[2][2]; printf("Y=%f\n", h); float j; j = h / a[0][0] + g / a[0][0]; printf("X=%f\n", j); end = clock(); printf("%f sec\n", (double)(end - start) / CLOCKS_PER_SEC); return 0; } //後退代入終わり
以上のプログラムをこちらのようにfor文かつ多元線形連立方程式でまとめるにはどのような工夫をすればよいのかわからず悩んでいます。答えではなく、アドバイスや自分ならこう考えるという説明を聞かせていただけないでしょうか?
for文を使う際のフローチャートの作り方など、アドバイスをお願いいたします。
以下のプログラムのようにforで綺麗にまとめるコツを教えてほしいです。
// 前進消去 for (k = 0; k < N -1; k++) { for (i = k + 1; i < N; i++) { d = a[i][k] / a[k][k]; for (j = k + 1; j <= N; j++) a[i][j] -= a[k][j] * d; } } // 後退代入 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文でまとめて多元線形連立方程式にはどのような工夫をすればよいのか?
こちらのサイトの
// 前進消去 for (k = 0; k < N -1; k++) { for (i = k + 1; i < N; i++) { d = a[i][k] / a[k][k]; for (j = k + 1; j <= N; j++) a[i][j] -= a[k][j] * d; } }
// 後退代入 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]; }
を参考に多元線形連立方程式を作ろうとしたのですが、紙に展開してみてもいまいちピンとくるものがなく、ただただ時間が過ぎます。どうか何かヒントというか、こうしてみれば見たいな感じのアドバイスを頂けないでしょうか?
誰かの書いたコードを読むときにはこうしたほうがいいよみたいなのでもいいです。
どうかよろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/28 14:18