#include <stdio.h> #define N 3 //the dimension of equation void vec_diff(float a[N], float b[N]){ /* Calcurate the difference of two vectors. Be caution that b[N] changes.*/ for (int i = 0; i < N; i++){ b[i] -= a[i]; } } int main(){ float m[N][N] = {{5,-1,-1}, {2,1,-3},{1,1,1}}; // The matrix float b[N] = {0,-5,6}; printf("The coefficient matrix is : \n"); for (int i = 0; i < N; i++){ for (int j = 0; j < N; j++){ printf("%1.f ", m[i][j]); if (j == N-1){ printf("\n"); } } } printf("\nUse Gauss method to solve equations : \n"); for (int i = 0; i < N; i++){ for (int j = i+1; j < N; j++){ float coef = m[j][i] / m[i][i]; float del[N]; for (int k = 0; k < N; k++){ del[k] = m[i][k] * coef; } vec_diff(del, m[j]); b[j] -= b[i] * coef; } } for (int i = N -1; i >= 0; i--){ float x = 1. / m[i][i]; m[i][i] *= x; b[i] *= x; for (int j = 0; j < i; j++){ b[j] -= b[i]*m[j][i]; m[j][i] = 0; } } for (int i = 0; i < N; i++){ for (int j = 0; j < N; j++){ printf("%1.f ", m[i][j]); if (j == N - 1){ printf("\n"); } } } for (int i = 0; i < N; i++){ printf("%f ", b[i]); } return 0; }
のプログラムの
#define N 3 //the dimension of equation void vec_diff(float a[N], float b[N]){ /* Calcurate the difference of two vectors. Be caution that b[N] changes.*/ for (int i = 0; i < N; i++){ b[i] -= a[i]; } }
の部分に関してなのですが、
関数vec_diff(float a[N],float b[N])とb[i]-=a[i];よりベクトルの引き算をfor (int i = 0; i < N; i++)より3回行っていることはわかるのですが、「何のため何を3回」行っているのかわかりません。
プログラムを読んでみたのですが、意図した3点の座標を入れるための準備のようなものとしかわかりませんでした。
こちらのサイトを参考にしました。
<編集7/6>
あの後b[i] -= a[i];の a[i]とb[i]の計算を表示しよとしたのですが、うまくいきません。
#include <stdio.h> #define N 3 //the dimension of equation void vec_diff(float a[N], float b[N]) { /* Calcurate the difference of two vectors. Be caution that b[N] changes.*/ for (int i = 0; i < N; i++) { b[i] -= a[i]; printf("である",b[i] -= a[i]);//付け加えた部分、b[i] -= a[i];の計算を表示しようとしたのですが、これをいれると計算は表示されないことはおろか間違った答えが出てきます。 } } int main() { float m[N][N] = { { 5,-1,-1 },{ 2,1,-3 },{ 1,1,1 } }; // The matrix float b[N] = { 0,-5,6 }; printf("The coefficient matrix is : \n"); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { printf("%1.f ", m[i][j]); if (j == N - 1) { printf("\n"); } } } printf("\nUse Gauss method to solve equations : \n"); for (int i = 0; i < N; i++) { for (int j = i + 1; j < N; j++) { float coef = m[j][i] / m[i][i]; float del[N]; for (int k = 0; k < N; k++) { del[k] = m[i][k] * coef; } vec_diff(del, m[j]); b[j] -= b[i] * coef; } } for (int i = N - 1; i >= 0; i--) { float x = 1. / m[i][i]; m[i][i] *= x; b[i] *= x; for (int j = 0; j < i; j++) { b[j] -= b[i] * m[j][i]; m[j][i] = 0; } } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { printf("%1.f ", m[i][j]); if (j == N - 1) { printf("\n"); } } } for (int i = 0; i < N; i++) { printf("%f です", b[i]); } return 0; }
実行すると今のように出ます。
The coefficient matrix is : 5 -1 -1 2 1 -3 1 1 1 Use Gauss method to solve equations : であるであるであるであるであるであるであるであるである1 0 0 -2 1 0 2 -1 1 0.355863 です-0.271378 です2.050691 です
回答3件
あなたの回答
tips
プレビュー