Contents
Generate problem data
randn('seed', 0);
rand('seed',0);
m = 5000;
n = 200;
x0 = randn(n,1);
A = randn(m,n);
A = A*spdiags(1./norms(A)',0,n,n);
b = A*x0 + sqrt(0.01)*randn(m,1);
b = b + 10*sprand(m,1,200/m);
Solve problem
[x history] = huber_fit(A, b, 1.0, 1.0);
iter r norm eps pri s norm eps dual objective
1 15.4154 0.7767 5.1477 0.1556 642.51
2 2.5360 0.7767 4.1103 0.1589 827.60
3 2.2591 0.7767 2.1831 0.1554 833.26
4 1.2350 0.7767 1.1045 0.1544 832.93
5 0.6256 0.7767 0.5544 0.1542 832.86
6 0.3144 0.7767 0.2776 0.1542 832.87
7 0.1575 0.7767 0.1389 0.1542 832.88
Elapsed time is 0.336020 seconds.
Reporting
K = length(history.objval);
h = figure;
plot(1:K, history.objval, 'k', 'MarkerSize', 10, 'LineWidth', 2);
ylabel('f(x^k) + g(z^k)'); xlabel('iter (k)');
g = figure;
subplot(2,1,1);
semilogy(1:K, max(1e-8, history.r_norm), 'k', ...
1:K, history.eps_pri, 'k--', 'LineWidth', 2);
ylabel('||r||_2');
subplot(2,1,2);
semilogy(1:K, max(1e-8, history.s_norm), 'k', ...
1:K, history.eps_dual, 'k--', 'LineWidth', 2);
ylabel('||s||_2'); xlabel('iter (k)');