前言
博主一頭小山豬
目前已開放所有文章:小山豬——經(jīng)典算法專欄
活動地址:CSDN21天學(xué)習(xí)挑戰(zhàn)賽
正文
L-M法求解非線性最小二乘優(yōu)化問題
L-M法 (Levenberg-Marquardt法)原理
當(dāng)矩陣
(
J
k
)
T
J
k
\left(J_{k}\right)^{T} J_{k}
(Jk?)TJk? 為病態(tài)矩陣時,用G-N算法可能得不到正確的解,甚至當(dāng)
(
J
k
)
T
J
k
\left(J_{k}\right)^{T} J_{k}
(Jk?)TJk? 不可逆時, 這時G-N算法就無法計算下去。L-M算法通過采用系數(shù)矩陣阻尼的方法改造矩陣
(
J
k
)
T
J
k
\left(J_{k}\right)^{T} J_{k}
(Jk?)TJk? 的性 態(tài),使算法能夠進(jìn)行下去。
L-M算法中有兩個主要的步驟: 一是解方程
[
Q
+
μ
I
]
Δ
x
=
?
?
S
(
x
(
k
)
)
[Q+\mu I] \Delta x=-\nabla S\left(x^{(k)}\right)
[Q+μI]Δx=??S(x(k)) (其中
μ
\mu
μ 為阻尼系 數(shù))求出自變量的增量,另一個是阻尼系數(shù)
μ
\mu
μ 的調(diào)整算法。
算法步驟
用L-M法求解非線性最小二乘優(yōu)化問題
min
?
S
(
x
)
\min S(x)
minS(x) 的算法過程如下:
【1】給定初始點
x
(
0
)
x^{(0)}
x(0) ,選取參數(shù)
β
∈
(
0
,
1
)
,
μ
>
1
\beta \in(0,1) , \mu>1
β∈(0,1),μ>1 及精度
ε
>
0
\varepsilon>0
ε>0 ,置
k
=
0
k=0
k=0 ;
【2】計算
f
(
x
(
k
)
)
,
S
(
x
(
k
)
)
f\left(x^{(k)}\right), S\left(x^{(k)}\right)
f(x(k)),S(x(k)) ;
【3】計算
?
f
(
x
(
k
)
)
\nabla f\left(x^{(k)}\right)
?f(x(k)) ;
【4】計算
?
S
(
x
(
k
)
)
=
(
?
f
(
x
(
k
)
)
)
T
?
f
(
x
(
k
)
)
\nabla S\left(x^{(k)}\right)=\left(\nabla f\left(x^{(k)}\right)\right)^{T} * f\left(x^{(k)}\right)
?S(x(k))=(?f(x(k)))T?f(x(k)) ;
【5】令
Q
=
(
?
f
(
x
(
k
)
)
)
T
?
f
(
x
(
k
)
)
Q=\left(\nabla f\left(x^{(k)}\right)\right)^{T} \nabla f\left(x^{(k)}\right)
Q=(?f(x(k)))T?f(x(k)) 解方程
[
Q
+
μ
I
]
Δ
x
=
?
?
S
(
x
(
k
)
)
[Q+\mu I] \Delta x=-\nabla S\left(x^{(k)}\right)
[Q+μI]Δx=??S(x(k)) ;
【6】令
x
(
k
+
1
)
=
x
(
k
)
+
Δ
x
x^{(k+1)}=x^{(k)}+\Delta x
x(k+1)=x(k)+Δx ,計算終止條件是否滿足,不滿足轉(zhuǎn)【7】;
【7】若
S
(
x
(
k
+
1
)
)
<
S
(
x
(
k
)
)
+
β
(
?
S
(
x
(
k
)
)
)
T
Δ
x
S\left(x^{(k+1)}\right)<S\left(x^{(k)}\right)+\beta\left(\nabla S\left(x^{(k)}\right)\right)^{T} \Delta x
S(x(k+1))<S(x(k))+β(?S(x(k)))TΔx ,令
μ
=
μ
/
v
\mu=\mu / v
μ=μ/v ,轉(zhuǎn)【8】,否則令
μ
=
μ
?
v
\mu=\mu * v
μ=μ?v ,轉(zhuǎn)【5】;
【8】令
k
=
k
+
1
k=k+1
k=k+1 ,轉(zhuǎn)【2】。文章來源:http://www.zghlxwxcb.cn/news/detail-432950.html
代碼實現(xiàn)
L-M法函數(shù)如下文章來源地址http://www.zghlxwxcb.cn/news/detail-432950.html
function [x,minf] = minLM(f,x0,beta,u,v,var,eps)
format long;
if nargin == 6
eps = 1.0e-6;
end
S = transpose(f)*f;
k = length(f);
n = length(x0);
x0 = transpose(x0);
A = jacobian(f,var);
tol = 1;
while tol>eps
Fx = zeros(k,1);
for i=1:k
Fx(i,1) = Funval(f(i),var,x0);
end
Sx = Funval(S,var,x0);
Ax = Funval(A,var,x0);
gSx = transpose(Ax)*Fx;
Q = transpose(Ax)*Ax;
while 1
dx = -(Q+u*eye(size(Q)))\gSx;
x1 = x0 + dx;
for i=1:k
Fx1(i,1) = Funval(f(i),var,x1);
end
Sx1 = Funval(S,var,x1);
tol = norm(dx);
if tol<=eps
break;
end
if Sx1 >= Sx+beta*transpose(gSx)*dx
u = v*u;
continue;
else
u = u/v;
break;
end
end
x0 = x1;
end
x = x0;
minf = Funval(S,var,x);
format short;
參考資料
- 小山豬——經(jīng)典算法專欄
- 數(shù)據(jù)結(jié)構(gòu)教程 第5版
到了這里,關(guān)于【Matlab算法】L-M法求解非線性最小二乘優(yōu)化問題(附L-M法MATLAB代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!