首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python实现所有算法-牛顿-拉夫逊(拉弗森)方法

Python实现所有算法-牛顿-拉夫逊(拉弗森)方法

作者头像
云深无际
发布于 2022-08-05 03:38:21
发布于 2022-08-05 03:38:21
62700
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

emmmmm,好长时间没有用matplotlib,都不会画图了。先绘制一个x**3-1的函数,然后考虑在a,b之间找他的根。

-10,10

-5,5

那么这个函数被起名为intersection

连续函数与x相交时就是根,是不是很形象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def intersection(function: Callable[[float], float], x0: float, x1: float) -> float:

因为我们知道,这个函数应该是我们给出要求解的区间和函数给出一个根。那么这里function的Callable就是可以当匿名函数传递。

为了函数的灵活性,这里使用float

主函数,因为我们函数其实不知道具体的函数的循环次数,那么就可以使用while的循环。

一开始要判断参数的情况,如果都相等,你这算啥???以及都带进去,再算一下,双保险,双重扑街。

接下来就是这个公式,我是个罪人,用了一张A4纸就写一个这

计算的X看看符合要求吗?不符合就继续将值域缩小。直到很小。

这个不是二分法,但是差不多的意思,不过这个是牛顿法,也叫牛顿-拉夫逊(拉弗森)方法,就我的题目。

这篇文章的下面就讲讲这个东西:

它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

多数方程不存在求根公式,因此求精确根非常困难,甚至不可解,从而寻找方程的近似根就显得特别重要。方法使用函数 f(x) 的泰勒级数的前面几项来寻找方程 f(x)=0 的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程 f(x)=0 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。

牛!

迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。

利用迭代算法解决问题,需要做好以下三个方面的工作:

一、确定迭代变量

在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。

二、建立迭代关系式

所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。

三、对迭代过程进行控制

在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析得出可用来结束迭代过程的条件。

然后,自己的函数也可以这样定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
intersection(f, 3, 3.5)

精度ok

再说说数值求法:

大多数的数值求根算法都使用迭代法,生成一个以方程的根为极限的收敛数列。它们需要一个或多个根作为迭代的初期值,之后每次迭代都生成一个逐步逼近根的值。

由于迭代法必须在有限步内终止于某个点,这些方法都只能提供一个根的近似值,而不能提供一个精确解。许多方法是通过代入上一个迭代值来计算一个辅助方程,从而得出下一个迭代值的。此处所指的辅助方程是指为了使原方程的根是一个定点并使迭代值能更快地收敛到这些定点而设计的一个方程,因此迭代值的极限是这个辅助方程的一个定点。

求根算法的性能是数值分析的研究范畴。一种算法的效率可能大幅度取决于已知点的性质。

