dbaa4a6c775e2104fd007c8adad8d221439ccbbb
[scilab.git] / scilab / modules / overloading / macros / %r_m_s.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
9
10 function f1=%r_m_s(f1,n2)
11     // %r_m_s(f1,n2)
12     //f1 =  f1*n2
13     //author Serge Steer INRIA
14     //!
15
16     [n1,d1]=f1(["num","den"]),
17     sz1=size(n1);sz2=size(n2);
18     if prod(sz1)==0|prod(sz2)==0 then f1=[];return,end
19
20
21     indef=%f
22     if or(sz1==-1) then
23         n1=n1+0;d1=d1+0;sz1=[1 1];
24         if prod(sz2)==1 then indef=%t,else error(14),end
25     end
26     if  or(sz2==-1) then
27         n2=n2+0;sz2=[1 1];
28         if prod(sz1)==1 then indef=%t,else error(14),end
29     end
30     //
31     if prod(sz1)==1 then
32         num=n1*n2,
33         den=d1(ones(n2))
34     elseif prod(sz2)==1 then
35         num=n1*n2,
36         den=d1
37     else,
38         if size(sz1,"*")>2|size(sz2,"*")>2 then error(10),end
39         if sz1(2)<>sz2(1) then error(10),end,
40         l1=sz1(1);l2=sz2(1);m2=sz2(2)
41         for i=1:l1,
42             n=n1(i,:);
43             [y,fact]=lcm(d1(i,:)),
44             den(i,1:m2)=ones(1,m2)*y,
45             for j=1:m2,
46                 num(i,j)=n*(n2(:,j).*matrix(fact,l2,1)),
47             end,
48         end,
49         [num,den]=simp(num,den),
50     end,
51
52     if indef then
53         num=num*eye()
54         den=den*eye()
55     end
56     f1=rlist(num,den,f1.dt)
57 endfunction