+
    0i"=                     b    R t R.t^ RIHtHtHtHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt R	R ltR# )
a  
Copyright (C) 2010 David Fong and Michael Saunders

LSMR uses an iterative method.

07 Jun 2010: Documentation updated
03 Jun 2010: First release version in Python

David Chin-lung Fong            clfong@stanford.edu
Institute for Computational and Mathematical Engineering
Stanford University

Michael Saunders                saunders@stanford.edu
Systems Optimization Laboratory
Dept of MS&E, Stanford University.

lsmr)zerosinf
atleast_1dresult_type)norm)sqrt)aslinearoperator)
_sym_orthoNc	                   \        V 4      p \        V4      pVP                  ^8  d   VP                  4       pR!p	Rp
Rp^p^ pV P                  w  r\        W.4      pVf   TpVf   \        W\        4      pM\        WV\        4      pV'       da   \        R4       \        R4       \        RV RV R24       \        RVR	 R
24       \        RVR RVR R
24       \        RVR RVR R
24       Tp\        V4      pVf   \        VV4      pVP                  4       pM<\        VP                  4       4      pVV P                  V4      ,
          p\        V4      pV^ 8  d.   ^V,          V,          pV P                  V4      p\        V4      pM\        VV4      p^ pV^ 8  d   ^V,          V,          p^ pVV,          pTp^p^p^p^ pVP                  4       p\        VV4      p Tp!^ p"^p#^ p$^ p%^ p&^ p'VV,          p(^ p)Rp*\        V(4      p+^p,^ p-^ p.^ p/V^ 8  d
   ^V,          p/Tp0VV,          p1V1^ 8X  d%   V'       d   \        V	^ ,          4       VV.VV0V1V+V,V-3# V^ 8X  d   ^ VR"&   VV.VV0V1V+V,V-3# V'       dc   \        R4       \        W4       ^p2VV,          p3VR RV^ ,          R 2p4RV0R RV1R 2p5RV2R RV3R 2p6\        RP                  V4V5V6.4      4       VV8  EdX   V^,           pVV) ,          pVV P                  V4      ,          p\        V4      pV^ 8  dU   V^V,          ,          pVV) ,          pVV P                  V4      ,          p\        V4      pV^ 8  d   V^V,          ,          p\!        VV4      w  p7p8p9Tp:\!        V9V4      w  p;p<pV<V,          p=V;V,          pTp>T&p?VV,          p@VV,          pA\!        VV,          V=4      w  pppVV,          p&V) V,          pV V@V,          V:V>,          ,          ) ,          p V V,          p VV&VV,          ,          V ,          ,          pVV=V,          ) ,          pVV,          pV7V!,          pBV8) V!,          pCV;VB,          pDV<) VB,          p!T%pE\!        V#V@4      w  pFpGpHVGV,          p%VFV,          p#VG) V",          VFVD,          ,           p"V?VEV$,          ,
          VH,          p$V&V%V$,          ,
          V#,          pIV'VCVC,          ,           p'\        V'V"VI,
          ^,          ,           V!V!,          ,           4      p0V(VV,          ,           p(\        V(4      p+V(VV,          ,           p(\#        V)V>4      p)V^8  d   \        V*V>4      p*\#        V)XA4      \        V*VA4      ,          p,\%        V4      p1\        V4      p-V0V,          p2V+V0,          ^ 8w  d   V1V+V0,          ,          p3M\&        p3^V,,          pJV2^V+V-,          V,          ,           ,          pKWCV+,          V-,          V,          ,           pLVV8  d   ^p.^XJ,           ^8:  d   ^p.^V3,           ^8:  d   ^p.^XK,           ^8:  d   ^p.XJV/8:  d   ^p.V3V8:  d   ^p.V2XL8:  d   ^p.V'       d   V^(8:  gU   V^
8:  gN   VV^
,
          8  g@   V^
,          ^ 8X  g2   XJRV/,          8:  g$   V3RV,          8:  g   V2RXL,          8:  g   V.^ 8w  dt   W8  d   ^ p\        R4       \        W4       V^,           pVR RV^ ,          R 2p4RV0R RV1R 2p5RV2R RV3R 2p6RV+R RV,R 2pM\        RP                  V4V5V6VM.4      4       V.^ 8  g   EK^   V'       d   \        R4       \        R4       \        V	V.,          4       \        RV.R RV0R 24       \        RV+R RV1R 24       \        RVR RV,R 24       \        R V-R 24       \        X4X54       \        X6XM4       VV.VV0V1V+V,V-3# )#aG  Iterative solver for least-squares problems.

lsmr solves the system of linear equations ``Ax = b``. If the system
is inconsistent, it solves the least-squares problem ``min ||b - Ax||_2``.
``A`` is a rectangular matrix of dimension m-by-n, where all cases are
allowed: m = n, m > n, or m < n. ``b`` is a vector of length m.
The matrix A may be dense or sparse (usually sparse).

Parameters
----------
A : {sparse array, ndarray, LinearOperator}
    Matrix A in the linear system.
    Alternatively, ``A`` can be a linear operator which can
    produce ``Ax`` and ``A^H x`` using, e.g.,
    ``scipy.sparse.linalg.LinearOperator``.
b : array_like, shape (m,)
    Vector ``b`` in the linear system.
damp : float
    Damping factor for regularized least-squares. `lsmr` solves
    the regularized least-squares problem::

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

    where damp is a scalar.  If damp is None or 0, the system
    is solved without regularization. Default is 0.
atol, btol : float, optional
    Stopping tolerances. `lsmr` continues iterations until a
    certain backward error estimate is smaller than some quantity
    depending on atol and btol.  Let ``r = b - Ax`` be the
    residual vector for the current approximate solution ``x``.
    If ``Ax = b`` seems to be consistent, `lsmr` terminates
    when ``norm(r) <= atol * norm(A) * norm(x) + btol * norm(b)``.
    Otherwise, `lsmr` terminates when ``norm(A^H r) <=
    atol * norm(A) * norm(r)``.  If both tolerances are 1.0e-6 (default),
    the final ``norm(r)`` should be accurate to about 6
    digits. (The final ``x`` will usually have fewer correct digits,
    depending on ``cond(A)`` and the size of LAMBDA.)  If `atol`
    or `btol` is None, a default value of 1.0e-6 will be used.
    Ideally, they should be estimates of the relative error in the
    entries of ``A`` and ``b`` respectively.  For example, if the entries
    of ``A`` have 7 correct digits, set ``atol = 1e-7``. This prevents
    the algorithm from doing unnecessary work beyond the
    uncertainty of the input data.
conlim : float, optional
    `lsmr` terminates if an estimate of ``cond(A)`` exceeds
    `conlim`.  For compatible systems ``Ax = b``, conlim could be
    as large as 1.0e+12 (say).  For least-squares problems,
    `conlim` should be less than 1.0e+8. If `conlim` is None, the
    default value is 1e+8.  Maximum precision can be obtained by
    setting ``atol = btol = conlim = 0``, but the number of
    iterations may then be excessive. Default is 1e8.
maxiter : int, optional
    `lsmr` terminates if the number of iterations reaches
    `maxiter`.  The default is ``maxiter = min(m, n)``.  For
    ill-conditioned systems, a larger value of `maxiter` may be
    needed. Default is False.
show : bool, optional
    Print iterations logs if ``show=True``. Default is False.
x0 : array_like, shape (n,), optional
    Initial guess of ``x``, if None zeros are used. Default is None.

    .. versionadded:: 1.0.0

Returns
-------
x : ndarray of float
    Least-square solution returned.
istop : int
    istop gives the reason for stopping::

      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.

itn : int
    Number of iterations used.
normr : float
    ``norm(b-Ax)``
normar : float
    ``norm(A^H (b - Ax))``
norma : float
    ``norm(A)``
conda : float
    Condition number of A.
normx : float
    ``norm(x)``

Notes
-----

.. versionadded:: 0.11.0

References
----------
.. [1] D. C.-L. Fong and 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/

Examples
--------
>>> 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)

The first example has the trivial solution ``[0, 0]``

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

The stopping code ``istop=0`` returned indicates that a vector of zeros was
found as a solution. The returned solution `x` indeed contains
``[0., 0.]``. The next example has a non-trivial solution:

>>> 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

As indicated by ``istop=1``, `lsmr` found a solution obeying the tolerance
limits. The given solution ``[1., -1.]`` obviously solves the equation. The
remaining return values include information about the number of iterations
(`itn=1`) and the remaining difference of left and right side of the solved
equation.
The final example demonstrates the behavior in the case where there is no
solution for the equation:

>>> 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` indicates that the system is inconsistent and thus `x` is rather an
approximate solution to the corresponding least-squares problem. `normr`
contains the minimal distance that was found.
z(   itn      x(1)       norm r    norm Arz% compatible   LS      norm A   cond A z2LSMR            Least-squares solution of  Ax = b
zThe matrix A has z
 rows and z columnszdamp = z20.14e
zatol = z8.2ez                 conlim = zbtol = z             maxiter = 8gg}Ô%IT6gz12.5ez10.3ez  z8.1e g?zLSMR finishedzistop =z    normr =z    normA =z    normAr =zitn   =z    condA =z    normx =)z9The exact solution is x = 0, or x = x0, if x0 was given  z:Ax - b is small enough, given atol, btol                  z:The least-squares solution is good enough, given atol     z:The estimate of cond(Abar) has exceeded conlim            z:Ax - b is small enough for this machine                   z:The least-squares solution is good enough for this machinez:Cond(Abar) seems to be too large for this machine         z:The iteration limit has been reached                       )r	   r   ndimsqueezeshapeminr   floatprintr   r   copymatvecrmatvecr   joinr
   maxabsr   )NAbdampatolbtolconlimmaxitershowx0msghdg1hdg2pfreqpcountmnminDimdtypeunormbxbetavalphaitnzetabaralphabarrhorhobarcbarsbarhhbarbetaddbetadrhodoldtautildeold
thetatildezetadnormA2maxrbarminrbarnormAcondAnormxistopctolnormrnormartest1test2str1str2str3chatshatalphahatrhooldcsthetanew	rhobaroldzetaoldthetabarrhotemp	betaacute	betacheckbetahatthetatildeold	ctildeold	stildeoldrhotildeoldtaudtest3t1rtolstr4sN   &&&&&&&&&                                                                     ^/var/www/html/photoedit/myenv/lib/python3.14/site-packages/scipy/sparse/linalg/_isolve/lsmr.pyr   r      s1   P 	A1AvvzIIKIC 6D2DEF77DA ![F	zA%(A"e,c
CD!!Jqc:;V}B'(T{"<VDMLMT{"9'"RHI	AGE	z!UOzz|rwwy!OAwaxXNIIaLQ!UOqyY!O CdlGH
CFDD	AE?D FEGKJD	A U]FGGLEEE EDz6zE T\F{#a&M%eVUE5@@z"%eVUE5@@c
db1Q4,'5-q/E$<qt-bggtT4()* -Ag 	
eV	QXXa[Aw!8!d(OA$JA1AGEqya%i   *(D9dH x.	1cU7U7 	#:*'s
H=dFg~&7" 	8c>Vi%7899		dcFl#t++	3	Q
 6M	EFN	 i-i
 #,6w,I)	9k'
f$e#i'&99
 !<<KzK//7:	I%%Q%$,**Vf_<= $+%V%%-' gy)7'9-GGW%GW(==
 WQ
 EMaeem,EEE	a%%-%//0UlU*U22 '>Eu9>Eu9>Er6Q;E D=ED=ED=E RSBYC7R<,?bA5C$J#6t##*)<
?F#J$%!b1Q4,/5-q7E$<qt55,ad|4bggtT467819 c
oc%jbzU4L9:E$<|F4=ABBx{5,78E$<()dDdDeS%u<<    )g        ư>rn   g    חANFN)__doc____all__numpyr   r   r   r   numpy.linalgr   mathr   scipy.sparse.linalg._interfacer	    scipy.sparse.linalg._isolve.lsqrr
   r   r   rm   rl   <module>rv      s+   $ ( 5 5   ; 7I=rm   