function runme2() % Putting inside function really important. Compare to without. N=5e3; for i=1:4 X=rand(N); y=rand(N,1); tic;X=X+diag(y);toc clear X y; X=rand(N); y=rand(N,1); tic;X=plus_diag(X,y);toc clear X y; X=rand(N); y=rand(N,1); tic; diagidx=(0:N-1)*N+(1:N); X(diagidx)=X(diagidx)+y(:)'; toc clear X y; X=rand(N); y=rand(N,1); tic; ip_plus_diag('X','y'); toc clear X y; disp('-----'); end X=rand(N); X0=X; y=rand(N,1); ip_plus_diag('X','y'); isequal(X,X0+diag(y))