科学计算与仿真-高斯牛顿法的非线性最小二乘问题简单介绍与应用

微信公众号:创享日记
发送:高斯牛顿
获取完整报告(含源程序代码)


一、问题的提出
在日常生活和科学研究中,人们经常会遇到这样一类问题:在某些条件下,寻求某一数量指标的最大或最小值。例如:在资源有限的情况下,制造尺寸最大的箱子;如何根据手中的资金情况确定收益最大的投资方向等等。这类问题用数学语言描述就是函数的最值问题,也称为最优化问题。

优化问题的一个重要应用就是数据拟合问题。数据拟合问题需要消除误差或忽略无关细节,从干扰数据中提取信号或找出趋势,将大量数据降低到可管理的数量或用简单的近似来代替复杂函数。完成这个工作的最普遍和最便于计算的方法之一就是最小二乘法。

最小二乘法是从误差拟合角度对回归模型进行参数估计或系统辨识,并在参数估计、系统辨识以及预测、预报等众多领域中得到极为广泛的应用。当我们用一个模型来描述现实中的一系列数据时,模型的预测结果与实际的测量结果总会存在一定偏差,这一偏差就称为残差。非线性最小二乘的目的就是,调整模型的参数,使得总的残差最小。常用的算法有两类,一类是搜索算法,另一类是迭代算法。本报告中采用迭代算法。

在实际生产生活中,非线性最小二乘问题的求解方法在生物、医药、电子、化学、计算机科学等领域有广泛应用。

二、问题的分析
当处理最优化问题时,若f为关于x的线性函数,通常通过对函数直接求导求得函数的全局最优解;而若f为x的非线性函数,则无法直接对函数求导以及准确求得函数的全局最优解,因此只能通过求目标函数的局部最小值,并且尝试从局部最小值拓展到全局最小值。局部最小值的求解过程中需要涉及到驻点以及目标函数的一、二阶导数,故可将该问题转化为多元函数的极值问题。

非线性最小二乘法的原理如下:
有一个未知量x∈R^n,为估计该未知量,我们进行m次观测。根据观测到的数据(t_i,y_i) (i=1,…,m)来拟合一个已知函数y=f(x,t),其中x为待定系数,且x=(x_1,x_2,…,x_n)(n≤m)。第i次观测的理论模型可用已知函数f_i:R^n→R来描述,而第i次观测的实际值为y_i∈R,i=1,…,m。我们称
r_i (x)=r_i (x,t_i)=y_i-f_i (x,t_i)(1)
为第i次观测的残差。
给定式(1)的数学模型,在工程上,求x的估计量 的一个常用准则是最小二乘准则。该准则认为,使得所有观测的残差的平方和最小的 是最优的。
我们可以将m个残差写成向量形式
r(x)=[r_1 (x),r_2 (x),…,r_m (x)]^T(2)
此时,所有观测的残差的平方和可以写成式(3)
在这里插入图片描述
对于非线性最小二乘问题,一般有LM法、信赖域方法、梯度下降法、高斯牛顿法等处理方法。在本文中,主要采用高斯牛顿法研究非线性最小二乘问题。

三、高斯-牛顿算法
3.1算法的原理
高斯-牛顿算法是非线性回归模型中求回归参数进行最小二乘的一种迭代方法,其基本思想是使用泰勒级数展开式近似地代替非线性回归模型,然后通过多次迭代,多次修正回归系数,使回归系数不断逼近非线性回归模型的最佳回归系数,最后使原模型的残差平方和达到最小。其直观思想是先选取一个参数向量的参数值x,若函数f(x,t)在x_0附近有连续二阶偏导数,则在x_0的邻域内可近似地将f(x,t)看作是线性,因而可近似地用线性最小二乘法求解。
假定在第k次迭代后,将残差函数向量r(x)在x^((k))进行一阶泰勒展开,得到r(x)的线性近似
在这里插入图片描述
其中,∆x((k))=(x((k))-x)为第k次迭代后的估计误差
在这里插入图片描述
是雅可比矩阵(Jacobian matrix)。
于是根据式(3),最小二乘最小化的目标函数可以近似为
在这里插入图片描述
利用经典的线性最小二乘问题的结论,可得上式的极值点(即第(k+1)次迭代后的最优解)为
在这里插入图片描述
在这里插入图片描述
接下来再对经典的线性最小二乘问题做一个简要的介绍。线性最小二乘是一种求解线性系统参数的方法,即参数估计的方法。它的特点是需要已知参数与观察量之间的线性函数关系并且存在多余观测。
线型函数关系是指对于一个参数估计问题,我们往往不能直接获得想要的参数值,需要通过间接观测的方式去反向求解。为此,我们总是建立我们想要求解的参数X与我们易于观测量Y之间的函数关系
F(X)=Y (8)
通过已知的Y和已知的函数关系F(X),反推出X的值。
当我们已知的这个函数关系是线性的时候,我们可以化简为
AX=Y (9)
其中A是参数X与观测Y之间的线性函数关系(线性运算(乘和加)可以由矩阵A表示)。因此,若已知观测Y和线性关系A,则可求解代求参数X。
多余观测是指除了能唯一确定某个几何或物理模型的必要观测之外的其余观测值。当存在多余观测时,无法简单对矩阵A求逆,为更加准确地求出参数X,可以借助最小二乘来求解此类问题。
解决线性最小二乘问题三种常见直接算法:正规方程、QR分解和SVD分解。一般来说,正规方程是最快的,特别是当A的条件数较小时,正规方程几乎和其他方法一样精确。SVD分解最慢,但最可靠。

