* Bug #12179 fixed - Fix an incompatibility with MPI version of HDF5.
-* Bug #12190 fixed - Update the description of sprspn.
+* Bug #12184 fixed - Performances of the function 'derivat' improved.
+
+* Bug #12190 fixed - Description of sprspn updated in help page.
Changes between version 5.3.3 and 5.4.0
// are also available at
// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
-
-function p=derivat(p)
+function [p] = derivat(p)
//pd=derivat(p) computes the derivative of the polynomial or rational
//function marix relative to the dummy variable
-//!
+//
+
select typeof(p)
- case "constant" then
- p=0*p
+
+ case "constant" then
+ p = 0*p; // includes case p == []
+
case "polynomial" then
- [m,n]=size(p);var=varn(p);
- for i=1:m
- for j=1:n
- pij=p(i,j);nij=degree(pij);
- if nij==0 then
- p(i,j)=0;
- else
- pij=coeff(pij).*(0:nij);
- p(i,j)=poly(pij(2:nij+1),var,'c');
- end
+ var = varn(p); // dummy variable
+ [m,n]=size(p);
+ deg = degree(p);
+ degmax = max(deg);
+
+ if (degmax < n*m)
+ x = poly(0, var);
+ pd = zeros(p) * x;
+ for i = 1:degmax
+ pd = pd + coeff(p,i) * i * x^(i-1);
end
- end
- case "rational" then
- num=p.num;den=p.den
- [m,n]=size(num)
- for i=1:m
+ p = pd;
+ else
+ for i=1:m
for j=1:n
- num(i,j)=derivat(num(i,j))*den(i,j)-num(i,j)*derivat(den(i,j));
- den(i,j)=den(i,j)**2;
+ pij=p(i,j);
+ nij=deg(i,j);
+ if (nij==0) then
+ p(i,j)=0;
+ else
+ pij=coeff(pij).*(0:nij);
+ p(i,j)=poly(pij(2:nij+1),var,'c');
+ end
+ end
end
end
- p.num=num;p.den=den;
+
+ case "rational" then
+ num = p.num;
+ den = p.den;
+
+ num = derivat(num) .* den - num .* derivat(den);
+ den = den.^2;
+
+ p.num = num;
+ p.den = den;
+
else
error(msprintf(gettext("%s: Wrong type for input argument #%d: A floating point number or polynomial or rational fraction array expected.\n"),"derivat",1))
+
end
+
endfunction