例如,一部分算法都使用输入函数的导数(此要求函数不但连续,而且可导),而其他算法则能用于任何一个连续函数。在一般情况下,数值算法不能保证找到一个函数的所有根,因此算法未能找到根并不能证明方程无根。然而,对于多项式,存在特定的使用代数学性质以定位根的所在区间(或复根所在的圆盘)的算法,这个区间(或圆盘)足够小以能保证数值算法(例如牛顿法)能收敛到唯一被定位的根。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95/10887580?fromtitle=%E7%89%9B%E9%A1%BF%E6%B3%95&fromid=1384129
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://baike.baidu.com/item/%E6%B1%82%E6%A0%B9%E6%B3%95/2485456?fr=aladdin
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python实现所有算法-雅可比方法(Jacobian)
有一说一,矩阵的数值算法不是那么简单的写,我这里会推荐一些学习的资源假如你愿意学的话。
云深无际
2022/08/05
1.5K0
Python实现所有算法-雅可比方法(Jacobian)
【数值计算方法】非线性方程(组)和最优化问题的计算方法:非线性方程式求根的二分法、迭代法、Newton 迭代法及其Python实现
非线性方程式求根是一个重要的数值计算问题,常用的方法包括二分法、迭代法和牛顿迭代法。
Qomolangma
2024/07/30
4870
【数值计算方法】非线性方程(组)和最优化问题的计算方法:非线性方程式求根的二分法、迭代法、Newton 迭代法及其Python实现
牛顿迭代法求开方
多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数
王小明_HIT
2020/03/11
1.3K0
C语言实现牛顿迭代法解方程
在可以用迭代算法解决的问题中,我们可以确定至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
杨源鑫
2019/07/04
3.7K0
C语言实现牛顿迭代法解方程
Python实现所有算法-牛顿优化法
求导是数学计算中的一个计算方法,它的定义就是,当自变量的增量趋于零时,因变量的增量与自变量的增量之商的极限。在一个函数存在导数时,称这个函数可导或者可微分。可导的函数一定连续。不连续的函数一定不可导。
云深无际
2022/08/05
9330
Python实现所有算法-牛顿优化法
算法--迭代法
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
奋飛
2019/08/15
1.1K0
牛顿迭代解方程 ax^3+bX^2+cx+d=0
$$ x1 \times x2 + x1 \times x3 + x2 \times x3 = \frac{c}{a} $$
owent
2018/08/01
1.5K0
牛顿法
复习go语言基础的时候,看到一个算法题,求特定值的平方根(不使用特定库函数的前提下),常见的方法要么是二分法要么是牛顿法。
f1sh
2024/07/25
2390
Python实现所有算法-牛顿前向插值
今天的算法是插值,细分是牛顿插值。关于插值可能大家听到最多的就是图像插值,比如100元的摄像头有4K的分辨率???其实这里就是使用的插值算法,通过已经有的数据再生成一些,相当于提升了数据的量。如果我们想放大图像,我们需要使用过采样算法来扩展矩阵。
云深无际
2022/08/05
1.1K0
Python实现所有算法-牛顿前向插值
数学建模--二分法
在数学建模中,二分法是一种常用的数值方法,用于求解方程的根或函数的极值问题。其基本思想是通过不断将区间一分为二,逐步缩小搜索范围,最终找到满足精度要求的近似解。
用户11315985
2024/10/16
3670
数学建模--二分法
牛顿迭代法求解平方根
迭代,是一种数值方法,具体指从一个初始值,一步步地通过迭代过程,逐步逼近真实值的方法。 与之相对的是直接法,也就是通过构建解析解,一步求出问题的方法。
用户1147754
2019/05/27
1.5K0
日拱一卒,伯克利教你牛顿法,而我只想逃课……
今天我们继续来看伯克利CS61A,我们来看作业5的最后一道附加题。这道题非常有意思,涉及很多知识,因此想要完整讲明白,需要很多篇幅,所以单独写了一篇。
TechFlow-承志
2022/09/21
4910
日拱一卒,伯克利教你牛顿法,而我只想逃课……
每日一问之初识牛顿迭代法(Newton's method)
今天在刷 LeetCode 的 sqrt(x) 这道题的时候,看到别人的解法中有使用牛顿迭代法。之前也看到这个方法很多次,但都没有去了解。今天正好就这个问题来稍微整理一下:
caoqi95
2019/03/28
1.6K0
每日一问之初识牛顿迭代法(Newton's method)
牛顿迭代法的可视化详解
来源:DeepHub IMBA本文约1800字,建议阅读10分钟本文利用可视化方法,为你直观地解析牛顿迭代法。 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。 以 Isaac Newton 和 Joseph Raphson 命名的 Newton-Raphson 方法在设计上是一种求根算法,这意味着它的目标是找到函数 f(x)=0 的值 x。在几何上可以将其视为 x
数据派THU
2022/03/04
7050
算法细节系列(3):梯度下降法,牛顿法,拟牛顿法
话不多说,直接进入主题。在我看来,不管是梯度下降法还是牛顿法,它们都可以归结为一个式子,即
用户1147447
2019/05/26
2.5K0
理解牛顿法
牛顿法是数值优化算法中的大家族,她和她的改进型在很多实际问题中得到了应用。在机器学习中,牛顿法是和梯度下降法地位相当的的主要优化算法。在本文中,SIGAI将为大家深入浅出的系统讲述牛顿法的原理与应用。
SIGAI学习与实践平台
2018/08/07
1.7K0
理解牛顿法
程序与数学:牛顿迭代法与平方根近似计算
这个等式是一元二次方程,解方程即可求得x。现在正实数平方根计算问题已转换为解一元二次方程问题。
郎宏林
2021/10/08
1.6K0
程序与数学:牛顿迭代法与平方根近似计算
算法浅谈——走迷宫问题与广度优先搜索
我们都知道,工业上的很多问题经过抽象和建模之后,本质还是数学问题。而说到数学问题就离不开方程,在数学上我们可以用各种推算、公式,但是有没有想过在计算机领域我们如何解一个比较复杂的方程?
TechFlow-承志
2020/03/19
9550
算法浅谈——走迷宫问题与广度优先搜索
R语言实现牛顿迭代算法
我们今天给大家介绍一个用来迭代的算法牛顿迭代法(Newton's method)。单变量下又称为切线法。它是一种在实数域和复数域上近似求解方程的方法。首先我们看下牛顿迭代算法的公式:
一粒沙
2019/11/04
13.3K0
Java程序设计(Java9版):第3章 流程控制
程裕强
2018/01/02
3K0
相关推荐
Python实现所有算法-雅可比方法(Jacobian)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验