fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main(void) {
  5. int i,j,k, n = 4;
  6. double a[4][4] = { { 4, 3, 2, 1},
  7. { 2, 5, -3, -2},
  8. { 1, -4, 8, -1},
  9. { -3, 2, -4, 5} };
  10. double b[4] = { 20, -5, 13, 9};
  11. double x[4] = {0};
  12. double tmp[4] = {0};
  13. double sum, delta;
  14.  
  15. for (k = 1; ; ++k) {
  16. /* ヤコビ法 */
  17. for (i = 0; i < n; ++i) {
  18. sum = 0.0;
  19.  
  20. /* >>> 例題2からの変更部分 */
  21. for (j = 0; j < i; ++j) {
  22. sum += a[i][j] * tmp[j];
  23. }
  24.  
  25. ++j; /* i == j を 飛ばす */
  26.  
  27. for (; j < n; ++j) {
  28. sum += a[i][j] * x[j];
  29. }
  30. /* <<< ここまで */
  31.  
  32. tmp[i] = (b[i] - sum) / a[i][i];
  33. }
  34.  
  35. /* 値の更新 */
  36. delta = 0.0;
  37. for (i = 0; i < n; ++i) {
  38. delta += (x[i] - tmp[i]) + (x[i] - tmp[i]);
  39. x[i] = tmp[i];
  40. }
  41.  
  42. /* 結果の出力 */
  43. printf("k=%d,x1=%lf,x2=%lf,x3=%lf,x4=%lf\n", k, x[0], x[1], x[2], x[3]);
  44.  
  45. if (sqrt(delta) < 1e-6) {
  46. break;
  47. }
  48. }
  49.  
  50. return 0;
  51. }
  52.  
Success #stdin #stdout 0s 2052KB
stdin
Standard input is empty
stdout
k=1,x1=5.000000,x2=-3.000000,x3=-0.500000,x4=5.600000
k=2,x1=6.100000,x2=-1.500000,x3=0.812500,x4=6.710000
k=3,x1=4.041250,x2=0.555000,x3=2.236094,x4=5.791625
k=4,x1=2.017797,x2=1.851188,x3=3.022322,x4=4.688061
k=5,x1=0.928433,x2=2.317245,x3=3.253576,x4=4.033023
k=6,x1=0.627023,x2=2.314545,x3=3.208023,x4=3.816814
k=7,x1=0.705876,x2=2.169189,x3=3.098461,x4=3.834620
k=8,x1=0.865223,x2=2.046835,x3=3.019592,x4=3.916073
k=9,x1=0.976059,x2=1.987761,x3=2.986382,x4=3.979637
k=10,x1=1.021079,x2=1.975253,x3=2.982446,x4=4.008503
k=11,x1=1.025212,x2=1.982784,x3=2.989304,x4=4.013456
k=12,x1=1.014896,x2=1.993006,x3=2.996323,x4=4.008794
k=13,x1=1.004885,x2=1.999357,x3=3.000167,x4=4.003322
k=14,x1=0.999568,x2=2.001602,x3=3.001270,x4=4.000116
k=15,x1=0.998134,x2=2.001555,x3=3.001025,x4=3.999079
k=16,x1=0.998552,x2=2.000826,x3=3.000479,x4=3.999184
k=17,x1=0.999345,x2=2.000223,x3=3.000091,x4=3.999591
k=18,x1=0.999890,x2=1.999935,x3=2.999930,x4=3.999904
k=19,x1=1.000107,x2=1.999877,x3=2.999913,x4=4.000044
k=20,x1=1.000125,x2=1.999915,x3=2.999948,x4=4.000067
k=21,x1=1.000073,x2=1.999966,x3=2.999982,x4=4.000043
k=22,x1=1.000023,x2=1.999997,x3=3.000001,x4=4.000016
k=23,x1=0.999997,x2=2.000008,x3=3.000006,x4=4.000000
k=24,x1=0.999991,x2=2.000008,x3=3.000005,x4=3.999995
k=25,x1=0.999993,x2=2.000004,x3=3.000002,x4=3.999996
k=26,x1=0.999997,x2=2.000001,x3=3.000000,x4=3.999998
k=27,x1=0.999999,x2=2.000000,x3=3.000000,x4=4.000000
k=28,x1=1.000001,x2=1.999999,x3=3.000000,x4=4.000000
k=29,x1=1.000001,x2=2.000000,x3=3.000000,x4=4.000000
k=30,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=31,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=32,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=33,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=34,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=35,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=36,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=37,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=38,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=39,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=40,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=41,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=42,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=43,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=44,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=45,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=46,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=47,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=48,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=49,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=50,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=51,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000
k=52,x1=1.000000,x2=2.000000,x3=3.000000,x4=4.000000