&gt; ---------- Forwarded message ----------<br>&gt; From: &quot;Raul Acuña&quot; &lt;<a href="mailto:raultron@gmail.com" target="_blank">raultron@gmail.com</a>&gt;<br>&gt; To: <a href="mailto:scipy-user@scipy.org" target="_blank">scipy-user@scipy.org</a><br>


&gt; Date: Thu, 9 Dec 2010 21:19:54 -0430<br>&gt; Subject: Re: [SciPy-User] scipy.sparse.linalg.bicg for Non Symmetric Matrix.<br>&gt; I made a typing error in the previous post, the first code segment is this one instead:<br>


&gt; Asym = matrix(dot(A.T,A))<br>&gt; bsym = matrix(dot(A.T,b))<br>&gt; sol = cg(Asym,bsym,tol = 1e-10,maxiter=30)<br>&gt;<br>&gt; On Thu, Dec 9, 2010 at 9:12 PM, Raul Acuña &lt;<a href="mailto:raultron@gmail.com" target="_blank">raultron@gmail.com</a>&gt; wrote:<br>


&gt;&gt;<br>&gt;&gt; Hi,<br>&gt;&gt; Am using the iterative methods of scipy.sparse.linalg for solving a linear system of equations Ax = b. My matrix A is non symmetric. I&#39;ve been using the <a href="http://scipy.sparse.linalg.cg" target="_blank">scipy.sparse.linalg.cg</a>() function multiplying both matrix &quot;A&quot; and &quot;b&quot; with the transpose of A so the matrix will become symmetric:<br>


&gt;&gt; Asym = matrix(dot(A.T,A))<br>&gt;&gt; bsym = matrix(dot(A.T,b))<br>&gt;&gt; sol = cg(A,b,tol = 1e-10,maxiter=30)<br>&gt;&gt; Also i&#39;ve been reading about the biconjugate gradient method, and if i am not mistaken the literature says that this method works on non-symmetric matrix, but when i try to use  scipy.sparse.linalg.bicg() it wont work:<br>


&gt;&gt; sol = bicg(A,b,tol = 1e-10,maxiter=30)<br>&gt;&gt;    File &quot;C:\Python26\lib\site-packages\scipy\sparse\linalg\isolve\iterative.py&quot;, line 74, in bicg<br>&gt;&gt;           A,M,x,b,postprocess = make_system(A,M,x0,b,xtype)<br>


&gt;&gt;    File &quot;C:\Python26\lib\site-packages\scipy\sparse\linalg\isolve\utils.py&quot;, line 65, in make_system<br>&gt;&gt;           raise ValueError(&#39;expected square matrix (shape=%s)&#39; % shape)<br>&gt;&gt;           NameError: global name &#39;shape&#39; is not defined<br>


&gt;&gt; Any help will be greatly appreciated, am comparing this methods for my data with an important emphasis on speed for my master thesis, so any discrepancy with the theory would be a great problem for me.<br>&gt;&gt; Thanks in advance,<br>


&gt;&gt;<br>&gt;&gt; Raúl Acuña.<br><br>Hi Raúl,<br><br>You can&#39;t use Bi-CG or Bi-CGSTAB to solve non-square systems directly. Your system is either under- or over-determined. What you may be meaning to solve here is a related linear least-squares problem. If A has more rows than columns, you have an over-determined system (more equations than unknowns) and a relevant problem is to<br>


<br>    minimize 1/2 * ||Ax - b||^2.<br><br>Conversely, if A has more columns than rows, you have an under-determined system (more unknowns than conditions imposed on them) and you may want to<br><br>   minimize 1/2 * ||x||^2  subject to  Ax=b<br>


<br>i.e., find the least-norm solution among the infinitely many possibilities. In both cases, you can use MINRES, available in SciPy I think, or else in PyKrylov (<a href="https://github.com/dpo/pykrylov" target="_blank">https://github.com/dpo/pykrylov</a>) and in NLPy (<a href="http://nlpy.sf.net" target="_blank">http://nlpy.sf.net</a>) by solving the larger system<br>


<br><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><font face="&#39;courier new&#39;, monospace">[  I   A ] [ r ] = [ b ]<br>[ A.T  0 ] [ x ]   [ 0 ]</font></blockquote>
<br>(for the first problem) or<div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="font-family:&#39;courier new&#39;, monospace">[ I  A.T ] [ x ] = [ 0 ]</span></div>
<div><span style="font-family:&#39;courier new&#39;, monospace">[ A   0  ] [ r ]   [ b ]</span></div></blockquote><div><br></div><div>(for the second problem). Though the coefficient matrix above is symmetric, it is indefinite, so you can&#39;t use CG! To use MINRES, you just need to write a function which computes the product of a vector with the coefficient matrix.<br>


<br>In the first case, you can also use LSQR (available in NLPy and also probably in SciPy). In this case, you&#39;ll just need to be able to do A*x and A.T*y.<br><br>-- <br>Dominique<br><br></div>