function test_lls_svd(n) if nargin < 1; n = 200; end warning off; m = 5*n; for k = [0 10 floor(n/2)] A0 = randn(m,n); b = randn(m,1); A = [A0 A0(:,1:k)*randn(k)]; fprintf('\n[m, n] = [%i, %i]\n',m,n+k) %disp('Using Matlab pinv ...'); t = cputime; u = pinv(A) * b; rel_res = norm(A*u-b)/norm(b); fprintf('Matlab Residue: %8.4e, CPU: %4.2e\n',... rel_res,cputime-t) %disp('Using yzlls_qr ...'); t = cputime; x = yzlls_svd(A,b); rel_res = norm(A*x-b)/norm(b); rel_err = norm(x-u)/norm(u); fprintf('YZcode Residue: %8.4e, CPU: %4.2e, Error: %8.4e\n',... rel_res,cputime-t,rel_err) if exist('mylls_svd.m','file') t = cputime; x = mylls_svd(A,b); rel_res = norm(A*x-b)/norm(b); rel_err = norm(x-u)/norm(u); fprintf('MYcode Residue: %8.4e, CPU: %4.2e, Error: %8.4e\n',... rel_res,cputime-t,rel_err) end end fprintf('\n')