C++ 数学与算法系列之牛顿、二分迭代法求解非线性方程

2023-11-18

1. 前言

前文介绍了如何使用“高斯消元法”求解线性方程组。

本文秉承有始有终的态度,继续介绍“非线性方程”的求解算法。

本文将介绍 2 个非线性方程算法:

  • 牛顿迭代法。
  • 二分迭代法。

牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),是拉夫逊牛顿同时提出来的一种在实数域复数域近似求解方程的方法。

为何说是近似求解方程

因为对于多数方程式,因不存在求根公式,或者说无法或很难找到标准的可以直接套用的模板公式。

因而求精准解非常困难,从而寻找方程的近似根就显得特别重要。

即使如牛顿大神提出的方法,也只是近似求解的算法,甚至需要满足某种收敛条件的方程式才能使用牛顿迭代法求解。

下面将具体介绍这 2 种求解算法。

2. 牛顿迭代算法

下面将通过一系列演示图,直观告诉大家牛顿迭代法的算法思想。算法中,牛顿用到了微积分相关的知识。

所以,在阅读下文时,需要具备微积分的认知。

牛顿迭代算法求解方程式的过程,有点类似福尔摩斯探案。通过蛛丝马迹,先合理的预测,然后根据推理逻辑,让预测离真相近一点、再近一点……一直到找到或接近真相。

实事告诉我们,不是所有的预测都能找到真相。同理,基于预测的牛顿迭代法也不一定总是能找到方程式的解,看完下面的演示流程,你将明白。

假设现有一非线性方程式 f(x),其在平面坐标轴上的曲线图案如下。所谓求解,指求其与横坐标轴相交时的点的 x值。

n1.png

现在,看看牛顿是如何使用微积分思想找到这个解的。只能说,牛逼人的思想非我等凡人能比拟。

2.1 基本思想

  • 在横坐标上找一 x0 点(也称预测点),并绘制 (x0,f(x0)) 点与曲线相交的切线。切线和横坐轴相交于 x1

n9.png

  • 再绘制(x1,f(x1))点与曲线的切线,此时,切线与横轴相交于x2,继续绘制出(x2,f(x2))与曲线的交点……如此迭代,直到切线与横坐标轴的交点与曲线和横坐标的交点重合,此交合点便是曲线的解。是不是很简单,为什么是牛顿发现的,而不是我?

n2.png

  • x0的选择并不完全是任意的,也应该有基本的推理依据。预测点是关键,如果与真实值相差太远,则迭代次数会很大。理论上,只要预测点给的好,且此方程式满足牛顿迭代算法的前提条件,无论迭代多少次,解必能找出来,无非就是时间的长短。

2.2 如何求解 x1

现在的问题转向到如何通过已知的x0值计算出x1的值?是否存在一个标准的公式?

现在就是微积分上场的时候,请屏住呼吸!真相将昭然若揭。

  • x0 和 x1之间选择任一点x,从此点向上绘制垂直线,假设与切线相交的位置的纵坐标值为y 。并绘制如下箭头所指的三角形。

n3.png

  • 三角形为直角三角形,学过三角函数的都知道,会存在如下的关系。

n5.png

n4.png

  • 现在轮到微积分知识上场,它告诉我们,其中的tan0就是切线与曲线的斜率。根据微积分原理,斜率即是x0在曲线上的导数,可以根据导函数计算出来,即tan0=f'(x0)。太完美了,如此公式可演变如下:

n6.png

继续化丽的转身后,它便如涅槃重生一样,破茧成如下人见人爱的模样:

n7.png

  • 因切线与横坐标轴相交的位置y=0,从而便可以求得 x1的值:
									
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 数学与算法系列之牛顿、二分迭代法求解非线性方程 的相关文章

