2017-06-08 1 views
1

を示して、私は次のコードを持っている:。-1#Q0はランダム

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

ヒント:合計 'のポストの定義と初期化、デルタ[]' – chux

+0

https://stackoverflow.com/questions/5939573/what-float-value-makes-sprintf-s-produce-1-qo –

+0

ですgdbを使用する絶好の機会です。 – Perennial

答えて

2

このコードは完全ではありません。なぜ宣言をすべての変数から除外しましたか?彼らは「重要ではないから?」これらの宣言重要です

注意。

私が言うことができないが、私はdが0に設定されておらず、スタックから0xFFFFFFFFのを拾っていると予測しています。浮動小数点数ではありません。計算のNaN値は常にNaN結果になります。

+0

私は宣言で投稿を更新しました – mari

+0

「sum」は0に設定されていませんでした。ありがとう! – mari

関連する問題