Contents

% Total variation denoising with random data

Generate problem data

rand('seed', 0);
randn('seed', 0);

n = 100;

x0 = ones(n,1);
for j = 1:3
    idx = randsample(n,1);
    k = randsample(1:10,1);
    x0(ceil(idx/2):idx) = k*x0(ceil(idx/2):idx);
end
b = x0 + randn(n,1);

lambda = 5;

e = ones(n,1);
D = spdiags([e -e], 0:1, n,n);

Solve problem

[x history] = total_variation(b, lambda, 1.0, 1.0);
iter	    r norm	   eps pri	    s norm	  eps dual	 objective
  1	    7.1216	    0.0722	    0.0000	    0.0793	     30.67
  2	    4.6035	    0.0470	    0.0000	    0.1067	     55.88
  3	    3.7430	    0.0389	    0.2524	    0.1187	     70.97
  4	    3.1490	    0.0352	    1.5080	    0.1216	     86.77
  5	    2.6064	    0.0365	    1.7122	    0.1226	     98.74
  6	    2.1441	    0.0416	    1.7540	    0.1219	    110.68
  7	    1.7400	    0.0481	    1.4449	    0.1204	    120.07
  8	    1.4723	    0.0539	    1.0310	    0.1190	    126.85
  9	    1.2828	    0.0580	    0.6746	    0.1180	    130.75
 10	    1.0672	    0.0608	    0.5517	    0.1171	    134.95
 11	    0.8766	    0.0627	    0.4416	    0.1166	    138.06
 12	    0.7446	    0.0641	    0.2934	    0.1163	    140.18
 13	    0.6625	    0.0652	    0.1945	    0.1162	    141.69
 14	    0.6064	    0.0661	    0.1368	    0.1161	    142.79
 15	    0.5644	    0.0668	    0.1054	    0.1160	    143.65
 16	    0.5295	    0.0674	    0.0874	    0.1159	    144.51
 17	    0.4973	    0.0678	    0.0823	    0.1158	    145.23
 18	    0.4693	    0.0682	    0.0795	    0.1157	    145.83
 19	    0.4444	    0.0686	    0.0765	    0.1157	    146.33
 20	    0.4217	    0.0689	    0.0736	    0.1157	    146.76
 21	    0.4011	    0.0692	    0.0701	    0.1157	    147.14
 22	    0.3822	    0.0695	    0.0662	    0.1157	    147.49
 23	    0.3648	    0.0697	    0.0622	    0.1156	    147.82
 24	    0.3488	    0.0699	    0.0582	    0.1156	    148.13
 25	    0.3332	    0.0701	    0.0555	    0.1156	    148.46
 26	    0.3080	    0.0704	    0.1110	    0.1154	    149.21
 27	    0.2800	    0.0705	    0.1294	    0.1153	    149.88
 28	    0.2582	    0.0707	    0.1098	    0.1153	    150.40
 29	    0.2429	    0.0709	    0.0833	    0.1152	    150.78
 30	    0.2306	    0.0710	    0.0606	    0.1152	    151.05
 31	    0.2199	    0.0712	    0.0451	    0.1152	    151.24
 32	    0.2103	    0.0713	    0.0359	    0.1152	    151.38
 33	    0.2018	    0.0715	    0.0307	    0.1152	    151.50
 34	    0.1942	    0.0716	    0.0276	    0.1151	    151.61
 35	    0.1872	    0.0717	    0.0255	    0.1151	    151.71
 36	    0.1808	    0.0718	    0.0239	    0.1151	    151.81
 37	    0.1749	    0.0719	    0.0227	    0.1151	    151.91
 38	    0.1694	    0.0720	    0.0215	    0.1150	    152.01
 39	    0.1643	    0.0721	    0.0204	    0.1150	    152.10
 40	    0.1595	    0.0722	    0.0194	    0.1150	    152.19
 41	    0.1550	    0.0723	    0.0183	    0.1150	    152.27
 42	    0.1508	    0.0724	    0.0173	    0.1150	    152.35
 43	    0.1468	    0.0725	    0.0164	    0.1149	    152.43
 44	    0.1431	    0.0726	    0.0155	    0.1149	    152.50
 45	    0.1396	    0.0726	    0.0147	    0.1149	    152.56
 46	    0.1362	    0.0727	    0.0140	    0.1149	    152.63
 47	    0.1331	    0.0728	    0.0133	    0.1149	    152.69
 48	    0.1301	    0.0728	    0.0126	    0.1149	    152.74
 49	    0.1272	    0.0729	    0.0120	    0.1149	    152.80
 50	    0.1244	    0.0729	    0.0115	    0.1149	    152.85
 51	    0.1218	    0.0730	    0.0109	    0.1148	    152.90
 52	    0.1193	    0.0730	    0.0105	    0.1148	    152.95
 53	    0.1169	    0.0731	    0.0100	    0.1148	    152.99
 54	    0.1146	    0.0731	    0.0096	    0.1148	    153.03
 55	    0.1124	    0.0732	    0.0092	    0.1148	    153.07
 56	    0.1103	    0.0732	    0.0088	    0.1148	    153.11
 57	    0.1083	    0.0733	    0.0084	    0.1148	    153.15
 58	    0.1063	    0.0733	    0.0081	    0.1148	    153.19
 59	    0.1044	    0.0733	    0.0078	    0.1148	    153.22
 60	    0.1021	    0.0734	    0.0084	    0.1148	    153.27
 61	    0.0989	    0.0734	    0.0250	    0.1147	    153.38
 62	    0.0947	    0.0735	    0.0262	    0.1147	    153.47
 63	    0.0912	    0.0735	    0.0235	    0.1147	    153.55
 64	    0.0883	    0.0735	    0.0196	    0.1146	    153.62
 65	    0.0857	    0.0735	    0.0158	    0.1146	    153.67
 66	    0.0833	    0.0735	    0.0127	    0.1146	    153.72
 67	    0.0812	    0.0736	    0.0103	    0.1146	    153.76
 68	    0.0791	    0.0736	    0.0087	    0.1146	    153.79
 69	    0.0772	    0.0736	    0.0076	    0.1146	    153.82
 70	    0.0754	    0.0736	    0.0068	    0.1146	    153.84
 71	    0.0737	    0.0736	    0.0064	    0.1146	    153.86
 72	    0.0720	    0.0736	    0.0060	    0.1146	    153.88
Elapsed time is 0.028766 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)');