Hello Denis,
Le 07/05/2020 à 14:58, CRETE Denis a écrit :
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 ?
It's a bug. inv() should display an error message inviting to define
%s_inv(), or use %s_inv().
By the way, the hook to the overload existed in Scilab 5.5.2. Hence,
this issue is a regression.
Could you please report it?
Thanks
Samuel
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users