3.2算法的实现
本文采用MATLAB实现高斯-牛顿算法。
依靠《随机过程》课堂中老师对MATLAB的讲解,同时借助《信号与系统》课程的实验部分学习及网上MATLAB相关教程对MATLAB算法有一定的了解。主要学习了解了本实验中会涉及的MATLAB知识,如:矩阵相关运算,系统预定义的变量eps,图形绘制功能等。
在计算机中实现高斯-牛顿算法时,我们需要给定以下输入:
①残差向量函数r ②雅可比矩阵函数J ③允许的最大迭代次数K
④能够接受的误差阈值ϵ ⑤未知参数初始值x(0)
具体算法基本步骤如下:
在这里插入图片描述
应用实例
实例:设一噪声模型形如y=e(ax2+bx+c)+l,其中l为噪声,a、b、c为待解算系数。
具体代码见附录(详见报告)。
其中给定a=1,b=2,c=3;最大迭代次数K为1000;
残差函数向量为
在这里插入图片描述
雅可比矩阵函数为
在这里插入图片描述
代码运行后结果如下:
在这里插入图片描述
噪声模型拟合曲线如下图:
在这里插入图片描述
​参考文献及附录程序代码详见报告!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK 11:Java序列化的终结开始了吗?

在博客文章“ 将Google的协议缓冲区与Java结合使用 ”中,我引用了乔什布洛赫(Josh Bloch)的第三版的有效Java ,他写道:“没有理由在您编写的任何新系统中使用Java序列化。” Bloch建议使用“跨平台结构化数据表示形式”…

一种QC-LDPC码对突发噪声抑制的MATLAB仿真

欢迎同步关注公众号【逆向通信猿】 对博客BPSK调制下(2,1,3)、(2,1,6)卷积码与QC-LDPC码译码性能和抑制突发噪声性能对比(MATLAB实现)中 LDPC码对突发噪声的抑制性能作一个补充仿真,结果如下 代码如下: % LDPC code clear; close all; clc Nb = 203000; % number of bit…

锅炉汽包温度控制系统设计(过程控制课程设计matlab/simulink)

微信公众号:创享日记 发送:锅炉汽包 获取完整报告matlab/simulink仿真源文件 一、组员任务分工说明 xxx同学负责绘画出带控制点的工艺流程图,并构建控制方案的原理方框图。xxx同学完成了在MATLAB中仿真模型的搭建,参数调试和仿真结…

【超级鼠标键盘锁】之实现思路(非驱动实现)

曾经,学习孙鑫老师的《VC++深入详解》时,接触到了钩子HOOK原理,一度对HOOK技术特别感兴趣,便自然而然产生了实现“鼠标键盘锁”的想法。通过查资料和尝试,受看雪大神heiheiabcd的博客: https://blog.csdn.net/linfei2707/article/details/25237671 的启发,于2018年初步…

Mysql中的快照读和当前读

mysql当前读和快照读(MVCC) mysql读取数据实际上有两种读取模式:当前读和快照读 当前读:每次读取的都是当前最新的数据,但是读的时候不允许写,写的时候也不允许读。 快照读:读写不冲突&#xff…

仿王者荣耀网页-前端网页技术设计完整精美源码HTML+CSS+JS

效果预览①主页首页 效果预览②游戏介绍页 效果预览③游戏攻略页 效果预览④手办商城页 效果预览⑤问卷调查页 效果预览⑥加入我们页 微信公众号:创享日记 发送:王者荣耀 获取完整源码(打开即可用) 其余及源码详见下载&…

