牛顿迭代法解非线性方程组(附C++代码)

2023-10-30

目录

一、公式介绍

二、应用环境

三、C++代码

实例说明

C++编译环境

C++代码

运行结果 

特别注意

解决方法


一、公式介绍

牛顿迭代法基本公式,迭代出{x^{(k + 1)}}

{x^{(k + 1)}} = {x^{(k)}} - \frac{​{f({x^{(k)}})}}{​{f'({x^{(k)}})}}

面对非线性方程组问题,将上式变形

{x^{(k + 1)}} = {x^{(k)}} - F'{(x)^{ - 1}}F(x)

其中F'(x)为:

F'(x) = \left| {\begin{array}{*{20}{c}} {\frac{​{\partial f}}{​{\partial x}}}&{\frac{​{\partial f}}{​{\partial y}}}\\ {\frac{​{\partial g}}{​{\partial x}}}&{\frac{​{\partial g}}{​{\partial y}}} \end{array}} \right|

注:这里面的{x^{(k + 1)}}不再时代表一个值,而是代表关于(x,y)变量的一个矩阵,F(x)同理,代表着关于x,y的一个公式矩阵F(x) = \left| {\begin{array}{*{20}{c}} {f(x,y)}\\ {g(x,y)} \end{array}} \right|,(F(x)内x,与{f(x,y)}{g(x,y)}内x不同!)

二、应用环境

       牛顿迭代法主要用于求解在面对未知变量,计算困难,我们无法求出精确解时,使用的方法。可以利用特殊迭代的方式进行求解近似解。

三、C++代码

实例说明

\left\{ {\begin{array}{*{20}{c}} {​{x^2} - 2x - y + 0.5}\\ {​{x^2} + 4{y^2} - 4} \end{array}} \right.

C++编译环境

程序编译环境:vs 2013

C++代码

#include<iostream>
#include<armadillo>
using namespace std;
using namespace arma;

//牛顿迭代法解非线性方程组
//例题:x^2-2x-y+0.5
//      x^2+4y^2-4
double f(double x0,double y0)
{
	return pow(x0, 2) - 2 * x0 - y0 + 0.5;
}
double g(double x0, double y0)
{
	return pow(x0, 2) + 4 * pow(y0, 2) - 4;
}
double fx(double x, double y)    //记录f求x偏导值
{
	double w=2 * x - 2;
	return w;
}

double fy(double x, double y)    //记录f求x偏导值
{
	double w = -1;
	return w;
}

double gx(double x, double y)    //记录f求x偏导值
{
	double w = 2 * x;
	return w;
}

double gy(double x, double y)    //记录f求x偏导值
{
	double w = 8 * y;
	return w;
}

void join(mat A)      //输入矩阵.x系数
{
	cout << "请输入未知数x个数" << endl;
	int n;
	cin >> n;
	for (int w = 1; w <= n; w++)
	{
		cout << "请输入第" << w << "行的值" << endl;
		for (int i = 0; i < n; i++)
		{
			cout << "请输入第" << i + 1 << "个数据的值" << endl;
			double temp;
			cin >> temp;
			A << temp;
		}
		A << endr;
	}
	
}

void ND(double x0,double y0)   //牛顿迭代法实现,x0,y0为初始值
{
	int n=0;
	double y1;
	mat T1;
	mat T;
	double x1;
	do
	{
		n++;
		y1 = y0;
		x1 = x0;
		mat temp;
		temp << fx(x0, y0) << fy(x0, y0) << endr
			<< gx(x0, y0) << gy(x0, y0) << endr;
		mat b;
		b << f(x0, y0) << endr
			<< g(x0, y0) << endr;

		T << x0 << endr
			<< y0 << endr;
		//mat r = inv(temp);
		T = T - inv(temp)*b;
		x0 = T(0, 0);
		y0 = T(1, 0);
	} while (abs(x0 - x1)> 1e-5||abs(y0 - y1)>1e-5);
	cout << "共迭代" << n << "次" << endl;
	cout << "最终结果为:" << x0 << "    " << y0 << endl;
}
void main()
{
	ND(2, 0.25);
}

运行结果 

特别注意

       由于此算法有矩阵的计算,为了使代码更加简洁,高效,上述代码调用了armadillo库,进行相应的矩阵计算(如果没有配置armadillo库,编译时不会通过,会报错!)

解决方法

       在以下链接文章中,详细说明了如何配置armadillo库以及使用,便于读者可以解决上述c++代码编译不通过的问题。同时,armadillo库也是一个计算矩阵非常方便的库文件,在其它数学矩阵计算方面也有很好的应用。

链接:

http://t.csdn.cn/3WF0I

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

牛顿迭代法解非线性方程组(附C++代码) 的相关文章

  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • ros1 bag to ros2 bag play

    有个问题是 ros1格式的bag需要转到ros2格式的bag 怎么弄 需要注意的是 这里只能提供标准信息的rosbag转换 如果带有自定义msg的rosbag 应该是不可以的 请注意一下 解决办法 安装依赖 sudo apt install
  • 【IDEA】对于IDEA出现程序包无法找到或者js代码无法加载问题的6种解决方案

    前言 在平时做项目时 我们有时候会出现各种奇奇怪怪的bug 标题所列举的这两种情况我都遇到过 搜的博客解决方案也很多都是一样的 今天我就给大家汇总一下解决方案 一 如果你是使用maven管理项目 在idea右上角能够看到Maven 点击Ma
  • java 比较两个类_Java 中有没有直接可以判断两个类是否相同的方法?

    展开全部 java没有直接判e5a48de588b662616964757a686964616f31333337623436断两个雷是否相同 但提供了如下方法 1 如果说两个对象的判断可以使用 equals 或者 2 如果判断对象是否某个类
  • JVM知识点(二)

    1 G1垃圾收集器 XX MaxGCPauseMillis 10 G1的参数 表示在任意1s时间内 停顿时间不能超过10ms G1将堆切分成很多小堆区 Region 每一个Region可以是Eden Survivor或Old区 这些区在内存
  • 三种memcached的JAVA客户端比较

    Memcached客户端程序 Memcached的java客户端已经存在三种了 官方提供的基于传统阻塞io由Greg Whalin维护的客户端 DustinSallings实现的基于java nio的Spymemcached XMemcac
  • Python3,我用这种方式讲解python模块,80岁的奶奶都说能理解。建议收藏 ~ ~

    Python模块讲解 1 引言 2 python模块详解 2 1 含义 2 2 代码示例 2 3 进阶 3 总结 1 引言 小屌丝 鱼哥 你看天上的月亮越来越圆了 小鱼 唉 又是一年团圆夜 又是一年中秋节 小屌丝 嘿嘿 可不滴 这个中秋 你
  • GIT error: object file is empty?

    how to fix GIT error object file is empty 前几天在使用git status 产生了一个错误 经过多方搜索 找到一篇文章 现简述一下大意 原文 开始 当我尝试提交一个修改时 我得到了一个错误 erro
  • Servlet 规范和 Servlet 容器

    如果大家觉得文章有错误内容 欢迎留言或者私信讨论 前引 通过之前的学习我们知道浏览器发给服务器的 HTTP 请求在服务器端需要调用服务端的程序来处理 也就是我们写的 Java 类 一般来说不同请求对应不同的 Java 类 那么问题来了 HT
  • 解决vue中样式不起作用:样式穿透/深度选择器(/deep/)

    项目场景 提示 这里简述项目相关背景 解决vue中样式不起作用 样式穿透 深度选择器 deep 原因分析 提示 这里填写问题的分析 原因1 组件内部使用组件 添加了scoped属性 原因2 动态引入html 也添加了scoped属性 原因3
  • 工作中PTO和OOO是什么意思?

    PTO paid time off 带薪休假 其实就是我们所说的请年假 OOO out of office 就是字面意思 不在办公室 推荐一篇商务英文缩写介绍 ASAP OOO FYI 你都看得懂嗎 步入職場 一定要會的50個 商用縮寫
  • UE4(一)- 源码分析起点

    06 21 2020 UE4源码分析的起点 UE4文件结构 UE4 Editor UE4 C 项目文件夹结构 UE4 源码分析的起点 项目中的main函数 UObject 继承树 1 Gameplay类 Objects Actors Com
  • Nodejs开发(二)-项目打包和运行

    在Nodejs开发 一 Windows搭建Node环境搭建nodejs环境之后 接着进行项目的打包和运行 1 npm run build prod 首先管理员方式打开cmd 然后cd到项目所在文件夹 执行命令npm run build pr
  • NOKIA 刷机 6680

    使用NOKIA最新的PC套件6 82版可以在线刷机了 必须为6 82版 下载地址 http nds1 nokia com files support global phones software Nokia PC Suite 682 rel
  • 小兔鲜儿 - 微信登录

    目录 微信登录 登录方式 静态结构 获取登录凭证 获取手机号码 微信登录接口 生产环境 模拟手机登录 开发环境 用户信息持久化存储 涉及知识点 微信授权登录 文件上传 Store 状态管理等 微信登录 微信小程序的开放能力 允许开发者获取微
  • u盘安装CentOS(linux)的步骤(含双系统)

    为了学习新的知识 决定给自己的神舟本子装上CentOS系统 于是乎就自己在网上搜了教程 然而自己在安装的过程中还是出现了小问题 尤其是为了进入图形安装界面花了我很大的力气 经过多次尝试终于成功 每次装系统我的本子都会受到摧残 o 为了能给想
  • vs2015中cuda提示<<<>>>需要输入表达式

    在vs2015中写cuda代码进行编译时发现在调用核的时候 lt lt lt gt gt gt 总是提示有错误 编译提示输入表达式 但是编译是通过的 我的这个文件类型是cuda文件 cu 因为在vs中使用的是c 的语法提示 所以这个地方总是
  • Python数据库SQLite中的fetchone()、fetchMany()、fetchall()函数

    今天在练习python数据库的查询操作时 使用fetchone fetchMany fetchall 函数 出现了一些奇怪的现象 现在做如下记录 我想在同一个代码块中 使用fetchone 查询一条信息 使用fetchmany 3 查询3条
  • SQL Server中的登录名和用户名映射关系

    SQL Server 1 SQL Server 中 一个登录名可以映射多个数据库用户名 但是一个数据库用户名不能同时被两个数据库登录名映射 可以分别被A映射完 再被B映射 否则会干掉其中的一个 2 guest 用户是一个数据库用户名 是一个
  • oracle中的几种分区方式

    1 列表分区 1 1 分区技术实质可以把数据分摊到不同的物理位置 增加I O负载 提高检索效率 可用性 分区表可以跨越表空间 而普通表则不然 好处就是如果表的一个分区损坏 其他分区不会受到影响我们只需要修复损坏的分区即 可 1 2 创建li
  • 牛顿迭代法解非线性方程组(附C++代码)

    目录 一 公式介绍 二 应用环境 三 C 代码 实例说明 C 编译环境 C 代码 运行结果 特别注意 解决方法 一 公式介绍 牛顿迭代法基本公式 迭代出 面对非线性方程组问题 将上式变形 其中为 注 这里面的不再时代表一个值 而是代表关于变