【发布时间】:2015-04-14 07:13:24
【问题描述】:
如果标题有误,或者没有正确解释问题,请见谅。
我正在尝试计算矩阵的 LU 分解。给出矩阵 M:
M = [1 2 3],
[1 2 3],
[3 3 0]
现在我正在关注这里编写的一些代码:Link
它使用j i 来计算下层分解。当我尝试这种方法时,我不断收到“运行时错误时间:0 内存:3276 信号:11”
我不明白的是,当我在3x3 循环内输出i、j 时,我得到了:
i, j =
0 0 1 0 2 0
0 1 1 1 2 1
0 2 1 2 2 2
然后当输出j,i 的索引时,我得到:
j, i =
0 0 0 1 0 2
1 0 1 1 1 2
2 0 2 1 2 2
就[0][0][0][2].........[2][2] 的顺序而言,这似乎是正确的,那么为什么我不能在我的向量中访问它?
目前我写的代码是:
void lu_decomposition(const std::vector<std::vector<double> > &vals)
{
std::vector<std::vector<double> > lower(3);
for(unsigned i=0; (i < 3); i++)
{
lower[i].resize(3);
for(unsigned j=0; (j < 3); j++)
{
if (j < i)
{
lower[j][i] = 0; // This is ok
}else{
lower[j][i] = vals[j][i]; // This is the runtime error
}
}
std::cout << std::endl;
}
}
代码在ideone上也可见
【问题讨论】:
-
使用
vector::at()而不是vector::operator[](),你会得到一个运行时异常,告诉你哪里出错了,而不是在某个时候崩溃。或者启用编译器的标准库调试模式。
标签: c++ matrix vector memory-leaks