Skip to content

Commit 8e8c0b7

Browse files
committed
Bug fix: no crash for zero vector in ResidualStopCriterion
1 parent bc0bd6e commit 8e8c0b7

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/Numerics.Tests/LinearAlgebraTests/Double/DenseMatrixTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
using System.Collections.Generic;
3232
using MathNet.Numerics.LinearAlgebra;
3333
using MathNet.Numerics.LinearAlgebra.Double;
34+
using MathNet.Numerics.LinearAlgebra.Double.Solvers;
35+
using MathNet.Numerics.LinearAlgebra.Solvers;
3436
using NUnit.Framework;
3537

3638
namespace MathNet.Numerics.Tests.LinearAlgebraTests.Double
@@ -209,5 +211,19 @@ public void MatrixToMatrixString()
209211
}
210212
}
211213
}
214+
215+
[Test]
216+
public void ResidualStopCriterionDoesNotCrashForZeroVector()
217+
{
218+
var A = new DenseMatrix(2, 2, new double[] { 1, 2, 3, 4 });
219+
var b = new DenseVector(2);
220+
var x = new DenseVector(2);
221+
222+
var iterator = new Iterator<double>(new ResidualStopCriterion<double>(1e-5));
223+
var solver = new BiCgStab();
224+
225+
solver.Solve(A, b, x, iterator, null);
226+
Assert.AreEqual(new DenseVector(2), x);
227+
}
212228
}
213229
}

src/Numerics/LinearAlgebra/Solvers/ResidualStopCriterion.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ public IterationStatus DetermineStatus(int iterationNumber, Vector<T> solutionVe
195195

196196
// ||r_i|| <= stop_tol * ||b||
197197
// Stop the calculation if it's clearly smaller than the tolerance
198-
if (residualNorm < stopCriterion)
198+
if (residualNorm <= stopCriterion)
199199
{
200200
if (_lastIteration <= iterationNumber)
201201
{

0 commit comments

Comments
 (0)