Exemplo n.º 1
0
def test_subsolvers_L2(rng, logger):
    pytest.importorskip('scipy', minversion='0.11')  # version for lsmr

    ref_solver = lstsq.Cholesky()
    solvers = [
        lstsq.Conjgrad(),
        lstsq.BlockConjgrad(),
        lstsq.ConjgradScipy(),
        lstsq.LSMRScipy()
    ]

    A, B = get_system(m=2000, n=1000, d=10, rng=rng)
    sigma = 0.1 * A.max()

    with Timer() as t0:
        x0, _ = ref_solver(A, B, sigma)

    xs = np.zeros((len(solvers), ) + x0.shape)
    for i, solver in enumerate(solvers):
        with Timer() as t:
            xs[i], info = solver(A, B, sigma)
        logger.info('solver: %r' % solver)
        logger.info('duration: %0.3f', t.duration)
        logger.info('duration relative to reference solver: %0.2f',
                    (t.duration / t0.duration))
        logger.info('info: %s', info)

    for solver, x in zip(solvers, xs):
        assert np.allclose(x0, x, atol=1e-5,
                           rtol=1e-3), ("Solver %s" % solver.__name__)
Exemplo n.º 2
0
def test_subsolvers_L2(rng, allclose):
    pytest.importorskip("scipy", minversion="0.11")  # version for lsmr

    ref_solver = lstsq.Cholesky()
    solvers = [
        lstsq.Conjgrad(),
        lstsq.BlockConjgrad(),
        lstsq.ConjgradScipy(),
        lstsq.LSMRScipy(),
    ]

    A, B = get_system(m=2000, n=1000, d=10, rng=rng)
    sigma = 0.1 * A.max()

    with Timer() as t0:
        x0, _ = ref_solver(A, B, sigma)

    xs = np.zeros((len(solvers), ) + x0.shape)
    for i, solver in enumerate(solvers):
        with Timer() as t:
            xs[i], info = solver(A, B, sigma)
        logging.info("solver: %r", solver)
        logging.info("duration: %0.3f", t.duration)
        logging.info("duration relative to reference solver: %0.2f",
                     (t.duration / t0.duration))
        logging.info("info: %s", info)

    for solver, x in zip(solvers, xs):
        assert allclose(x0, x, atol=1e-5,
                        rtol=1e-3), f"Solver {solver.__name__}"
Exemplo n.º 3
0
def test_scipy_solvers(rng, allclose):
    pytest.importorskip("scipy", minversion="0.11")  # version for lsmr

    A, b = get_system(1000, 100, 2, rng=rng)
    sigma = 0.1 * A.max()

    x0, i0 = lstsq.Cholesky()(A, b, sigma)
    logging.info("Cholesky rmse=%0.3f", i0["rmses"].mean())
    x1, i1 = lstsq.ConjgradScipy()(A, b, sigma)
    logging.info(
        "ConjgradScipy rmse=%0.3f, itns=%0.1f (%0.1f)",
        i1["rmses"].mean(),
        i1["iterations"].mean(),
        i1["iterations"].std(),
    )
    x2, i2 = lstsq.LSMRScipy()(A, b, sigma)
    logging.info(
        "LSMRScipy rmse=%0.3f, itns=%0.1f (%0.1f)",
        i2["rmses"].mean(),
        i2["iterations"].mean(),
        i2["iterations"].std(),
    )

    assert allclose(x0, x1, atol=2e-5, rtol=1e-3)
    assert allclose(x0, x2, atol=2e-5, rtol=1e-3)
Exemplo n.º 4
0
def test_scipy_solvers(rng):
    pytest.importorskip('scipy', minversion='0.11')  # version for lsmr

    A, b = get_system(1000, 100, 2, rng=rng)
    sigma = 0.1 * A.max()

    x0, _ = lstsq.Cholesky()(A, b, sigma)
    x1, _ = lstsq.ConjgradScipy()(A, b, sigma)
    x2, _ = lstsq.LSMRScipy()(A, b, sigma)
    assert np.allclose(x0, x1, atol=2e-5, rtol=1e-3)
    assert np.allclose(x0, x2, atol=2e-5, rtol=1e-3)
Exemplo n.º 5
0
def test_scipy_solvers(rng, logger):
    pytest.importorskip('scipy', minversion='0.11')  # version for lsmr

    A, b = get_system(1000, 100, 2, rng=rng)
    sigma = 0.1 * A.max()

    x0, i0 = lstsq.Cholesky()(A, b, sigma)
    logger.info("Cholesky rmse=%0.3f" % (i0['rmses'].mean(),))
    x1, i1 = lstsq.ConjgradScipy()(A, b, sigma)
    logger.info("ConjgradScipy rmse=%0.3f, itns=%0.1f (%0.1f)" % (
        i1['rmses'].mean(), i1['iterations'].mean(), i1['iterations'].std()))
    x2, i2 = lstsq.LSMRScipy()(A, b, sigma)
    logger.info("LSMRScipy rmse=%0.3f, itns=%0.1f (%0.1f)" % (
        i2['rmses'].mean(), i2['iterations'].mean(), i2['iterations'].std()))

    assert np.allclose(x0, x1, atol=2e-5, rtol=1e-3)
    assert np.allclose(x0, x2, atol=2e-5, rtol=1e-3)