我想估计一下,我的解决方案有错误,比如说小于 1e-8。
通常,当残差“足够小”并且这已经是问题时,我会停止 Gauss-Seidel 算法。我怎么知道残差何时足够小,因为即使残差很小,解决方案仍然可能有太大的误差。所以这不是什么好方法。
你用什么作为停止标准?
在另一个网站 ( math-linux.com ) 上,我找到了一个停止标准: 但是,这背后的理论是什么?
顺便说一句,这是我在上一个项目中使用的代码,仅供参考,我是如何做到的:
void relax(double epsilon, vector<double> &x, SparseMatrix &A, const vector<double> &f) {
int maxIter = 100;
int iter = 0;
double residual = 1.0;
double minResidual 0.000001; //I also tried 1e-14;
while (iter < maxIter && residual >= minResidual) {
for (int i = 0; i < A.dim; ++i) {
double ls = A.lineScalar(i, x);
x[i] = (1.0/A(i,i)) * (f[i] - ls);
}
vector<double> temp = A.multiply(x);
residual = L2(temp - f);
}
}