任何人都知道为什么在i
的第一次迭代中,(即外循环),没有通过
内循环?
想:也许它可能与signed i
和unsigned j
代码:
template <class T>
Matrix<T> LinearEquations<T>::backSubstitution(Matrix<T>& a, Matrix<T>& b){
Matrix<T> s(b);
for(signed i = a.getRows()-1; i > -1; --i){
//cout << "Debug: i = " << i << endl;
//if(i == a.getRows()-1) continue;
for(unsigned j = i+1; j < a.getRows(); ++j){
//cout << "Debug: i = " << i << ", j = " << j << endl;
s(i, 0) = s(i, 0) - (a(i, j) * s(j, 0));
}
//cout << "Debug: Hello world" << endl;
s(i, 0) = s(i, 0) / a(i, i);
//cout << "Debug: i = " << i << endl;
//cout << "Debug: Hello world" << endl;
}
return s;
}
答案 0 :(得分:2)
考虑你的代码:
for(signed i = a.getRows()-1; i > -1; --i){
for(unsigned j = i+1; j < a.getRows(); ++j){
在第一次迭代期间,j
将设置为a.getRows()-1+1
。显然,a.getRows() < a.getRows()
并不成立,因此内循环的主体不会被执行。
答案 1 :(得分:0)
假设a.getRows()
返回3
。然后i
以2
开头。然后j
以3
开头。由于测试条件最初为假,循环for (j = 3; j < 3; ++j)
执行零次。
类似的逻辑适用于其他值,除非a.getRows() - 1
超出signed int
的范围。