33 lines
592 B
Mathematica
33 lines
592 B
Mathematica
|
|
function y = times(X,Y)
|
||
|
|
%TIMES (overloaded)
|
||
|
|
|
||
|
|
% Check dimensions
|
||
|
|
[n,m]=size(X);
|
||
|
|
if ~((prod(size(X))==1) | (prod(size(Y))==1))
|
||
|
|
if ~((n==size(Y,1) & (m ==size(Y,2))))
|
||
|
|
error('Matrix dimensions must agree.')
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
% Reshape if one argument is scalar
|
||
|
|
dX = size(X);
|
||
|
|
dY = size(Y);
|
||
|
|
if max(dX)==1 & max(dY)>1
|
||
|
|
X = X*ones(dY);
|
||
|
|
dX = size(X);
|
||
|
|
end
|
||
|
|
if max(dY)==1 & max(dX)>1
|
||
|
|
Y = Y*ones(dX);
|
||
|
|
dY = size(Y);
|
||
|
|
end
|
||
|
|
|
||
|
|
% Just loop and call mtimes instead
|
||
|
|
y = [];
|
||
|
|
X = X(:);
|
||
|
|
Y = Y(:);
|
||
|
|
for i = 1:length(X)
|
||
|
|
y = [y;extsubsref(X,i,1)*extsubsref(Y,i,1)];
|
||
|
|
end
|
||
|
|
y = reshape(y,dX);
|
||
|
|
return
|