<br><br><div><span class="gmail_quote">On 7/16/07, <b class="gmail_sendername">Robert Kern</b> <<a href="mailto:robert.kern@gmail.com">robert.kern@gmail.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Kevin Jacobs <<a href="mailto:jacobs@bioinformed.com">jacobs@bioinformed.com</a>> wrote:<br>> Mea culpa on the msqrt example, however I still think it is wrong to get<br>> a complex square-root back when a real valued result is expected and exists.
<br><br>No, in floating point you accumulate error. Those 1e-22j's are part of the<br>actual result. Some systems like MATLAB implicitly silent such small imaginary<br>components; we don't.</blockquote><div><br>The problem is that the given matrix has a conditon number of about 10**17 and is almost singular. A singular value decomposition works fine, but apparently the sqrtm call suffers from roundoff and takes the sqrt of a negative number. Sqrtm returns real results in better conditioned cases.
<br><br><span style="font-family: courier new,monospace;">In [2]: sqrtm(eye(2))<br>Out[2]: <br>array([[ 1.,  0.],<br>       [ 0.,  1.]])<br></span><span style="font-family: courier new,monospace;"></span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"></div>Perhaps we aren't using the best method here.<br><br>Chuck<br><br></div><br>