2016-04-27 27 views
1

Ich habe den folgenden Code für eine Rücksubstitution Algorithmus:C++ - Zurück Substitution via Boost-- Bad Index Fehler

#include <boost\numeric\ublas\matrix.hpp> 
typedef boost::numeric::ublas::matrix<double> dM; 
dM bSub(dM A, dM b) 
{ 
    unsigned int n = (int)b.size1(); 
    assert(b.size2() == 1); 
    assert(n == A.size1()); 
    dM x(n, 1); 
    for (unsigned i = (n - 1); i >= 0; --i) 
    { 
     double sum = 0.0; 
     for (unsigned j = (n - 1); j > i; --j) 
     { 
      sum += A(i, j)*x(j, 0); 
     } 
     x(i, 0) = (b(i, 0) - sum)/A(i, i); 
    } 

    return x; 
} 

Ein schlechter Indexfehler erscheint, wenn ich versuche, es zu laufen. Ich bin mir nicht ganz sicher, wo der Fehler liegt, da ich das Problem nicht finden kann, wenn ich den Algo manuell durchführe.

Ich habe auch versucht, die verschachtelte Schleife erhöht wird: for(unsigned j = 0; j < n; ++j). Auch hier habe ich den gleichen schlechten Indexfehler.

Basierend auf dem Debugger, ich denke, das Problem hat zu tun mit i irgendwie auf einen Wert von 4294967295, ich bin nicht sicher, wo diese Zahl kommen könnte, da es nicht wirklich in andere Teile meines Codes passt.

Schließlich habe ich auch ein Vorwärts-Substitution algo, indem eine sehr ähnliche Struktur, geschrieben, die ohne Probleme läuft.

jemand eine Idee, was los ist?

Antwort

3

Die Bedingung i>=0 ist immer gilt für unsigned Arten von i.

Wenn Sie mit Warnungen (-Wall -Wextra -pedantic auf GCC/Clang) kompilieren dann der Compiler würde Ihnen sagen.

+0

Ah ich sehe, danke! –