system: [SYSTEM]

user: 5. 数值实验 下面将进行一些数值实验来验证算法4.1对于求解欠定线性方程组的稀疏非负解是有效的。所有的实验结果都是在联想笔记本电脑(2.50 GHz， 8.00 GB of RAM)上实现的，数学软件采用MATLAB R2016a。 基于文献 [ 15 ] 的实验证实了 l 0 优化问题可连续的有效性，我们将算法中嵌入连续化过程。具体方法就是在考虑求解问题(2)前，先求解如下一系列问题 x μ k * : = arg min x ∈ R + n { ϕ μ k ( x ) = f ( x ) + μ k ‖ x ‖ 0 } . 其中 μ 0 > μ 1 > ⋯ > μ N 且N是一个正整数。我们用问题的解 x μ k − 1 * 作为下一个问题的初始迭代点。取 μ 0 = 1 2 ‖ A T b ‖ ∞ 2 ， μ N = 10 − 15 μ 0 ，区间 [ μ N ， μ 0 ] 经过取对数化处理后，再将其分成N个均匀分布的子区间。我们选择序列 { μ k } 作为子区间的端点，并对 μ k 做了一个处理，即令 μ k = max { μ k ， 0.005 } 。算法中涉及的参数设计如下： λ 0 = 1 ， M = 10 ， λ min = 10 − 3 ， λ max = 10 ， δ = 10 − 2 ， η = 0.5 。首先用标准高斯分布的独立样本填充 m × n 的度量矩阵A，并且对这些行进行正交化。而真实解 x * 是一个具有有效集 A * 的T-稀疏信号，观测向量b定义为： b = A x * + e 其中e是根据均值为零且方差为10 -2 的高斯分布绘制的。 在实验中，我们研究了参数N和L对算法的影响，设 n = 5 × 10 3 和 n = 10 4 ， m = r o u n d ( 0.2 ∗ n ) ，并考虑了稀疏度的范围： x * 的非零分量的数量T在1到60都是可行的。算法的初始点是零向量，当满足 ‖ g ( x k ) τ ( x k ) ‖ ∞ ≤ 10 − 5 或 ‖ g ( x k ) γ ( x k ) ‖ ∞ ≤ 0 .05 条件时，停止运算。下面将从平均迭代步数(Iter)、平均误差( ‖ x k − x * ‖ ∞ )和运算时间(Time)三个方面来对ABB算法的性能进行评估。 Table 1 n = 5 × 10 3 ， L = 1 / 5 ， the results of ABB algorithm to solve the proble (N， T) Iter ‖ x k − x * ‖ ∞ Time (sec.) (10， 1:30) 26.86 4.14e−02 18.85 (15， 1:30) 31.62 4.47e−02 19.21 (20， 1:30) 35.55 4.60e−02 22.03 (10， 31:60) 30.47 5.56e−02 20.35 (15， 31:60) 35.53 5.62e−02 21.48 (20， 31:60) 39.55 5.49e−02 24.86 表1. n = 5 × 10 3 ， L = 1 / 5 时ABB算法求解问题的计算结果 Table 2 n = 5 × 10 3 ， L = 1 / 4 ， the results of ABB algorithm to solve the proble (N， T) Iter ‖ x k − x * ‖ ∞ Time (sec.) (10， 1:30) 26.15 4.14e−02 18.03 (15， 1:30) 31.04 4.47e−02 19.08 (20， 1:30) 35.22 4.60e−02 20.67 (10， 31:60) 30.50 5.56e−02 19.33 (15， 31:60) 35.80 5.62e−02 20.59 (20， 31:60) 39.53 5.49e−02 24.70 表2. n = 5 × 10 3 ， L = 1 / 4 时ABB算法求解问题的计算结果 Table 3 n = 5 × 10 3 ， L = 1 / 2 ， the results of ABB algorithm to solve the proble (N， T) Iter ‖ x k − x * ‖ ∞ Time (sec.) (10， 1:30) 26.85 4.14e−02 18.87 (15， 1:30) 31.89 4.47e−02 19.09 (20， 1:30) 35.63 4.60e−02 21.33 (10， 31:60) 32.47 5.56e−02 24.51 (15， 31:60) 35.90 5.62e−02 25.47 (20， 31:60) 39.90 5.49e−02 27.64 表3. n = 5 × 10 3 ， L = 1 / 2 时ABB算法求解问题的计算结果 Table 4 n = 5 × 10 3 ， L = 1 ， the results of ABB algorithm to solve the proble (N， T) Iter ‖ x k − x * ‖ ∞ Time (sec.) (10， 1:30) 26.96 4.14e−02 19.03 (15， 1:30) 31.85 4.47e−02 20.55 (20， 1:30) 35.52 4.60e−02 21.10 (10， 31:60) 34.17 5.56e−02 23.65 (15， 31:60) 36.10 5.62e−02 24.88 (20， 31:60) 39.73 5.49e−02 26.78 表4. n = 5 × 10 3 ， L = 1 时ABB算法求解问题的计算结果 由上述表1~4可以看出，当问题的规模取 n = 5 × 10 3 时， T = 31 : 60 ， N = 15 ，ABB算法产生了较大的平均误差。在 T = 1 : 30 ， N = 10 时，ABB算法产生的平均误差较小。而L的取值变化对于ABB算法产生的平均误差影响很小。 对于上述表格中计算的数据，我们将绘图分析在 T = 1 : 30 时，L和N的取值变化对于ABB算法求解问题的平均迭代次数和运算时间产生的影响。 图1. 不同L水平下，N取值变化对平均迭代次数的影响 图2. 不同L水平下，N取值变化对运算时间的影响 图3. 不同N水平下，L取值变化对平均迭代次数的影响 图4. 不同N水平下，L取值变化对运算时间的影响 由图1和图2可以明显看出，当L的值一定时，随着N的取值变大，迭代步数和运算时间都会增加。同样的，由图3和图4可以明显看出，当N的取值一定时，可以看出 L = 1 / 4 时，平均迭代步数和运算时间都是最小的。由此可知，当 L = 1 / 4 ， N = 10 时，可以得到最优的实验结果。 Table 5 n = 10 4 ， L = 1 / 5 ， the results of ABB algorithm to solve the proble (N， T) Iter ‖ x k − x * ‖ ∞ Time (sec.) (10， 1:30) 26.86 4.77e−02 76.62 (15， 1:30) 30.62 4.70e−02 77.02 (20， 1:30) 34.55 4.60e−02 79.56 (10， 31:60) 28.47 5.53e−02 80.35 (15， 31:60) 33.53 5.72e−02 81.46 (20， 31:60) 39.27 5.48e−02 84.06 表5. n = 10 4 ， L = 1 / 5 时ABB算法求解问题的计算结果 Table 6 n = 10 4 ， L = 1 / 4 ， the results of ABB algorithm to solve the proble (N， T) Iter ‖ x k − x * ‖ ∞ Time (sec.) (10， 1:30) 26.41 4.77e−02 75.03 (15， 1:30) 30.59 4.70e−02 76.08 (20， 1:30) 34.62 4.60e−02 78.77 (10， 31:60) 27.70 5.53e−02 77.53 (15， 31:60) 32.03 5.72e−02 80.49 (20， 31:60) 39.23 5.48e−02 82.50 表6. n = 10 4 ， L = 1 / 4 时ABB算法求解问题的计算结果 Table 7 n = 10 4 ， L = 1 / 2 ， the results of ABB algorithm to solve the proble (N， T) Iter ‖ x k − x * ‖ ∞ Time (sec.) (10， 1:30) 26.84 4.77e−02 76.97 (15， 1:30) 30.90 4.70e−02 80.09 (20， 1:30) 34.69 4.60e−02 81.53 (10， 31:60) 30.27 5.53e−02 80.51 (15， 31:60) 33.80 5.72e−02 81.67 (20， 31:60) 40.30 5.48e−02 83.54 表7. n = 10 4 ， L = 1 / 2 时ABB算法求解问题的计算结果 Table 8 n = 10 4 ， L = 1 ， the results of ABB algorithm to solve the proble (N， T) Iter ‖ x k − x * ‖ ∞ Time (sec.) (10， 1:30) 26.98 4.77e−02 77.03 (15， 1:30) 30.93 4.70e−02 79.55 (20， 1:30) 34.66 4.60e−02 81.10 (10， 31:60) 31.43 5.53e−02 80.65 (15， 31:60) 34.07 5.72e−02 82.68 (20， 31:60) 39.90 5.48e−02 83.78 表8. n = 10 4 ， L = 1 时ABB算法求解问题的计算结果 由表5~8中的结果可知，当问题规模达到 n = 10 4 时，我们依旧可以得到相同的结论。当L的值一定时，随着N的取值变大，迭代步数和运算时间都会增加。当N的取值一定时，可以看出 L = 1 / 4 时，平均迭代步数和运算时间都是最小的。由此可知，当 L = 1 / 4 ， N = 10 时，可以得到最优的实验结果。综上可知，ABB算法可以快速有效地求解欠定线性方程组的稀疏非负解。