牛顿法、L-M算法

news2024/11/24 15:41:50

在进行解方程的时候,如下所示方程

其中,相应的k11、k12、k21、k22都是已知常量,可以见到其是一个非线性方程。关于非线程方程的求解,我看到网上有两种方法,牛顿法与L-M算法。

1.牛顿法

之前貌似学过,学过也忘记了,没有一点点印象

1.单参数

单参数的牛顿迭代法是非常简单的,c++代码一看就会。

2.双参数牛顿迭代法求解方式

单参数的牛顿法是比较容易求取的,但是双参数的牛顿法在网上很少见到,通过查阅资料可以得到,

单参数:

双参数:

我查了一下资料,上面的双参数的写法(chargtp)是错误的,首先是需要将两个方程变为一个方程。

第4.3讲-牛顿法(上)_哔哩哔哩_bilibili第4.3讲-牛顿法(上), 视频播放量 20003、弹幕量 23、点赞数 265、投硬币枚数 143、收藏人数 360、转发人数 101, 视频作者 MathSu, 作者简介 痴迷于数学研究与教学工作的福哥,带你一起探索高等数学、线性代数及最优化方法等课程中的奥秘,期待每一个聪慧的你加盟福哥学习部落!,相关视频:第4.2讲-最速下降法(上),第4.3讲-牛顿法(下),第3.5讲-牛顿法,BFGS牛顿法和拟牛顿法,6.3牛顿迭代法,牛顿法/拟牛顿法/BFGS/DFP算法数学推导(最优化理论),【数值分析】速成牛顿迭代法|考试宝典|一定能听懂!!,9 牛顿迭代法代码讲解,期末突击干货|数值计算|牛顿迭代法|解题步骤,牛顿求根法icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1JT4y1c7wS/?spm_id_from=333.337.search-card.all.click&vd_source=dd69cecd49e74d6c7b057643f172e2c1

感觉这个视频讲的比较好,因此进行一下记录:

依据上述方法写出自己想要的c++代码

错误版:

首先对于上述公式进行整理,得到:

我的大致的牛顿法函数如下所示:

#include <cmath>
#include <iostream>
#include <Eigen/Dense>
#define M_PI 3.14159265358979323846
#include <iostream>
#include <cmath>
#include <Eigen/Dense>
#include <unsupported/Eigen/NonLinearOptimization>

using namespace Eigen;
using namespace std;


// 定义牛顿法求解方程组的函数,前三个参数分别为输入的参数,第四个为迭代次数,第五个位判断条件
void newton_method(double x0, double x1, double x2, int max_iterations,double epsilon,double x_init,double y_init) {
	
	double x = x_init;
	double y = y_init;

	for (int i = 0; i < max_iterations; ++i) {
		//输入方程

		double fxy = sin(x) * x0 - cos(y) * x1 - sin(y) * x2;

		//第一次求导:
		double dfx_dx1 = cos(x) * x0;//给x求导
		double dfy_dy1 = sin(y) * x1 - cos(y) * x2;//给y求导
		
		//将第一次求导变为矩阵
		Eigen::Matrix<long double, 2, 1> matrix_dfxy1;
		matrix_dfxy1 << dfx_dx1,
			dfy_dy1;


		//第二次求导:下面方程是一个正定矩阵
		double dfx_dx2 = -sin(x) * x0;//给x求导
		double dfy_dy2 = cos(y) * x1 + sin(y) * x2;//给y求导

		//将第二次求导变为正定矩阵
		Eigen::Matrix<long double, 2, 2> matrix_dfxy2;
		matrix_dfxy2 << dfx_dx2, 0,
			0, dfy_dy2;

		//构造牛顿方向
		Eigen::Matrix<long double, 2, 1> matrix_xy;
		matrix_xy = -matrix_dfxy2.inverse() * matrix_dfxy1;

		double  delta_x = matrix_xy(0, 0);
		double  delta_y = matrix_xy(0, 1);
;

		if (abs(delta_x * delta_x + delta_y * delta_y) < epsilon) {
			std::cout << "Converged after " << i + 1 << " iterations." << std::endl;
			std::cout << "x = " << delta_x << ", y = " << delta_y << std::endl;
			return;
		}

		x = delta_x;
		y = delta_y;
	}

	std::cout << "Failed to converge after " << max_iterations << " iterations." << std::endl;
}

