алгоритм — обратная замена через Boost — ошибка неверного индекса

У меня есть следующий код для алгоритма обратной замены:

#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;
}

При попытке запуска появляется неверная ошибка индекса. Я не совсем уверен, где ошибка, потому что я не могу найти проблему, когда я вручную прохожу алгоритм.

Я также попытался увеличить вложенный цикл: for(unsigned j = 0; j < n; ++j), Я опять сталкиваюсь с той же ошибкой индекса.

Основываясь на отладчике, я думаю, что проблема связана с i каким-то образом принимая значение 4294967295, я не уверен, откуда может взяться это число, поскольку оно не вписывается в другие части моего кода.

Наконец, я также написал алгоритм прямой замены, используя очень похожую структуру, которая работает без проблем.

У кого-нибудь есть идея, что происходит?

1

Решение

Состояние i>=0 является всегда верно для unsigned типы i,

Если вы компилируете с предупреждениями (-Wall -Wextra -pedantic на вашем GCC / Clang), то компилятор скажет вам это.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]