2017-06-08 3 views
1

Ich habe den folgenden Code:-1 # Q0 zeigt sich zufällig

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]); 
     } 
    } 
} 

Ich halte eine gewisse Variation dieser Ausgabe bekommen:

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 

Es zeigt an verschiedenen Orten auf immer wenn ich kompilieren, Ich wusste nicht, dass es beim ersten Mal, als es mir die richtige Antwort gab, nicht richtig war.

+0

Hinweis: Post Definition und Initialisierung von 'Summe, Delta []' – chux

+0

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

+0

Dies ist eine perfekte Gelegenheit, gdb zu verwenden. – Perennial

Antwort

2

Dieser Code ist nicht vollständig. Warum haben Sie die Deklarationen alle Variablen weggelassen? Weil sie "nicht wichtig sind?"

Beachten Sie, dass diese Deklarationen sind wichtig.

Ich kann nicht sagen, aber ich sage voraus, dass d nicht auf 0 gesetzt ist und nimmt 0xFFFFFFFF vom Stapel ab. Was ist keine Zahl in Fließkommazahl. Ein NaN-Wert in einer Berechnung führt immer zu NaN-Ergebnissen.

+0

Ich habe den Beitrag mit den Deklarationen – mari

+0

aktualisiert Es war die 'Summe', die nicht auf 0 gesetzt wurde, danke! – mari

Verwandte Themen