我有以下代码:
float w[n][n] = {
{0, 0, 0.5, -1, 0, 0, 0},
{0, 0, 1.5, -2, 0, 0, 0},
{0, 0, 0, 0, 1, -1, 0},
{0, 0, 0, 0, 3, -4, 0},
{0, 0, 0, 0, 0, 0, 1},
{0, 0, 0, 0, 0, 0, -3}
};
float x[ne] = {2, -1};
float d = 1;
float alpha = 0.1;
float in[n];
float delta[n];
float a[n];
float sum;
for(j = ne; j <= n; j++) {
for(i = 0; i <= n; i++) {
in[j] += w[i][j] * a[i];
}
a[j] = g(in[j]);
}
for(i = 0; i < n; i++) {
printf("a[%d] = %.3f\n", i+1, a[i]);
}
delta[n-1] = d - a[n-1];
for(i = n-2; i >= ne; i--) {
for(j = 0; j <= n; j++) {
sum += w[i][j] * delta[j];
}
delta[i] = g(in[i]) * (1 - g(in[i])) * sum;
printf("delta[%d] = %.3f\n", i+1, delta[i]);
sum = 0;
}
printf("\n\n");
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
if (w[i][j] != 0) {
w[i][j] = w[i][j] + alpha * a[i] * delta[j];
printf("w[%d][%d] = %.3f\n", i+1, j+1, w[i][j]);
}
}
}
我不断得到这个输出的一些变化:
a[1] = 2.000
a[2] = -1.000
a[3] = 0.378
a[4] = 0.500
a[5] = 0.867
a[6] = 0.085
a[7] = 0.649
delta[6] = -1.#QO
delta[5] = -1.#QO
delta[4] = -1.#QO
delta[3] = -1.#QO
w[1][3] = -1.#QO
w[1][4] = -1.#QO
w[2][3] = -1.#QO
w[2][4] = -1.#QO
w[3][5] = -1.#QO
w[3][6] = -1.#QO
w[4][5] = -1.#QO
w[4][6] = -1.#QO
w[5][7] = 1.030
w[6][7] = -2.997
每次编译时都出现在不同的地方,知道第一次给我正确的答案,我不知道出了什么问题?
答案 0 :(得分:2)
该代码不完整。为什么要省略所有变量的声明?因为他们并不重要?&#34;
请注意,这些声明非常重要。
我无法告诉,但我预测d
未设置为0并从堆栈中获取0xFFFFFFFF。浮点数不是数字。计算中的NaN值始终会导致NaN结果。