Fix least_squares xtol result
This commit is contained in:
@@ -416,6 +416,8 @@ def least_squares(
|
|||||||
|
|
||||||
# Check termination condition on step norm.
|
# Check termination condition on step norm.
|
||||||
if dx_norm < xtol * (xtol + np.linalg.norm(x)):
|
if dx_norm < xtol * (xtol + np.linalg.norm(x)):
|
||||||
|
x = xnew
|
||||||
|
r = rnew
|
||||||
status = Status.DX_TOL
|
status = Status.DX_TOL
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,17 @@ class MinimizeTest(absltest.TestCase):
|
|||||||
self.assertIn('norm(gradient) < tol', out.getvalue())
|
self.assertIn('norm(gradient) < tol', out.getvalue())
|
||||||
self.assertIn('exact minimum found', out.getvalue())
|
self.assertIn('exact minimum found', out.getvalue())
|
||||||
|
|
||||||
|
def test_xtol_returns_accepted_candidate(self) -> None:
|
||||||
|
def residual(x):
|
||||||
|
return x - 1.0
|
||||||
|
|
||||||
|
out = io.StringIO()
|
||||||
|
x, _ = minimize.least_squares(
|
||||||
|
np.array([0.0]), residual, xtol=2.0, gtol=0.0, output=out
|
||||||
|
)
|
||||||
|
np.testing.assert_array_equal(x, np.array([1.0]))
|
||||||
|
self.assertIn('norm(dx) < tol', out.getvalue())
|
||||||
|
|
||||||
def test_jac_callback(self) -> None:
|
def test_jac_callback(self) -> None:
|
||||||
def residual(x):
|
def residual(x):
|
||||||
return np.stack([1 - x[0, :], 10 * (x[1, :] - x[0, :] ** 2)])
|
return np.stack([1 - x[0, :], 10 * (x[1, :] - x[0, :] ** 2)])
|
||||||
|
|||||||
Reference in New Issue
Block a user