MATLAB: Abs and sign simplification

MATLABsimplificationsymbolicSymbolic Math Toolbox

In some symbolic manipulations, I get a result which has something like abs(e)*sign(e). Why is this not simplified away, even by simplify? It's surely an identity that e = abs(e)*sign(e). For example, with this code:
syms x
diff(norm(diff(cos(x))))
% ans = (abs(sin(t))*sign(sin(t))*cos(t))/(abs(sin(t))^2)^(1/2)

Best Answer

It happens because for the scalar case norm(y)=|y| (here y=y(x) is any function), therefore Matlab computes derivative by splitting the two cases in the derivative of|y|: y>=0 and y<0. Then it combines the results in a signle function by the sign*|.| trick.
Related Question