但是这里要进行初值的赋予,我的想法是针对已经转换好的

进行整理:

先画出b-a的图,这个地方需要用到matlab

我的matlab代码:

然后再进行推导

可得

matlab代码

% 设置 a1 的取值范围
a1 = 0:0.01:2*pi;

% 计算每个 a1 对应的 b1 值
b1 = acos((cos(a1) * 1.99362 - sin(a1) * (-0.00171141)) / 1.99334);

% 绘制函数图形
plot(b1, a1);
xlabel('b1');
ylabel('a1');
title('b1 = arccos((cos(a1) * 1.99362 - sin(a1) * (-0.00171141)) / 1.99262)');
grid on;

然后我们对于相应的代码进行两幅图像整合到一起

相应的matlab代码如下所示:

b = 0:0.001:2*pi;
a = asin((cos(b) * 0.00171141 + sin(b) * 1.99362)/ 1.9939);

plot(b, a);
hold on;

a1 = 0:0.001:2*pi;
b1 = acos((cos(a1) * 1.99362 - sin(a1) * (-0.00171141)) / 1.99334);

plot(b1, a1);

xlabel('b / b1');
ylabel('a / a1');
title('Intersection of asin and arccos Functions');
grid on;

% 找到交点的坐标
intersection_x = [];
intersection_y = [];

for i = 1:numel(b)
    for j = 1:numel(b1)
        if abs(b(i) - b1(j)) < 0.01 && abs(a(i) - a1(j)) < 0.01
            intersection_x = [intersection_x, b(i)];
            intersection_y = [intersection_y, a(i)];
        end
    end
end

% 在交点处标记
plot(intersection_x, intersection_y, 'ro');

% 输出交点坐标
intersection_coordinates = [intersection_x; intersection_y];
disp('Intersection Coordinates:');
disp(intersection_coordinates);

可以得到相应的初值:

注意:这个地方可以看到符合条件的点数是非常非常多的,为什么会出现这个现象,原因是判断条件没有设置好

重新调整阈值
 

b = 0:0.01:2*pi;
a = asin((cos(b) * 0.00171141 + sin(b) * 1.99362)/ 1.9939);

plot(b, a);
hold on;

a1 = 0:0.01:2*pi;
b1 = acos((cos(a1) * 1.99362 - sin(a1) * (-0.00171141)) / 1.99334);

plot(b1, a1);

xlabel('b / b1');
ylabel('a / a1');
title('Intersection of asin and arccos Functions');
grid on;

% 找到交点的坐标
intersection_x = [];
intersection_y = [];

for i = 1:numel(b)
    for j = 1:numel(b1)
        if abs(sqrt((b(i) - b1(j))^2+(a(i) - a1(j))^2 ))< 0.0009
            intersection_x = [intersection_x, b(i)];
            intersection_y = [intersection_y, a(i)];
        end
    end
end

% 在交点处标记
plot(intersection_x, intersection_y, 'ro');

% 输出交点坐标
intersection_coordinates = [intersection_x; intersection_y];
disp('Intersection Coordinates:');
disp(intersection_coordinates);

使用牛顿法求解,得到,明显错误。

正确版:

上面错误的原因是我将两个方程强行变成一个方程进行求解,因此出错。当时想到了这个问题,但是看了看网上很少写到两个方程组的。

当出现多元多次方程的时候,不能够将其变为一个方程进行处理,这种处理方式是错误的。应当将每一个方程看成是一个单独的量进行处理。

可以见到这里是非常的慢的,所以继续我们开始第二个L-M算法的学习

2.L-M算法

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

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

相关文章

基于SSM的服装自销电商平台设计

