我正在尝试使用double值进行Jacobi迭代。以下是计算片段:
int current = 0, next = 1, k, temp;
for (k = 0; k < T; k++) {
for (i = 1; i < N-1; i++)
for (j = 1; j < N-1; j++)
h[next][i][j] = 0.25 * (h[current][i-1][j] + h[current][i+1][j] +
h[current][i][j-1] + h[current][i][j+1]);
temp = current; // swap values of current and next
current = next;
next = temp;
}
所有的初始值都在20到100之间,所以我应该在这个范围之间得到答案,但是我得到了很多小于20的值。这些浮点值有什么我不知道的吗?
答案 0 :(得分:2)
我创建了一个2x10x10矩阵,并在第一个平面上加载了100个值,范围为20..100。我打印出来了。
81.00 66.00 49.00 97.00 52.00 32.00 89.00 67.00 43.00 63.00
32.00 25.00 73.00 91.00 34.00 90.00 87.00 96.00 41.00 72.00
64.00 24.00 50.00 91.00 35.00 32.00 33.00 93.00 66.00 81.00
51.00 37.00 59.00 60.00 30.00 50.00 90.00 91.00 60.00 31.00
33.00 89.00 73.00 30.00 55.00 49.00 34.00 31.00 22.00 44.00
77.00 24.00 49.00 40.00 97.00 40.00 53.00 77.00 47.00 36.00
66.00 40.00 98.00 29.00 82.00 52.00 46.00 20.00 38.00 84.00
47.00 83.00 21.00 98.00 51.00 26.00 33.00 77.00 81.00 91.00
20.00 92.00 90.00 55.00 81.00 30.00 92.00 25.00 99.00 25.00
20.00 95.00 22.00 46.00 38.00 29.00 89.00 96.00 71.00 95.00
然后我运行了一次循环并打印出新的矩阵。结果是:
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 48.75 53.75 73.75 67.00 46.25 77.00 72.00 69.25 0.00
0.00 44.00 61.75 59.00 46.75 52.00 75.50 71.50 68.75 0.00
0.00 55.75 55.00 52.50 50.00 50.25 52.00 68.50 52.50 0.00
0.00 41.75 56.75 57.00 51.50 44.75 55.75 56.00 45.50 0.00
0.00 63.75 58.75 51.25 54.25 62.75 49.25 37.75 43.25 0.00
0.00 67.75 34.75 79.50 57.25 48.50 39.50 59.50 58.00 0.00
0.00 50.00 92.25 39.00 71.75 41.50 60.25 39.75 76.25 0.00
0.00 72.00 47.50 78.75 43.50 57.00 44.25 91.00 50.50 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
在平均过程中使用圆边缘的零值后,值可以低于20.在第10次迭代后,矩阵为:
81.00 66.00 49.00 97.00 52.00 32.00 89.00 67.00 43.00 63.00
32.00 18.37 33.83 29.56 33.95 35.10 30.59 34.63 22.12 72.00
64.00 30.39 39.09 46.96 44.80 43.59 46.86 43.94 29.90 81.00
51.00 28.89 43.03 45.77 48.12 49.18 46.14 41.18 32.27 31.00
33.00 32.54 43.42 46.96 51.67 48.78 48.37 43.41 28.15 44.00
77.00 32.32 43.48 50.88 47.04 52.33 46.00 43.74 32.51 36.00
66.00 28.82 47.41 40.65 51.60 44.21 48.91 43.45 33.35 84.00
47.00 34.35 31.64 46.19 37.77 45.88 42.86 49.11 31.50 91.00
20.00 13.57 32.95 22.67 31.39 30.35 34.15 31.62 25.91 25.00
20.00 95.00 22.00 46.00 38.00 29.00 89.00 96.00 71.00 95.00
那里有一个值18.37和一个值13.57。因此,您需要查看矩阵的h[1]
平面的边界,以确定其中应包含的值。边框周围的值不会更改,但如果它们开始为零,则会降低平均值。