Matlab 非线性迭代法(3)阻尼牛顿法 L-M

news2024/11/28 23:59:19

高斯牛顿法详解_我只是一只自动小青蛙的博客-CSDN博客

一、思想

先看一下牛顿高斯迭代法的缺点:

1、在计算的过程中可能会出现奇异矩阵(不满秩),比如:J(k)​)TJ(k) 为病态矩阵的时候就不能得到正确的解,或者在求inv((J(k)​)TJ(k) )的时候不可逆,那么这个就无法在计算下去了​

2、当Δxk的过大的时候可能会导致,x(k+1)=x(k)+Δxk ​迭代不准确,算法不收敛

因此:在这个基础上提出了置信区间u

 对于病态矩阵,L-M提出了采用系数矩阵阻尼的方法来改造矩阵J(k)​)TJ(k)使得算法能计算下去。

二、步骤

1、初始值设定 u 和系数初始值 a  b  c d 

2、计算(Jf'*Jf  +uI)delta_x=Jf'f(x) ,解出delta_x,

3、判断精度

4、xk=xk+delta_x

5、判断p 并迭代出新的u

 

p>0.75  u=2u  

p<0.25  u=0.5u

当ρ接近1时,近似效果好;
当ρ 太小时,实际减小的值远小于近似函数减小的值,近似效果差,需要缩小近似范围μ 
当ρ较大时,实际减小的值大于近似函数减小的值,近似效果差,需要增大近似范围μ 
 

% L-M 迭代算法 
close all;
clear ;
clc;
% y(i)=a*exp(-(x(i)-b).^2/c.^2)+0.1*rand(1); 函数模型
% 在拟合数据的时候用的系数是
% a=1;
% b=4;
% c=10;
% 因此在拟合参数的时候,这里用 a=0.866
a=0.966;
b=3.98;
c=9.98;
d=0;
% 设置优化半斤
u=0.001;

segma=0.0000000001;% 精度
iterator_num=100;% 最大跌代次数
x=load('x.mat');
act_x=x.x;
y=load('y.mat');
len=length(act_x);
jacobian_d=ones(len,1);
I=ones(4,4);
act_y=y.y;
plot(act_x,act_y,'.');
hold on;
for i=1:iterator_num
  % 计算误差
    y=a*exp(-(act_x-b).^2/c.^2)+d;
    r=act_y-y;
    % 开始计算偏导数矩阵
    jacobian_a=exp(-(act_x - b).^2/c.^2);
    jacobian_b=(a*exp(-(act_x - b).^2/c.^2).*(2.*act_x - 2*b))/c.^2;
    jacobian_c=(2*a*exp(-(act_x - b).^2/c.^2).*(act_x - b).^2)/c.^3;
    % jacobian_d
    Jf=[jacobian_a,jacobian_b,jacobian_c,jacobian_d];
    gx=Jf'*r;
    %(Jf'*Jf  +uI)delta_abcd=Jf'f(x)
    % H =Jf'*Jf
    H=Jf'*Jf;
    delta_abcd=inv(Jf'*Jf+u.*I)*Jf'*r;
    %delta_abcd=inv(Jf'*Jf)*Jf'*r;
    %Jf'*Jf+u
    % g=H*delta_abc  增量方程
    if norm(delta_abcd)<segma
        break;
    end
    
    % 计算 pa pb pc pd 
    a_iterator=a+delta_abcd(1);
    b_iterator=b+delta_abcd(2);
    c_iterator=c+delta_abcd(3);
    d_iterator=d+delta_abcd(4);
    u=correction_p(act_x,delta_abcd,u,y,a_iterator,b_iterator,c_iterator,d_iterator,Jf);
    
    a=a_iterator;
    b=b_iterator;
    c=c_iterator;
    d=d_iterator;
end
it_y=a*exp(-(act_x-b).^2/c.^2)+d;
plot(act_x,it_y,'-');
legend('act','fit','Location','southoutside','Orientation','horizontal')

% 计算相关性
function  u=correction_p(act_x,delta,u,y,a,b,c,d,Jf)
 y_1=a*exp(-(act_x-b).^2/c.^2)+d;
 pp=Jf*delta;
 ys=y_1-y;
 p=ys\pp;
 if p>0.75
   x=2*u;
 elseif p<0.25
    x=0.5*u;
 end
 u=x;
end 

 

 

有误请指出共同探讨!!! 

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

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

相关文章

如何提升性能测试效能

上周六应邀在天津devops峰会的质量内建专场做了一次分享&#xff0c;主题是《稳定性保障利器&#xff1a;全链路压测》。 其中关于全链路压测对质量内建的意义&#xff0c;我做了一个总结&#xff0c;如下图所示。本文基于下图做了展开描述&#xff0c;仅供参考。 如何理解性能…

从零开始Vue3+Element Plus后台管理系统(八)——模仿禅道做一个Vue3版本的高级查询组件

暗黑模式 使用 Vue3element Plus 简单模仿了禅道系统的高级搜索组件&#xff0c;说简单也有点复杂&#xff0c;还没有完全开发完&#xff0c;但是大体架子有了&#xff0c;剩下一些功能点继续coding。边开发边记录吧&#xff0c;因为这个相比之前的内容确实复杂一些&#xff0c…

Java的基操,基操(一)

&#x1f525;二进制&#x1f525;二进制和十进制的转化&#x1f525;注释&#x1f525;标识符&#x1f525;关键字/保留字&#x1f525;变量(variable) &#x1f525;二进制 二进制&#xff0c;是计算技术中广泛采用的一种数制&#xff0c;由德国数理哲学大师莱布尼茨于 1679 …

Helm chart 常用命令以及原理和生产实践

问: 到哪里去搜索helm package? 答: artifacthub.io Helm 的实质就是搞一些模版&#xff0c;最终依据这些模版生成k8s的系列yaml文件(deployemnt,service,secret,map等等),从而在k8s上能够简单部署出完整应用。可以用helm template查看最终生成的k8s部署文件。 helm version…

MQTT客户端应用编程及接口分析

MQTT客户端应用编程及接口分析 MQTT协议简介 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的&#xff0c;这些特点使它适用范围非常广泛。 客户端服务端安装 1.安装 sudo apt-add-repository ppa:mosquitto-dev/mosquitto-…

SpringCloud_服务注册中心_Consul(八)

SpringCloud_服务注册中心_Consul(八) 分为五部分 Consul简介 安装并运行Consul 服务提供者 服务消费者 三个注册中心异同点 Consul简介 官网&#xff1a;https://developer.hashicorp.com/consul/docs/intro 是Go语言写的 Consul是一套开源的分布式服务发现和配置管理系统&am…

GB50312-2016标准中需要检测的参数(AEMFLUKE)含双绞线和光

很多同学经常搞不清GB50312-2016标准的规定测试参数&#xff0c;或者说和测试设备对不上号。特意从标准中摘抄出来&#xff0c;供大家参考。 ACR-F(Attenuation to Crosstalk Ratio at the Far-end) 衰减远端串音比 ACR-N(Attenuation to Crosstalk Ratio at the Near-end)衰…

用于申威Alpha指令集处理器CModel裸机(不带操作系统)的CoreMark性能测试程序源码编译流程

CoreMark是一个综合基准&#xff0c;用于测量嵌入式系统中使用的中央处理器(CPU)的性能。它是在2009由eembc的shay gal-on开发的&#xff0c;并且试图将其发展成为工业标准&#xff0c;取代过时的dehrystone基准。代码用C编写&#xff0c;包含以下算法&#xff1a;列表处理(增删…

如何在Colab中使用gpu资源(附使用MMdet推理示例)

如何在Colab中“白嫖”gpu资源&#xff08;附使用MMdet推理示例&#xff09; Google Colab简介 当今&#xff0c;深度学习已经成为许多人感兴趣的话题&#xff0c;Google Colab&#xff08;全称为Google Colaboratory&#xff09;是Google推出的一个强大的云端 notebook&…

《微服务实战》 第七章 Spring Cloud 之 GateWay

前言 API 网关是一个搭建在客户端和微服务之间的服务&#xff0c;我们可以在 API 网关中处理一些非业务功能的逻辑&#xff0c;例如权限验证、监控、缓存、请求路由等。 1、通过API网关访问服务 客户端通过 API 网关与微服务交互时&#xff0c;客户端只需要知道 API 网关地…

UWB智慧工厂人员定位系统源码,人员在岗监控、车辆实时轨迹监控源码

近年来人员定位系统在工业领域的发展势头迅猛&#xff0c;工业识别与定位成为促进制造业数字化的关键技术。通过实时定位可以判断所有的人、物、车的位置。实时定位系统要适用于复杂工业环境&#xff0c;单一技术是很难实现的&#xff0c;需要融合多种不同的定位技术&#xff0…

【hive】hive grouping sets和GROUPING__ID的用法

前言​ GROUPING SETS,GROUPING__ID,CUBE,ROLLUP 这几个分析函数通常用于OLAP中&#xff0c;不能累加&#xff0c;而且需要根据不同维度上钻和下钻的指标统计&#xff0c;比如&#xff0c;分小时、天、月的UV数。 grouping sets根据不同的维度组合进行聚合&#xff0c;等价于…

从事网络安全工作,这五大证书是加分项!

对我们而言&#xff0c;无论从事什么工作&#xff0c;考取相关证书都有非常重要的作用&#xff0c;它是我们找工作时的加分项&#xff0c;同时也是对我们技术水平的验证&#xff0c;那么从事网络安全工作可以考哪些证书?本篇文章为大家介绍一下。 1、CISP 国家注册信息安全专业…

vue3【父子组件间的传值--setup语法糖】

这篇文章主要讲解vue3语法糖中组件传值的用法、 一、父组件给子组件传值 父组件 <template><div classmain>我是父组件<Child :msg"parentMsg"></Child></div></template><script setup> import Child from ./child im…

idea热部署插件JRebel激活

JRebel可以实现在idea中热部署项目&#xff0c;修改后不用重启项目&#xff0c;让开发更丝滑。 JRebel需要激活才可以正常使用。 不想安装服务的可以用我个人部署的服务器注册&#xff0c;不保证稳定哦&#xff0c;有问题可以留言。 安装完插件直接看激活。 http://121.5.183.2…

亲水性Sulfo-Cyanine3 NHS ester水溶性CY3标记活性脂

Sulfo-Cy3是一种荧光染料&#xff0c;可用于生物成像和细胞标记等应用。Sulfo-Cy3是一种含有硫酸基的Cy3染料&#xff0c;具有高度的水溶性和稳定性。Sulfo-Cy3可以与NHS&#xff08;N-羟基琥珀酰亚胺&#xff09;结合&#xff0c;形成Sulfo-Cy3 NHS&#xff0c;这种结合物可以…

微生物常见统计检验方法比较及选择

谷禾健康 微生物组经由二代测序分析得到庞大数据结果&#xff0c;其中包括OTU/ASV表&#xff0c;物种丰度表&#xff0c;alpha多样性、beta多样性指数&#xff0c;代谢功能预测丰度表等&#xff0c;这些数据构成了微生物组的变量&#xff0c;大量数据构成了高纬度数据信息。 针…

[JS与链表]双向链表

前言 阅读本文前请先阅读 [JS与链表]普通链表_AI3D_WebEngineer的博客-CSDN博客 ES6的Class继承 类的继承可以使用extends&#xff0c;让子类继承父类的属性和方法。 而在子类内部&#xff08;构造函数constructor&#xff09;必须调用super()实现继承&#xff08;super()代表父…

基于MPSOC+C6678+高精度AD/DA的软件无线电处理平台

板卡概述 VPX_XM630 是一款基于6U VPX 总线架构的高速信号处理平台&#xff0c;该平台采用一片Xilinx 的Kintex UltraScale 系列FPGA&#xff08;XCKU115&#xff09;作为主处理器&#xff0c;完成复杂的数据采集、回放以及实时信号处理算法。采用一片带有ARM 内核的高性能嵌入…

k8s简单记录

进入pod中的某个容器并执行命令 # 进入pod中的busybox容器&#xff0c;查看文件内容 # 补充一个命令: kubectl exec pod名称 -n 命名空间 -it -c 容器名称 /bin/sh 在容器内部执行命令 # 使用这个命令就可以进入某个容器的内部&#xff0c;然后进行相关操作了 # 比如&#x…