[Scilab-users] Overloading "inv" and/or "p" does not seem to work with Scilab 6.1.0

CRETE Denis Denis.CRETE at cnrs-thales.fr
Thu May 7 14:58:44 CEST 2020


Hello,

I redefined a few functions in Scilab 6.1.0 to extend them to arrays with 3 dimensions (formerly called hypermatrix). Overloading works with "clean", "multiply", "left division" and "element by element division" (after defining functions %s_clean, %s_m_s, %s_l_s and %s_d_s).

I tried to overload function "inv" with the following code:

function y=%s_inv(x),
    if ndims(x)>2 then
        for k=1:size(x,3),
            y(:,:,k)=inv(x(:,:,k));
        end;
    else
        y=inv(x);
    end;
endfunction

expecting that each layer of y is the reciprocal of corresponding layer of x. Instead,
inv(ones(1,1,2).*.rand(2,2)) returns the reciprocal of x layer 1 in y layer 1 AND x LAYER n IN y LAYER n, WHEN n>1. I use "layer" to designate the matrix obtain for a fixed value the index along the 3rd dimension.

Code to reproduce the problem:

n=4; m=3;
M=ones(1,1,n).*.rand(m,m);
inv(M)

Attempts to circumvent this problem by using M^(-1) instead of inv(M) run into the same problem (after redefining function %s_p). Is this a bug or did I miss something ?

In the mean time, I avoided overloading the function "inv" and renamed "%s_inv" to "inverse" to do successfully call "inverse(M)"...

Best regards
Denis

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20200507/70f7661d/attachment.htm>


More information about the users mailing list