a2d4a9bab26357f04893b41fc45dda3761d65b7c
[scilab.git] / scilab / modules / polynomials / macros / lcm.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) ????-2008 - INRIA
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13
14 function [p, fact] = lcm(p)
15     //p=lcm(p) computes the lcm of polynomial vector p
16     //[pp,fact]=lcm(p) computes besides the vector fact of factors
17     //such that  p.*fact=pp*ones(p)
18     //!
19
20     if type(p)<>1 & type(p)<>2 & type(p)<>8 then
21         error(msprintf(_("%s: Wrong type for argument #%d: Integer array or Polynomial expected.\n"), "lcm", 1));
22     end
23
24     if type(p)==1 then
25         if floor(p)<>p then
26             error(msprintf(_("%s: Wrong type for argument #%d: Integer array or Polynomial expected.\n"), "lcm", 1));
27         else
28             p = iconvert(p,4);
29         end
30     end
31
32     if type(p)==8 then
33         if argn(1)==2 then [p, fact] = %i_lcm(p), else p = %i_lcm(p), end
34         return
35     end
36
37     [m, n] = size(p),
38     p = matrix(p, m*n, 1),
39     p0 = p(1); fact = 1;
40     for l = 2:m*n,
41         [u, v] = simp(p0, p(l)),
42         p0 = p0*v,
43         fact = [v*fact, u],
44     end,
45     fact = matrix(fact, m, n),
46     p = p0;
47
48 endfunction