Sorry, i have send accidentally an unfinished mail, so sorry for the typing errors.<br>I intended to push the save button ... .<br>The rest of the mail is attached below.<br><br><div class="gmail_quote">2009/8/17 Soeren Gebbert <span dir="ltr">&lt;<a href="mailto:soerengebbert@googlemail.com">soerengebbert@googlemail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi,<br>while including the ccmath library into grass and <br>patching i.cca to use the new ccmath library eigen vector functions,<br>
i noticed, that the eigen vector computation of the original i.cca version <br>differs from the expected values?<br>
<br>First, the i.cca code looks wired. Like Fortran code ported to C while keeping the<br>fortran style of counting (starting from 1). I removed the Fortran coding style and replaced <br>the eigen vector computaion function from lib/gmath/jacobi.c with a ccmath version.<br>

As a side effect: it is now possible to compute a cca of subgroups of size much larger than 8.<br><br>I verified the new eigen vector computation of i.cca (the ccmath version) with octave, so<br>octave and i.cca computing now the same eigen vectors for a given matrix.<br>

But this eigen vectors differ from the original version of i.cca. The difference is in the <br>sign of the vectors. And therefore the results of i.cca are looking different.<br><br>Example:<br><br>The following steps are made with the original and the ccmath version of i.cca:<br>

<br>i.group group=LandSat input=LandsatTM_Blue,LandsatTM_Green,LandsatTM_IR1,LandsatTM_IR2,LandsatTM_IR3,LandsatTM_Red<br>i.group group=LandSat subgroup=visible input=LandsatTM_Blue,LandsatTM_Green,LandsatTM_Red<br>i.cluster group=LandSat subgroup=visible sigfile=sig.txt classes=4<br>

i.cca --v group=LandSat subgroup=visible signature=sig.txt output=test_cca<br><a href="http://r.info" target="_blank">r.info</a> -r test_cca.1<br><a href="http://r.info" target="_blank">r.info</a> -r test_cca.2<br><a href="http://r.info" target="_blank">r.info</a> -r test_cca.3<br>

</blockquote><div> </div></div>Result of original i.cca:<br>...<br>1. eigen value: 12265.2 -- eigen vector: 0.159569 0.389926 -0.906915<br>2. eigen value: 308.024 -- eigen vector: -0.154224 -0.89756 -0.413039<br>3. eigen value: -1.29363e+06 -- eigen vector: -0.975065 0.205776 -0.0830864<br>
Transform completed.<br><br>WARNING: The output cell map &lt;test_cca.1&gt; has values outside the 0-255<br>         range.<br>WARNING: The output cell map &lt;test_cca.2&gt; has values outside the 0-255<br>         range.<br>
WARNING: The output cell map &lt;test_cca.3&gt; has values outside the 0-255<br>         range.<br><a href="http://r.info">r.info</a> -r test_cca.1<br>min=-16<br>max=8<br><a href="http://r.info">r.info</a> -r test_cca.2<br>
min=-32<br>max=0<br> <a href="http://r.info">r.info</a> -r test_cca.3<br>min=-23<br>max=-3<br><br><br>Results of the new ccmath version:<br>...<br>1. eigen value: 12265.2 -- eigen vector: -0.159569 -0.389926 0.906915<br>2. eigen value: 308.024 -- eigen vector: 0.154224 0.89756 0.413039<br>
3. eigen value: -1.29363e+06 -- eigen vector: 0.975065 -0.205776 0.0830864<br><br>Transform completed.<br>WARNING: The output cell map &lt;test_cca.1&gt; has values outside the 0-255<br>         range.<br><a href="http://r.info">r.info</a> -r test_cca.1<br>
min=-7<br>max=17<br><a href="http://r.info">r.info</a> -r test_cca.2<br>min=0<br>max=33<br><a href="http://r.info">r.info</a> -r test_cca.3<br>min=4<br>max=24<br><br><br>The difference is in the sign of the eigen vectors which results in different raster map values.<br>
<br>I have verified every step between the old and the new version of i.cca. The difference is only in the eigen vector computation.<br><br>So the big question is ... which result is correct???<br>The new one looks more reasonable to me, but well this is only one example ... .<br>
Do i have found a bug in the numerical recipes eigen vector code, or is the sign of eigen vectors not fixed and changes with the chosen algorithm?<br><br>Can i commit such changes to svn?<br><br>Any suggestions are welcome.<br>
<br>Best regards<br>Soeren<br><br>