文章目录

  • 一、基本原理
  • 二、原理深入讲解
    • 1 、切线是曲线的线性逼近
    • 2、 牛顿-拉夫逊法
    • 3 、牛顿-拉夫逊法是否总是收敛(总是可以求得足够近似的根)?
  • 三、pythons实例
  • 总结

一、基本原理

对于一个方程 f ( x ) = 0 ,我们将函数 f ( x )单独考虑。
    若函数 f ( x ) (n+1)阶可导,则我们在初始值 x = x 0 处进行泰勒展开,可得:

令 x − x 0= Δ x ,然后将上述泰勒公式一阶展开,忽略余项可得:

   令其等于 f ( x ) = 0,可得:

   从而求出:

二、原理深入讲解

1 、切线是曲线的线性逼近

要讲牛顿迭代法之前我们先说一个关键问题:切线是曲线的线性逼近。
   这个是什么意思呢?我们来看一看,下面是 f(x)=x^2 的图像:

我们随便选一点f(x) 上的一点(a,f(a))作它的切线:

   我们在A点处放大图像:

上图中,红色的线是f(x),黑色的是A点处的切线,可以看出放大之后切线和f(x)非常接近了。很明显,如果我们进一步放大图像,A点切线就越接近f(x)。

因为切线是一条直线(也就是线性的),所以我们可以说,A点的切线是f(x)的线性逼近。离A点距离越近,这种逼近的效果也就越好,也就是说,切线与曲线之间的误差越小。所以我们可以说在A点附近,“切线约等于 f(x) ”。

2、 牛顿-拉夫逊法

牛顿-拉夫逊法提出来的思路就是利用切线是曲线的线性逼近这个思想。
   牛顿、拉夫逊们想啊,切线多简单啊,研究起来多容易啊,既然切线可以近似于曲线,我直接研究切线的根不就成了。
然后他们观察到这么一个事实:

   随便找一个曲线上的A点(为什么随便找,根据切线是切点附近的曲线的近似,应该在根点附近找,但是很显然我们现在还不知道根点在哪里),做一个切线,切线的根(就是和x轴的交点)与曲线的根,还有一定的距离。牛顿、-拉夫逊们想,没关系,我们从这个切线的根出发,做一根垂线,和曲线相交于B点,继续重复刚才的工作:

之前说过,B点比之前A点更接近曲线的根点,牛顿、拉弗森们很兴奋,继续重复刚才的工作:

第四次就已经很接近曲线的根了

经过多次迭代后会越来越接近曲线的根(下图进行了50次迭代,哪怕经过无数次迭代也只会更接近曲线的根,用数学术语来说就是,迭代收敛了):

3 、牛顿-拉夫逊法是否总是收敛(总是可以求得足够近似的根)?

我们来看看收敛的充分条件:

f(x)
二阶可导,那么在待求的零点
x
周围存在一个区域,只要起始点
x_0
位于这个邻近区域内,那么牛顿-拉弗森方法必定收敛。

也就是说,在这个区域内,用切线代替曲线这个直觉是合理的。但是,因为我们不知道根点到底在哪里,所以起始点 x_0 选择就不一定在这个区域内,那么这个直觉就不可靠了。
驻点

   起始点不幸选择了驻点,从几何上看切线根本没有根。
从代数上看,x{n+1}=xn-f(xn)/f’(xn)没有意义。
越来越远离的不收敛

循环震荡的不收敛

不能完整求出所有的根

三、pythons实例

牛拉法主要流程

以 x 2 − 4 x - 4 = 0 为例,设计 Python 程序:


import numpy as np
import pandas as pd
import matplotlib.pyplot  as pltdef fun(x):y = x ** 2 - 4 * x - 1return ydef fun_diff(x):y = 2 * x - 4return ydef Netwon(x0, func, dfunc):# 迭代条件e = 1e-5x = np.zeros(2)x[0] = x0x[1] = x0 - func(x[0]) / dfunc(x[0])while abs(func(x[0])) > e:#在0附近x[0] = x[1]x[1] = x[0] - func(x[0]) / dfunc(x[0])return x[1]if __name__ == '__main__':x=np.arange(-5,5,0.1)y=fun(x)x1=Netwon(0, fun, fun_diff) #牛拉法求得的点plt.plot(x,y)plt.xlim(-5, 5)plt.ylim(-10, 50)plt.scatter(x1,fun(x1),color='red')plt.show()

总结

应用牛顿-拉夫逊方法,要注意以下问题:
函数在整个定义域内最好是二阶可导的
起始点对求根计算影响重大,可以增加一些别的判断手段进行试错


作者:电气-余登武