文未可获取一份本项目的java源码和数据库参考。 一、选题背景 在当今这个信息时代&#xff0c;“网上购物”这种购物方式已经为越来越多的人所接受&#xff0c;越来越多的人选择在网络上购买衣服&#xff0c;方便快捷且实惠。在这种背景之下&#xff0c;一个安全稳定并且强大…

Windows下的python安装教程_2024年10月最新最详细的安装指南

文章目录 前言一、下载python二、安装python三、验证环境四、配置环境变量&#xff08;可选&#xff09;总结 前言 Python 是一种广泛使用的高级编程语言&#xff0c;以其简洁易读的语法和强大的库支持而著称。无论你是初学者还是经验丰富的开发者&#xff0c;安装 Python 都是…

【Canvas与标牌】盾形银底红带Best Quality Premium标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>BestQulityPremium金属牌重制版Draft2</title><style type&…

【YOLOv8实时产品缺陷检测】

YOLOv8应用于产品缺陷检测实例 项目概况项目实现YOLOv8安装及模型训练关键代码展示动态效果展示 项目概况 本项目是应用YOLOv8框架实现训练自定义模型实现单一零件的缺陷检测&#xff0c;软件界面由PyQt5实现。 功能已正式使用&#xff0c;识别效果达到预期。 项目实现 项目…

刷题 二分查找

二分查找 二分查找的本质就是 缩小有效范围 需要注意&#xff1a; int mid (left right) / 2; int mid left (right - left) / 2; 防止溢出 hot100 - 二分查找 ⭐️35. 搜索插入位置 找到第一个大于等于 target 的值 class Solution { public:// 目标: 找到第一个大于…

PD取电诱骗协议芯片支持PD3.1 支持大电流、大功率(28V5A 140W)快速充电。

PD取电快充协议芯片XSP16是受电端的一种PD取电快充协议芯片&#xff0c;它支持PD2.0/3.0&#xff0c;PD3.1、QC2.0/3.0、华为SCP/FCP、三星AFC等快充协议。支持UART串口发送电压/电流消息&#xff0c;供外部MCU读取&#xff0c;以便适应不同的负载。支持从充电器、车充、充电宝…

计算机基础知识:计算机中丢失 msvcr110.dll怎么修复?

1. msvcp110.dll 介绍 1.1 定义&#xff1a;Microsoft Visual C 2012的一部分 msvcp110.dll是Microsoft Visual C 2012 Redistributable Package的一部分&#xff0c;这是一个运行时库文件&#xff0c;包含了Microsoft Visual C 2012编译器所构建程序所需的函数和资源。 1.2…

使用Markdown Here插件生成邮件样式

使用Markdown Here插件生成邮件样式 通常大学生们都有给老师、助教使用邮箱发送作业的情景&#xff0c;怎样让自己发送的邮件美观呢&#xff0c;我们可以使用Markdown Here插件美化 以下为结果展示 Markdown Here 插件 官网地址 html代码 <font size"7", face…

大数据ETL数据提取转换和加载处理

什么是 ETL&#xff1f; 提取转换加载&#xff08;英语&#xff1a;Extract, transform, load&#xff0c;简称ETL&#xff09;&#xff0c;用来描述将资料从来源端经过抽取、转置、加载至目的端的过程。ETL一词较常用在数据仓库&#xff0c;但其对象并不限于数据仓库。 ETL&…

迎接国庆旅游热潮,火山引擎数据飞轮助力景区数智化升级

随着人们生活水平的提高和旅游消费观念的转变&#xff0c;国庆假期成为人们出行旅游的黄金时段。同程旅行发布的报告显示&#xff0c;北京、杭州、重庆、上海、南京、成都等城市仍是 “十一” 假期国内热门的目的地&#xff0c;而一些新兴的宝藏旅游目的地如新疆阿勒泰、云南迪…

《向量数据库指南》——Fivetran+Mlivus Cloud:打造AI搜索神器

