【Matlab算法】L-M法求解非线性最小二乘优化问题(附L-M法MATLAB代码)

这篇具有很好参考价值的文章主要介绍了【Matlab算法】L-M法求解非线性最小二乘优化问题(附L-M法MATLAB代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

博主一头小山猪目前已开放所有文章:小山猪——经典算法专栏

活动地址:CSDN21天学习挑战赛

正文

L-M法求解非线性最小二乘优化问题

L-M法 (Levenberg-Marquardt法)原理
当矩阵 ( J k ) T J k \left(J_{k}\right)^{T} J_{k} (Jk)TJk 为病态矩阵时,用G-N算法可能得不到正确的解,甚至当 ( J k ) T J k \left(J_{k}\right)^{T} J_{k} (Jk)TJk 不可逆时, 这时G-N算法就无法计算下去。L-M算法通过采用系数矩阵阻尼的方法改造矩阵 ( J k ) T J k \left(J_{k}\right)^{T} J_{k} (Jk)TJk 的性 态,使算法能够进行下去。
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 μ 为阻尼系 数)求出自变量的增量,另一个是阻尼系数 μ \mu μ 的调整算法。
算法步骤
用L-M法求解非线性最小二乘优化问题 min ⁡ S ( x ) \min S(x) minS(x) 的算法过程如下:
【1】给定初始点 x ( 0 ) x^{(0)} x(0) ,选取参数 β ∈ ( 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)))Tf(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)))Tf(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 ,计算终止条件是否满足,不满足转【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 ,转【8】,否则令 μ = μ ∗ v \mu=\mu * v μ=μv ,转【5】;
【8】令 k = k + 1 k=k+1 k=k+1 ,转【2】。

代码实现

L-M法函数如下文章来源地址https://www.toymoban.com/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;

参考资料

  1. 小山猪——经典算法专栏
  2. 数据结构教程 第5版

到了这里,关于【Matlab算法】L-M法求解非线性最小二乘优化问题(附L-M法MATLAB代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线性方程组AX=b,AX=0以及非线性方程组的最小二乘解(解方程组->优化问题)

    超定方程组无解是因为方程组包含了过多的约束条件,无法满足所有的约束条件,在这种情况下,方程组的某些方程必然是矛盾的,也就是说,他们描述的条件是不兼容的,无法同时满足。 所以求解超定方程组其实是一个拟合问题,其基本思想是最小化所有方程的误差平方和

    2024年02月08日
    浏览(47)
  • matlab实现牛顿迭代法求解非线性方程

    非线性方程是指含有未知数的方程,且方程中至少有一个未知数的次数大于一或者含有非一次幂的函数(如指数、对数、三角函数等)。例如,$f(x) = x^3 - 2x - 5 = 0$就是一个非线性方程。非线性方程通常没有显式的解析解,因此需要使用数值方法来近似求解。 牛顿迭代法(N

    2024年02月11日
    浏览(49)
  • 【单谐波非线性振动问题求解器 GUI 】使用单个谐波表示解决 MDOF 非线性振动问题(Matlab代码实现)

    目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 对于解决多自由度(MDOF)非线性振动问题,使用单个谐波表示是一种常见的近似方法。这种方法将系统的非线性部分在谐波振动的基础上线性化,从而简化求解过程。 以下是一个基于GUI的单谐波非线性振动问题

    2024年02月15日
    浏览(40)
  • MATLAB 之 非线性方程数值求解、最优化问题求解和常微分方程初值问题的数值求解

    非线性方程的求根方法很多,常用的有牛顿迭代法,但该方法需要求原方程的导数,而在实际运算中这一条件有时 是不能满足的,所以又出现了弦截法、二分法等其他方法。 在 MATLAB 中,非线性方程的求解和最优化问题往往需要调用最优化工具箱来解决。优化工具箱提供了一

    2024年02月08日
    浏览(53)
  • 节点不连续伽辽金方法在求解线性和非线性平流方程中的一维实现(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文提

    2024年02月12日
    浏览(52)
  • 牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现

    必做题目比较简单,写得有些随意,主要还是第二个拓展题目的难度比较高 传入题设数据有: 另附运行截图  

    2024年02月11日
    浏览(44)
  • 6自由度并联机器人 运动学算法 正解 逆解6个耦合的非线性方程组求解

    6自由度并联机器人 运动学算法   正解  逆解 6个耦合的非线性方程组求解 正解快速收敛可用在机器人控制中 已实际使用 6自由度并联机器人运动学算法及其在机器人控制中的应用 随着社会科技的不断发展,机器人技术在工业自动化和服务业中的应用越来越广泛。其中,高自

    2024年04月28日
    浏览(49)
  • 机器视觉【3】非线性求解相机几何参数

    上一章节介绍学习了(DLT)线性求解相机几何参数,了解到线性求解法当中比较明显的缺点: 没有考虑到镜头畸变的影响 不能引入更多的约束条件融入到DLT算法当中优化 最关键的是,代数距离并不是计算相机矩阵的最佳距离函数 基于以上问题点,提出非线性求解方法。 将

    2024年02月21日
    浏览(53)
  • 非线性最优化问题求解器Ipopt介绍

    Ipopt(Interior Point OPTimizer) 是求解大规模非线性最优化问题的求解软件。可以求解如下形式的最优化问题的(局部)最优解。 m i n ⏟ x ∈ R n     f ( x ) s . t . g L ≤ g ( x ) ≤ g U x L ≤ x ≤ x U (0) underbrace{min}_ {x in Rⁿ} , , , f(x) \\\\ s.t. g_L ≤ g(x) ≤ g_U \\\\ x_L ≤ x ≤ x_U tag{0} x ∈ R

    2024年01月20日
    浏览(55)
  • 【数学建模】Python+Gurobi求解非线性规划模型

    目录 1 概述 2 算例  2.1 算例 2.2 参数设置 2.3 Python代码实现 2.4 求解结果 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。 参考:(非线性规划Python)计及动态约束及节能减排环保要求的经济调度 2.1 算例 2.2 参数设置 求解NLP/非凸问题时,

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包