fork download
  1. #include <stdio.h>
  2.  
  3. #define N 2
  4.  
  5. void solveLinearEquations(double a[N][N+1]) {
  6. double x[N];
  7. int i, j, k;
  8.  
  9. // ガウス消去法で方程式を解く
  10. for (i = 0; i < N; i++) {
  11. // ピボット選択と正規化
  12. for (k = i + 1; k < N; k++) {
  13. double factor = a[k][i] / a[i][i];
  14. for (j = i; j <= N; j++) {
  15. a[k][j] -= factor * a[i][j];
  16. }
  17. }
  18. }
  19.  
  20. // 後退代入法で解を計算
  21. for (i = N - 1; i >= 0; i--) {
  22. x[i] = a[i][N];
  23. for (j = i + 1; j < N; j++) {
  24. x[i] -= a[i][j] * x[j];
  25. }
  26. x[i] /= a[i][i];
  27. }
  28.  
  29. // 結果の出力
  30. for (i = 0; i < N; i++) {
  31. printf("x[%d] = %.2f\n", i + 1, x[i]);
  32. }
  33. }
  34.  
  35. int main(void) {
  36. // 連立方程式の係数行列
  37. double a[N][N + 1] = {
  38. {1.0, 1.0, 8.0}, // x + y = 8
  39. {230.0, 310.0, 2080.0} // 230x + 310y = 2080
  40. };
  41.  
  42. // 解の計算
  43. solveLinearEquations(a);
  44.  
  45. return 0;
  46. }
  47.  
Success #stdin #stdout 0.01s 5268KB
stdin
Standard input is empty
stdout
x[1] = 5.00
x[2] = 3.00