C++ - 通过 Boost 进行反向替换 - 错误的索引错误

标签 c++ algorithm boost linear-algebra numerical-analysis

我有以下用于反向替换算法的代码:

#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,我不确定该数字可能来自何处,因为它并不适合我代码的其他部分。

最后,我还写了一个前向替换算法,使用非常相似的结构,运行没有问题。

有人知道发生了什么事吗?

最佳答案

条件 i>=0 对于 iunsigned 类型总是为真。

如果您编译时带有警告(-Wall -Wextra -pedantic 在您的 GCC/Clang 上),那么编译器会告诉您这一点。

关于C++ - 通过 Boost 进行反向替换 - 错误的索引错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36902407/

相关文章:

c++ - (c++) 如何有效地制作升序(dyn.solution)

c++ - 打开带有零填充 IP 字符串的 boost 套接字

c++ - 命名模板参数是在最新标准中还是在现代编译器中实现的?

c++ - 使用带有安全字符串的openssl加密文件

c++ - 根据静态/非静态组织加载/保存功能的最佳方式

string - 将字符串转换为插入次数最少的回文

c++ - 家谱的数据结构

c++ - 从 Boost Pareto 分布中随机生成的数字

c++ - 在 boost 元组、zip_iterator 等上使用 std::get 和 std::tie

c++ - 如何使用 ShellExecute 在 Windows 中使用 C++ 打开 html 文件?