哈哈,各位向量数据库和 AI 应用的同仁们,今天咱们来聊聊一个超级实用的话题——如何借助 Fivetran 和 Mlivus Cloud 构建 AI 驱动的搜索工具,从非结构化数据中挖掘出无尽的宝藏! 在这个信息爆炸的时代,非结构化数据已经成为了企业最重要的资产之一。它包含了大量的文本、…

进入猛增模式后,小米股价还剩下多少上涨空间?

猛兽财经核心观点&#xff1a; &#xff08;1&#xff09;小米集团的股价已经上涨到了2022年以来的最高点。 &#xff08;2&#xff09;股价从2023年的最低点上涨了185%以上。 &#xff08;3&#xff09;随着智能手机的需求反弹和电动汽车利润率的增长&#xff0c;猛兽财经认为…

YOLOv10改进策略【注意力机制篇】| NAM 即插即用模块,重新优化通道和空间注意力(含二次创新)

一、本文介绍 本文记录的是基于NAM模块的YOLOv10目标检测改进方法研究。 许多先前的研究专注于通过注意力操作捕获显著特征&#xff0c;但缺乏对权重贡献因素的考虑&#xff0c;而这些因素能够进一步抑制不重要的通道或像素。而本文利用NAM改进YOLOv10&#xff0c;通过权重的贡…

数字人直播违规被“封”,一文助你彻底解决!

随着数字人直播的日渐兴起&#xff0c;与之相关的各类消息逐渐进入到人们的视野之中&#xff0c;并开始成为众多企业、创业者以及技术爱好者所重点关注的对象。就目前的讨论情况来看&#xff0c;热度最高且讨论次数最多的便是数字人直播违规吗这一话题。 的确&#xff0c;从数字…

一个three三维 文字 粒子 着色器的作品用来感谢大家对github点星

一个three三维 文字 粒子 着色器的作品用来感谢大家对github点星 源链接&#xff1a;https://z2586300277.github.io/three-cesium-examples/#/codeMirror?navigationThreeJS&classifyshader&idtextStarShader 国内站点预览&#xff1a;http://threehub.cn github地…

CVE-2024-9014 pgAdmin4 OAuth2 client ID与secret敏感信息泄漏漏洞

文章目录 免责声明漏洞描述搜索语法漏洞复现nuclei修复建议 免责声明 本文章仅供学习与交流&#xff0c;请勿用于非法用途&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 漏洞描述 pgAdmin4 是开源数据库 PostgreSQL 的图形管理工具攻击者可构造恶意…

向量数据库!AI 时代的变革者还是泡沫?

向量数据库&#xff01;AI 时代的变革者还是泡沫&#xff1f; 前言一、向量数据库的基本概念和原理二、向量数据库在AI中的应用场景三、向量数据库的优势和挑战四、向量数据库的发展现状和未来趋势五、向量数据库对AI发展的影响 前言 数据是 AI 的核心&#xff0c;而向量则是数…

一个设备不知道ip地址怎么办?应对策略来袭

在数字化时代&#xff0c;设备连接网络已成常态&#xff0c;IP地址作为设备的网络身份证&#xff0c;其重要性不言而喻。然而&#xff0c;面对设备IP地址遗失的困境&#xff0c;我们往往感到束手无策。 那么&#xff0c;一个设备不知道IP地址怎么办&#xff1f;本文将为你提供一…

中国通信技术革命史

文章目录 引言I 中国通信技术革命史电报中国卫星通信的历史固定电话寻呼机(BP机)大哥大(手机)制定自己的移动通信网络技术体系5G未来科技发展的总趋势:用更少的能量,传输、处理和存储更多的信息II 知识扩展通信史(单位能量的信息传输率越来越高,网络地不断融合。)超级智能…

秒杀系统的原则和注意项

做任何技术方案都需要结合当时的业务场景、资金情况、用户体量等维度综合考虑&#xff0c;没有最好的技术方案&#xff0c;只有最合适的技术方案。 做秒杀方案亦是如此&#xff0c;秒杀活动经常会引发高并发、系统宕机和库存超卖的棘手问题&#xff0c;作为开发者&#xff0c;我…