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
[2]LSMR Software, https://web.stanford.edu/group/SOL/software/lsmr/
Примеры
>>> 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 содержит минимальное найденное расстояние.