仿今日头条实时新闻微信小程序项目源码

微信公众号:创享日记 发送:今日头条 获取完整源码(微信开发者工具导入即可用) 以下可以忽略不看! 今日头条是北京字节跳动科技有限公司开发的一款基于数据挖掘的推荐引擎产品,为用户推荐信息、提供连接人与…

【超级鼠标键盘锁】之HOOK钩子屏蔽鼠标和Ctrl+Alt+Del、Win+L之外的按键

最初,于2018年初步实现了windows7 64位系统下的鼠标键盘锁。然而,随着时光的流逝,微软已经放弃了对windows7系统的更新与维护,windows10系统已经不断地普及,是时候研究一下win10系统下的鼠标键盘锁了。 ①HOOK钩子dll实现 HOOK钩子动态链接库部分的实现,直接在VS中建立…

perl大骆驼和小骆驼_从代码内部:骆驼路由引擎第一部分

perl大骆驼和小骆驼因此,最近我重新燃起了对Apache Camel的工作方式的兴趣。 Camel是一种功能强大的集成工具,使用非常广泛,但是只要我将其投入使用,我都会忍不住想“好吧,这到底是怎么做的!” …我只是有一…

高频小信号谐振放大器设计-课程设计Multisim仿真

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:高频课设 获…

【超级鼠标键盘锁】之winlogon.exe进程调试

至此,除了Ctrl+Alt+Del、Win+L组合键之外,其他能想到的按键和鼠标都屏蔽了,对于这两个组合键的屏蔽,看下论坛中有位前辈heiheiabcd很早之前就写了一篇文章: https://blog.csdn.net/linfei2707/article/details/25237671 文章提到四种想法,其中第四种方法堪称完美,好像这…

Java机器学习,第1部分

您搜索了某种导出机器学习模型的方法,以便可以将它们用于评估数据,并且看到可以PMML格式导出它们。 您实际上是在Java生态系统中工作的,但没有动机既不编写PMML库也不为其编写Rest API。 然后,我将向您推荐LightningScorer &#…

微波技术基础实验二 功分器与定向耦合器设计

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:耦合器 获取…

【超级鼠标键盘锁】之远线程注入winlogon.exe进程屏蔽Ctrl+Alt+Del、Win+L

通过上一节对winlogon.exe进程的调试,得到了其处理Ctrl+Alt+Del和Win+L按键的关键代码位置偏移,并阐述了如何对指令进行修改,从而达到屏蔽这两个按键。 本节采用远线程注入技术进行实现。 一、远线程注入与卸载 远线程注入和卸载部分主要参考书籍《Windows核心编程》,在…

微波技术基础实验一 滤波器的设计

微信公众号:创享日记 发送:滤波器 获取完整报告工程源文件 一、新建滤波器工程和设计原理图 新建一个workspace,并创建原理图。在图中放置电容、电感并用导线连接。双击电容和电感,设置电容为2pF,电感为1.5nH&#xff…

【超级鼠标键盘锁】项目工程下载地址

一、【超级鼠标键盘锁】之实现思路(非驱动实现) 二、HOOK钩子屏蔽鼠标和Ctrl+Alt+Del、Win+L之外的按键 ①HOOK钩子dll实现 ②主程序实现 三、winlogon.exe进程调试 ①window7系统winlogon.exe调试 ②windows10系统winlogon.exe调试 系统版本1 系统版本2 ③在内存中…

微波技术大作业课设-分立电容电感+微带单枝短截线+微带双枝短截线

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:微带 获取完…

java 观察者模式示例_Java中的观察者设计模式-示例教程

java 观察者模式示例观察者模式是行为设计模式之一 。 当您对对象的状态感兴趣并希望在发生任何更改时得到通知时,观察者设计模式很有用。 在观察者模式中,监视另一个对象状态的对象称为Observer ,而正在监视的对象称为Subject 。 根据GoF&am…

电磁场与电磁波实验一 熟悉Matlab软件在电磁场领域的应用

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:matlab电磁…

高斯信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列、Gold序列和正交Gold序列)(代码见CSDN同名资源,博客中也有代码)

关注公号【逆向通信猿】更精彩!!! 一、伪随机序列PN码的生成 伪随机序列有很多种,如m序列、Gold序列和正交Gold序列,其中m序列的构造及MATLAB生成方法见: 线性移位寄存器序列(m序列)之MATLAB实现 m序列虽然性能优良,但同样长度的m序列个数不多,且m序列之间的互相…