我使用VS2017工作室社区。 我想要替换已经向前消除的矩阵。所以我做了相应的模板功能。
template<typename element_type>
inline void backwardSubstitution(std::vector<std::vector<element_type>> & mat,
std::vector<element_type>&sol) {
sol.resize(mat.size());
unsigned int col_size = mat[0].size();
double numerator ;
double multiplier;
for (unsigned int col_id = col_size - 1; col_id > -1; --col_id) {
//INNER LOOP!!!!!!!!!!!!!!!!
for (unsigned int row_id = mat.size(); (row_id < col_id + 1) && row_id > -1; --row_id) {
if (row_id == col_id) {
numerator = mat[row_id][col_id];
mat[row_id][col_id] = 1.;
mat[row_id][col_size] /= numerator;
}
else
{
multiplier = -mat[row_id][col_id];
mat[row_id][col_id] = 0.;
mat[row_id][col_size] += multiplier;
}
sol[row_id] = mat[row_id][col_size];
}
}
return;
}//Point to which VS2017 jumps
我用矩阵测试了它。
std::vector<std::vector<double>> small_mat3 = {
{ 144.0000, 12.0000, 1.0000, 9.0000 },
{ 0 , 2.9167, 0.8264, 5.4375 },
{ 0 , 0,-0.2000,-0.9714 },
};
std::vector<double> sol;
backwardSubstitution(small_mat3, sol);
std::cout << std::endl;
print(small_mat3);//print function I defined.
for (double element : sol) {
std::cout << element << std::endl;
}
结果如下:
1)small_mat3:和以前一样。
144 12 1 9
0 2.9167 0.8264 5.4375
0 0 -0.2 -0.9714
2)sol:与backSubstitution()中初始化相同。
0
0
0
什么都没发生。所以,我将函数行标记为断点并开始调试。当步骤经过第一个循环时,也就是说,当它遇到INNER LOOP时,我的VS2017只是在返回命令后立即指向。 我曾犯过类似的错误,然后我被告知条件总是没有实现。但我面临的当前问题似乎不是那样的事情。