(最小二乘问题.doc
文本预览下载声明
最小二乘问题
22.1 算法
最小二乘问题可用下式表达:
此类问题在实际应用中很常见,特别是进行数据拟合、非线性参数估计时。最小二乘问题的常见解法有Gauss-Newton法和Levenberg-Marquardt法。
Gauss-Newton法
该法通过在每一次迭代中求解下列线性最小二乘问题来获得搜索方向。
搜索方向可以用于一维搜索,以保证每一次迭代都使函数f(x)减小。
图22-1演示了采用Gauss-Newton法求解Rosenbrock函数最小化问题的路径。该法只用了48次迭代即完成计算。
Gauss-Newton法有时会出现矩阵求逆的困难或出现假收敛的情况。用Levenberg-Marquart法可以解决此问题。
图22-1 Guass-Newton法的搜索路径
Levenberg-Marquart法(又称阻尼最小二乘法)
该法用下式求搜索方向:
(
式中为阻尼因子,它可以控制的大小和方向。当=0时,即为Gauss-Newton法。当时,趋于零向量,即为最速下降法。因此,只要给一个足够大的就始终为真。因此,即使是遇到影响Gauss-Newton法有效性的病态二次项,也可以通过阻尼因子来进行控制。
因此,Levenberg-Marquart法给出的是介于Gauss-Newton法和最速下降法之间的搜索
方向。图22-2是该法的演示,它用了90次迭代运算,介于Gauss-Newton法的48次和最速下降法的1000次之间。
图22-2 Levenberg-Marquart法的搜索路径
线性最小二乘问题
利用左除(“\”)算子可以求解线性最小二乘问题。
如果A为平方矩阵,则除了算法不同,A\b与inv(A)*b大致相当。如果A是一个n阶方阵,b是一个具有n个元素的列向量或具有多个此类列向量的矩阵,则X=A\b为用高斯消元法得到的方程Ax=b的解。如果A奇异,则会给出警告消息。
如果A不是方阵,则x=A\b为等式系统Ax=b(b也可以是矩阵)的最小二乘意义上的解。
22.3 非负线性最小二乘解的问题
基本数学原理
非负线性最小二乘届问题的数学模型为
式中,矩阵C和向量d为目标函数的系数。独立变量向量x要求非负。
22.3.2有关函数介绍
用1sqnonneg函数求线性问题的非负最小二乘解。其调用格式为:
x=1sqnonneg(C,d) 返回向量x,使范数||C*x-d||最小化,约束条件为x=0。C和d必须为实的。
x=1sqnonneg(C,d,x0) 若所有的x0=0, 则使用 x0为初值;否则使用默认值。默认的初值为原点(当 (x0= =[ ]或只提供两个输入变量时也使用默认值)。
x=1sqnonneg(C,d,x0,options) 用 options结构指定的优化参数进行最小化。
[x,resnorm]=1sqnonneg(…)返回残差的平方范数值: norm(C*x-d)^2。
[x,resnorm,residua1]=1sqnonneg(…)返回残差C*x-d。
[x,resnorm,reidua1,exitf1ag]=1sqnonneg(…) 返回exitf1ag参数,描述退出条件。
[x,resnorm,residua1,exitf1ag,output]=1sqnonneg(…)返回包含优化信息的输出结构output参数。
[x,resnorm,residua1,exitf1ag,output,1ambda]=1sqnonneg(…) 返回拉格朗日乘子1ambda
各参数的意义可以参见表15-7和表15-8。
1sqnonneg函数使用的算法是从一系列可能的基本向量出发,计算相关的对偶向量1ambda。然后选择与1ambda中最大值对应的基本向量并将它剔除,然后将下一个值交换进来。重复此过程,直到1ambda=0
必须注意的是,非负最小二乘问题是有约束线性最小二乘问题的一个子集,所以当 C的行数比列数多时,除了1ambda=-1ambda_1sq1in.ineq1in外,
[x,resnorm, residual, exitflag, output, lambda]=lsqnonneg(C,d)
等价于
[m,n]=size(C);
[x,resnorm,residual,exitflag,output,lambda_lsqlin]=
lsqlin(C,d,-eye(n,n),zeros(n,1));
对于大于20阶的问题,1sq1in函数比1sqnonneg 函数的计算速度快。否则,使用1sqnonneg 函数更有效。
应用实例
【例22-1】 利用下面的4*2问题比较无约束最小二乘解和 1sqnonneg函数解。
显示全部