scipy.sparse.linalg.

lsmr#

scipy.sparse.linalg.lsmr(A, b, damp=0.0, atol=1e-06, btol=1e-06, conlim=100000000.0, maxiter=None, показать=False, x0=None)[источник]#

Итеративный решатель для задач наименьших квадратов.

lsmr решает систему линейных уравнений Ax = b. Если система несовместна, она решает задачу наименьших квадратов min ||b - Ax||_2. A является прямоугольной матрицей размерности m на n, где допустимы все случаи: m = n, m > n или m < n. b является вектором длины m. Матрица A может быть плотной или разреженной (обычно разреженной).

Параметры:
A{sparse array, ndarray, LinearOperator}

Матрица A в линейной системе. Альтернативно, A может быть линейным оператором, который может производить Ax и A^H x используя, например, scipy.sparse.linalg.LinearOperator.

barray_like, shape (m,)

Вектор b в линейной системе.

dampfloat

Коэффициент демпфирования для регуляризованных наименьших квадратов. lsmr решает регуляризованную задачу наименьших квадратов:

min ||(b) - (  A   )x||
    ||(0)   (damp*I) ||_2

где damp — скаляр. Если damp равен None или 0, система решается без регуляризации. По умолчанию 0.

atol, btolfloat, опционально

Допуски остановки. lsmr продолжает итерации до тех пор, пока некоторый оценка обратной ошибки не станет меньше некоторой величины, зависящей от atol и btol. Пусть r = b - Ax будет вектором невязки для текущего приближенного решения x. Если Ax = b кажется последовательным, lsmr завершается, когда norm(r) <= atol * norm(A) * norm(x) + btol * norm(b). В противном случае, lsmr завершается, когда norm(A^H r) <= atol * norm(A) * norm(r). Если оба допуска равны 1.0e-6 (по умолчанию), итоговый norm(r) должна быть точной примерно до 6 знаков. (Конечный x обычно будет иметь меньше верных цифр, в зависимости от cond(A) и размер LAMBDA.) Если atol или btol если None, будет использовано значение по умолчанию 1.0e-6. В идеале они должны быть оценками относительной ошибки в элементах A и b соответственно. Например, если элементы из A иметь 7 верных цифр, установить atol = 1e-7. Это предотвращает выполнение алгоритмом лишней работы за пределами неопределённости входных данных.

conlimfloat, опционально

lsmr завершается, если оценка cond(A) превышает conlim. Для совместимых систем Ax = b, conlim может быть до 1.0e+12 (например). Для задач метода наименьших квадратов, conlim должно быть меньше 1.0e+8. Если conlim равно None, значение по умолчанию — 1e+8. Максимальная точность может быть достигнута установкой atol = btol = conlim = 0, но количество итераций может быть чрезмерным. По умолчанию 1e8.

maxiterint, необязательный

lsmr завершается, если количество итераций достигает maxiter. По умолчанию maxiter = min(m, n). Для плохо обусловленных систем большее значение maxiter может быть необходимо. По умолчанию False.

показатьbool, необязательно

Выводить логи итераций, если show=True. По умолчанию False.

x0array_like, shape (n,), optional

Начальное предположение x, если None, используются нули. По умолчанию None.

Добавлено в версии 1.0.0.

Возвращает:
xndarray из float

Возвращено решение методом наименьших квадратов.

istopint

istop указывает причину остановки:

istop   = 0 means x=0 is a solution.  If x0 was given, then x=x0 is a
            solution.
        = 1 means x is an approximate solution to A@x = B,
            according to atol and btol.
        = 2 means x approximately solves the least-squares problem
            according to atol.
        = 3 means COND(A) seems to be greater than CONLIM.
        = 4 is the same as 1 with atol = btol = eps (machine
            precision)
        = 5 is the same as 2 with atol = eps.
        = 6 is the same as 3 with CONLIM = 1/eps.
        = 7 means ITN reached maxiter before the other stopping
            conditions were satisfied.
itnint

Количество использованных итераций.

normrfloat

norm(b-Ax)

normarfloat

norm(A^H (b - Ax))

normafloat

norm(A)

condafloat

Число обусловленности A.

normxfloat

norm(x)

Примечания

Добавлено в версии 0.11.0.

Ссылки

[1]

D. C.-L. Fong и M. A. Saunders, “LSMR: An iterative algorithm for sparse least-squares problems”, SIAM J. Sci. Comput., vol. 33, pp. 2950-2971, 2011. arXiv:1006.0758

Примеры

>>> import numpy as np
>>> from scipy.sparse import csc_array
>>> from scipy.sparse.linalg import lsmr
>>> A = csc_array([[1., 0.], [1., 1.], [0., 1.]], dtype=float)

Первый пример имеет тривиальное решение [0, 0]

>>> b = np.array([0., 0., 0.], dtype=float)
>>> x, istop, itn, normr = lsmr(A, b)[:4]
>>> istop
0
>>> x
array([0., 0.])

Код остановки istop=0 возвращённое значение указывает, что вектор нулей был найден как решение. Возвращённое решение x действительно содержит [0., 0.]. Следующий пример имеет нетривиальное решение:

>>> b = np.array([1., 0., -1.], dtype=float)
>>> x, istop, itn, normr = lsmr(A, b)[:4]
>>> istop
1
>>> x
array([ 1., -1.])
>>> itn
1
>>> normr
4.440892098500627e-16

Как указано istop=1, lsmr найдено решение, удовлетворяющее пределам допуска. Данное решение [1., -1.] очевидно решает уравнение. Остальные возвращаемые значения включают информацию о количестве итераций (itn=1) и оставшаяся разница левой и правой частей решенного уравнения. Последний пример демонстрирует поведение в случае, когда нет решения уравнения:

>>> b = np.array([1., 0.01, -1.], dtype=float)
>>> x, istop, itn, normr = lsmr(A, b)[:4]
>>> istop
2
>>> x
array([ 1.00333333, -0.99666667])
>>> A.dot(x)-b
array([ 0.00333333, -0.00333333,  0.00333333])
>>> normr
0.005773502691896255

istop указывает, что система несовместна и, следовательно, x скорее приближённое решение соответствующей задачи наименьших квадратов. normr содержит минимальное найденное расстояние.