牛顿-拉夫逊法 原理讲解以及python算例实现相关推荐

  1. 电力系统潮流【牛顿-拉夫逊法】(4节点、5节点、6节点、9节点)(Matlab代码实现)

    目录 1 概述 2 电力系统潮流计算概述 2.1 电力潮流发展进程 2.2牛顿拉夫逊法潮流计算 3 仿真结果 4 Matlab代码及文章讲解

  2. 2021-06-16 节点电压为极坐标下的牛顿-拉夫逊法潮流计算学习

    以节点电压为极坐标下的牛顿-拉夫逊法潮流计算 节点电压用极坐标表示的牛顿-拉夫逊法的潮流计算 节点电压用极坐标表示的牛顿-拉夫逊法的潮流计算  当节点电压使用极坐标时,节点电压表示为:  节点功率方式 ...

  3. python三种方法开根号(穷举法、二分法、牛顿拉夫逊法)

    文章目录 方法一:穷举法 方法二:二分法 方法三:牛顿-拉夫逊算法 总结 方法一:穷举法 positive_num = int(input("输入一个正数:")) #无穷逼近法 a ...

  4. 牛顿拉夫逊PQ节点法c语言编程,牛顿拉夫逊介绍(原理、计算方法、程序)..doc

    4 3 牛顿-拉夫逊法概述 3.1 牛顿-拉夫逊法基本原理 电力系统潮流计算是电力系统分析中的一种最基本的计算,是对复杂电力系统正常和故障条件下稳态运行状态的计算.潮流计算的目标是求取电力系统在给定运 ...

  5. 【极坐标下牛顿—拉夫逊潮流计算(matlab版+python版)】

    程序名称## 极坐标下牛顿-拉夫逊潮流计算(matlab版+python版) 程序功能(对象) 适用于任意大小的纯交流电网,支持节点和支路的增删: 适用于接入多个风电.光伏等分布式电源: 子函数包含: ...

  6. 牛顿-拉夫逊法进行潮流计算matlab源程序

    一.前言 潮流计算是电力网络设计及运行中最基本的计算,对电力网络的各种设计方案及各种运行方式进行潮流计算,可以得到各种电网各节点的电压,并求得网络的潮流及网络中各元件的电力损耗,进而求得电能损耗. 在 ...

  7. 数学之美:牛顿-拉夫逊迭代法原理及其实现

    关注.星标嵌入式客栈,精彩及时送达 [导读] 前面刚转了一篇文章提到了牛顿-拉夫逊(拉弗森)(Newton-Raphson method)方法,感觉这个数学方法很有必要相对深入写一篇文章来总结分享印证 ...

  8. 数值计算方法 matlab用二分法或简单迭代法求_数学之美:牛顿-拉夫逊迭代法原理及其应用...

    [导读] 前面刚转了一篇文章提到了牛顿-拉夫逊(拉弗森)(Newton-Raphson method)方法,感觉这个数学方法很有必要相对深入写一篇文章来总结分享印证一下自己的理解.这是写本文的由来,如 ...

  9. 电力系统潮流计算(牛顿-拉夫逊法、高斯-赛德尔法、快速解耦法)【6节点 9节点 14节点 26节点 30节点 57节点】(Matlab代码实现)

最新文章

  1. 4月机器学习热文出炉,这10篇文章你读了吗?
  2. 8个让人相见恨晚的软件,每一款都十分良心
  3. 准确率precison与正确率accuracy区别
  4. C# winform 捕获全局异常
  5. jqprintsetup已经安装还会提示_英雄联盟PBE服务器安装指南 抢先体验新模式“云顶之弈”不用等...
  6. .NET中如何通过文本框中按回车键进行的提交数据
  7. python中的JSON到底怎么用?
  8. powergrep linux版本,PowerShell实现简单的grep功能
  9. 利用python爬虫(part10)--Xpath节点集与函数
  10. u盘efi安装linux6.5,CentOS6.5安装的UEFI-GPT回退为MBR引导详解
  11. OpenCV如何提取人眼区域的眼球位置
  12. 【批处理】快速批量修改特定文件夹的文件名
  13. 学习 Java全栈工程师6.0 初学者笔记1 2021-08-09
  14. php 解压 中文文件夹,如何把文件夹压缩为rar
  15. uni-app通过canvas将两张图片合成一张图片
  16. 博途v15模拟量转换_浅谈西门子S7-1200PLC的模拟量转换,附实例演示
  17. Python文本挖掘练习(一)// 新闻摘要
  18. 游轮帆船租赁旅游响应式模板
  19. python sklearn K-Mearns---实例——消费水平
  20. Golang的压测工具 hey

热门文章

  1. html中js添加或删除activex,JS:操作样式表2 :用JS实现添加和删除一个类名的功能(addClass()和removeClass())...
  2. linux增加php进程数,linux - 调整php-fpm进程数之后,为什么负载飙升的厉害
  3. 有一种努力叫:靠 自 己!
  4. 解析性语言与编译性语言优劣对比
  5. Spring Boot——自定义多个拦截器(HandlerInterceptor)配置方法与执行顺序
  6. sun game server (sgs)初探
  7. weblogic11g集群配置
  8. Redis-学习笔记02【Redis命令操作】
  9. 软件工程概论 课堂练习 第2次作业1【思考:POS系统的对象关联】
  10. 分支界限算法【0-1背包问题】按照优先队列式(LC)分支限界法求解0-1背包问题, 并给出限界函数,并画出该实例的状态空间树。