Compute roots with complex coeff corrected. 37/9937/5
Cedric Delamarre [Thu, 6 Dec 2012 11:18:43 +0000 (12:18 +0100)]
assert_checkequal(roots([4 3 2 1]), roots(poly([1 2 3 4], 'x', 'coeff')))
assert_checkequal(roots([4 3 2 1] + [1 2 3 4]*%i), roots(poly([1 2 3 4]+[4 3 2 1]*%i,'x','coeff')))

Change-Id: I83d99d545b884c1f17005f62ec2bc63c4c71875d

scilab/modules/polynomials/sci_gateway/fortran/sci_f_roots.f
scilab/modules/polynomials/tests/unit_tests/roots.dia.ref
scilab/modules/polynomials/tests/unit_tests/roots.tst

index 5c390bf..65c50f0 100644 (file)
@@ -89,7 +89,7 @@ c
       endif
 
       it1=istk(il1+3)
-c If "fast" algo was chosen and polynomial is complex, 
+c If "fast" algo was chosen and polynomial is complex,
 c then produce an error.
       if ( .not.eigen  .and. it1 .eq. 1 ) then
         err=2
@@ -104,7 +104,10 @@ c     for Matlab compatibility root of the vector of coefficients
 
          n=mn1
          if(.not.ref) then
-            call dtild(n*(it1+1),stk(l1),1)
+            call dtild(n,stk(l1),1)
+            if(it1.eq.1) then
+                call dtild(n,stk(l1+n),1)
+            endif
             lc=l1
          else
             lc=lw
@@ -146,7 +149,7 @@ c     for Matlab compatibility root of the vector of coefficients
       endif
 
       if ( .not.eigen  .and.n.gt.100) then
-c If "fast" algo was chosen and polynomial has degree greater than 100, 
+c If "fast" algo was chosen and polynomial has degree greater than 100,
 c then produce an error.
         err=2
         call error(116)
@@ -234,7 +237,7 @@ c     polynome de degre 0
       istk(ilr+2)=0
       istk(ilr+3)=0
       lstk(top+1)=sadr(ilr+4)
-         
+
       return
       end
 c                      =======================================
index a8f7e12..1b768fc 100644 (file)
@@ -296,3 +296,5 @@ E = [
 E = sortRoots(E);
 R = sortRoots(R);
 assert_checkalmostequal(R, E, 1.e-10, 1.e-8);
+assert_checkequal(roots([4 3 2 1]), roots(poly([1 2 3 4], 'x', 'coeff')));
+assert_checkequal(roots([4 3 2 1] + [1 2 3 4]*%i), roots(poly([1 2 3 4]+[4 3 2 1]*%i,'x','coeff')));
index 6c4e415..11a8441 100644 (file)
@@ -310,3 +310,7 @@ E = [
 E = sortRoots(E);
 R = sortRoots(R);
 assert_checkalmostequal(R, E, 1.e-10, 1.e-8);
+
+assert_checkequal(roots([4 3 2 1]), roots(poly([1 2 3 4], 'x', 'coeff')));
+assert_checkequal(roots([4 3 2 1] + [1 2 3 4]*%i), roots(poly([1 2 3 4]+[4 3 2 1]*%i,'x','coeff')));
+