I'm trying to overload the mtimes function so each * operator will perform my own matrix multiplication (using mex) instead of matlab's built-in function.
I managed to overload the mtimes function when writing it in the same m-file with the calling function, and when I perform A*B I see that my function is being called (using debug message running from my mtimes function). So far so good. But when I perform A*B.' my mtimes is NOT called!. Neither when I perform A.'*B or A.'*B.'.
See the example code below, and the debug messages I see in Matlab console when I run it.
function testmeA = randn(3,3);B = randn(3,3);disp('start');C1 = A*B;C2 = A*B.';C3 = A.'*B;C4 = A.'*B.';disp('end');endfunction out = mtimes(a,b)out = a + b; % here should come my mex function. using '+' to let others copy-paste and check it for themselves without the mex being missing.
disp('been in my-mtimes');end
output on console:
>> testmestartbeen in my-mtimesend
It looks like A*B.' is calling different functions than 'mtimes' following 'transpose'… Any idea which function is called on A*B.' or A.'*B? BTW wrapping B.' in brackets (B.') doesn't change the behavior. Neither using A*transpose(B)… None of them are entering my mtimes function… I guess this is some kind of optimization that matlab does to save the transpose MIPS, but there must be a function that does that, which I can't find… Any help would be appreciated!
Thanks, Koby
Best Answer