f86867ef93f0fff29c891085fc4405638821a682
[scilab.git] / scilab / modules / overloading / macros / %p_simp.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // Copyright (C) - 2012
4 // 
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10
11 function [n,d]=%p_simp(num,den)
12     // implement complex case
13     // Check the variable name
14     var_name_num = varn(num);
15     var_name_den = varn(den);
16
17     if var_name_num <> var_name_den then
18         error(msprintf(gettext("%s: Wrong value for input argument #%d and #%d: Variable name of numerator and denominator must be the same.\n"), "simp", 1, 2));
19     end
20
21     [m1, m2] = size(num);
22     n = zeros(m1, m2);
23     d = n;
24
25     for k = 1:m1
26         for l = 1:m2
27             tmp_n = num(k, l)
28             tmp_d = den(k, l)
29             if imag(tmp_n) == 0 & imag(tmp_d) == 0 then
30                 [tmp_n, tmp_d] = simp(real(tmp_n), real(tmp_d))
31             else
32                 rn = roots(tmp_n);
33                 rd = roots(tmp_d);
34                 if length(rd) > length(rn) then
35                     r = rn;
36                 else
37                     r = rd
38                 end
39                 for i = 1:length(r)
40                     if abs(horner(tmp_n, r(i))) < sqrt(%eps) then
41                         pol = poly(r(i), var_name_num, "roots");
42                         tmp_n = pdiv(tmp_n, pol);
43                         tmp_d = pdiv(tmp_d, pol);
44                         if real(tmp_n) == 0 & real(tmp_d) == 0 then
45                             tmp_n = imag(tmp_n);
46                             tmp_d = imag(tmp_d);
47                         end
48                     end
49                 end
50             end
51             n(k,l) = tmp_n
52             d(k,l) = tmp_d
53         end
54     end
55 endfunction