function x_hat = perturb(x, epsilon) % % Generate a perturbed copy of ``x``, that is, a vector (or matrix) % of the form ``x + dx`` where ``dx`` has same dimensions as x and % negligible norm. % % INPUT: % % ``x`` -- The vector or matrix to perturb. % % ``epsilon`` -- An upper bound for the entries of ``dx``. % % OUTPUT: % % ``x_hat`` -- A perturbed copy of ``x``; ``x_hat == x + dx``. % % If no epsilon was given, make something up. if (nargin < 2) epsilon = 1e-10; end % This creates a vector or matrix whose entries lie in [-1,1]. dx = 2*rand(size(x)) - 1; % First normalize delta, using the infinity norm for speed (since % it doesn't matter). dx = dx / norm(dx, 'inf'); % Now scale it so that its largest entry is dx = dx * norm(x,'inf') * epsilon; x_hat = x + dx; end