随机推荐

  • C++/C++11中头文件iterator的使用

  • 总结c++笔试题目

    若有以下说明和语句 请选出哪个是对c数组元素的正确引用 int c 4 5 cp 5 cp c A cp 1 B cp 3 C cp 1 3 D cp 2 正确答案 D 解析 cp c 这个语句是将数组第0行的地址赋给了cp cp 1使指针
  • Kendo UI开发教程(6): Kendo DataSource 概述

    Kendo 的数据源支持本地数据源 JavaScript 对象数组 或者远程数据源 XML JSON JSONP 支持CRUD操作 创建 读取 更新和删除操作 并支持排序 分页 过滤 分组和集合等 准备开始 下面创建一个本地数据源 1 va
  • insert into select 和 insert into values区别

    INSERT INTO SELECT语句 从一个表复制数据 然后把数据插入到一个已存在的表中 将一个table1的数据的部分字段复制到table2中 或者将整个table1复制到table2中 这时候我们就要使用SELECT INTO 和
  • RS232 Android获取串口数据

    串口 串行接口简称串口 也称串行通信接口或串行通讯接口 通常指COM接口 是采用串行通信方式的扩展接口 串行接口 Serial Interface 是指数据一位一位地顺序传送 其特点是通信线路简单 只要一对传输线就可以实现双向通信 可以直接
  • STM32 printf函数无法使用

    要想STM32使用printf函数打印 需要三个条件 条件1 魔术棒配置 条件2 有以下函数 重定向c库函数printf到串口DEBUG USART 重定向后可使用printf函数 int fputc int ch FILE f 发送一个字
  • Java 8:让你的代码更简洁、高效和灵活的新特性

    Java 8 企业中使用最普遍的版本 那么了解它的新特性是非常有必要的 目录 一 函数式接口 二 Lamdba表达式 三 方法引用 四 Stream API 3 1 创建 方法一 通过集合 方法二 通过数组 方法三 通过Stream的of
  • 零知识证明

    一 概念 证明者能够在不向验证者提供任何有用的信息的情况下 使验证者相信某个论断是正确的 零知识证明 Zero Knowledge Proof 起源于最小泄露证明 设P表示掌握某些信息 并希望证实这一事实的实体 设V是证明这一事实的实体 假
  • 前端例程20220728:点击涟漪效果按钮

    演示 原理 监听按钮点击事件 点击事件中获取点击位置 在点击位置生成一个元素作为水波 水波生成后通过扩散同时变透明 水波根据动画时间变透明后销毁 代码
  • 使用Kotlin 重写毕设项目

    Kotlin目前已经转正 成为 Android 开发一级语言 前段时间不忙 将毕业设计用Kotlin 进行重写 毕业设计 Java 版 https blog csdn net qq 29375837 article details 8265
  • 谁能看懂这幅图?

    谁能看懂这幅图
  • 基于MediaPlayer实现视频播放

    一 概述 一个简单的视频播放器 满足一般的需求 使用原生的 MediaPlayer 和 TextureView来实现 功能点 获取视频的首帧进行展示 网络视频的首帧会缓存 视频播放 本地视频或者网络视频 感知生命周期 页面不可见自动暂停播放
  • 51单片机入门——矩阵键盘(附51代码)

    1 硬件介绍 矩阵键盘电路图 硬件如图非常简单 将一个4 4的矩阵键盘的8个管脚引到端子上 在连接到8个I O口上 ARRAY H代表着行 ARRAY L代表着列 当行与列的电平都置低的时候 就选中的相应的矩阵按键 比如当s1按下时 ARR
  • Shell if 条件判断

    Shell 语言中的if条件 一 if的基本语法 if command then 符合该条件执行的语句 elif command then 符合该条件执行的语句 else 符合该条件执行的语句 fi 二 文件 文件夹 目录 判断 b FIL
  • Android系统换字体不root,安卓手机更换字体简易方法(免ROOT)

    很多童鞋都是玩机族 都喜欢diy自己的手机来追求个性 更换手机字体是大家都热衷做的事 但至于换字体的方法 很多童鞋是折腾半天都不明觉厉 有的同学利用高深的方法 先root获取手机权限啊 改系统文件啊 改这改那的终于换了字体 但有时候一重启
  • 【机器学习】6:K-近邻(KNN)算法实现手写数字识别的三种方法

    前言 本来觉得自己从数据建模转人工智能方向应该问题不大 自我感觉自己算法学的不错 结果一个K 邻近实现手写数字识别的代码就让我改了三四天 虽然网上这方面的代码是很多 但是我运行了好几个 结果都不是很理想 一次偶然的念想 为什么我不把这些代码
  • HttpRunner 的中文使用手册

    2018开工大吉 给大家送上 HttpRunner 的中文使用手册 http cn httprunner org
  • 手机端使用ghelper_Anki手机端使用指南(一)

    本篇会对如何使用手机端anki进行详解 有小伙伴询问在应用商店搜索anki找不到名字叫 anki 的软件 这里解释一下 在手机端的名字和电脑端的名字不太一样 安卓对应的名字叫做AnkiDroid IOS对应的名字叫做Ankimobile 不
  • 快速排序法

    partition函数 int partition vector
  • C++ 数学与算法系列之牛顿、二分迭代法求解非线性方程

    1 前言 前文介绍了如何使用 高斯消元法 求解线性方程组 本文秉承有始有终的态度 继续介绍 非线性方程 的求解算法 本文将介绍 2 个非线性方程算法 牛顿迭代法 二分迭代法 牛顿迭代法 Newton s method 又称为牛顿 拉夫逊方法
Powered by Hwhale