例1:给定方程$$f(x) = x^2 + sin x - 1 = 0$$,判别该方程有几个实根,并用牛顿法求出方程所有实根,精确到$$10^{-4}$$.

解:利用画图法观察根的所在区间为(-2,-1)和(0,1),其中蓝色为$$y=f(x)$$的曲线,橘黄色的直线是$$y=0$$.



画图代码:import numpy as np

import matplotlib.pyplot as plt

def fun(x):

return x**2 + np.sin(x) - 1

def plotCurves():

x = np.linspace(-3, 3, 100)

y = fun(x)

y1 = 0.*x

plt.plot(x,y)

plt.plot(x,y1)

def main():

plotCurves()

if __name__ == '__main__':

main()

另外一种观察方法是,将原来的函数分解为$$y=sin x$$和$$y=1-x^2$$两个函数,然后观察它们的交点,如下图所示:import numpy as np

import matplotlib.pyplot as plt

def plotCurves2():

x = np.linspace(-3, 3, 100)

y1 = np.sin(x)

y2 = 1 - x**2

plt.plot(x,y1)

plt.plot(x,y2)

def main():

plotCurves2()

if __name__ == '__main__':

main()

下面分别以-2和0为初值,用牛顿法求解根。由于$$f(x)=x^2 + sin(x) -1$$,因此$$f'(x) = 2 x + cos(x)$$.# -*- coding: utf-8 -*-

"""

给定方程f(x) = x^2 + sin x - 1 = 0,判别该方程有几个实根,并用牛顿法求出方程所有实根,精确到1e-4.

@author: morxio

"""

import numpy as np

def fun(x):

'''函数f(x)'''

return x**2 + np.sin(x) - 1

def dfun(x):

"""函数的导函数f'(x)"""

return 2 * x + np.cos(x)

def newton(x0, eps1, eps2, N):

"""

牛顿迭代法x = x - f(x)/f'(x)

x0:初值, N:最大迭代次数

eps1:根误差限,eps2:函数误差限

返回方程的根

"""

for k in range(0,N,1):

x = x0 - fun(x0) / dfun(x0)

print(x)

if np.abs(x) < 1:

if np.abs(x-x0) < eps1 or np.abs(fun(x)) < eps2:

print(f"经过{k:d}次迭代,初值为{x0:f}的根为{x:.6f}, 此时函数值为{fun(x):.6f}")

return (x,k, fun(x))

else:

if np.abs(x-x0)/np.abs(x) < eps1 or np.abs(fun(x)) < eps2:

print(f"经过{k:d}次迭代,初值为{x0:f}的根为{x:.6f}, 此时函数值为{fun(x):.6f}")

return (x,k, fun(x))

x0 = x

print(f"迭代超过{N:d}次,迭代失败")

def main():

newton(0.0, 1e-4, 1e-4, 1000)

newton(-2.0, 1e-4, 1e-4, 1000)

if __name__ == '__main__':

main()

结果:第0步: 相邻迭代步根误差为: 1.000000

第1步: 相邻迭代步根误差为: 0.331248

第2步: 相邻迭代步根误差为: 0.031684

第3步: 相邻迭代步根误差为: 0.000335

经过3次迭代,初值为0.637068的根为0.636733, 此时函数值为0.000000

第0步: 相邻迭代步根误差为: 0.473422

第1步: 相邻迭代步根误差为: 0.110144

第2步: 相邻迭代步根误差为: 0.006784

第3步: 相邻迭代步根误差为: 0.000026

经过3次迭代,初值为-1.409650的根为-1.409624, 此时函数值为0.000000

例2:构造计算$$\sqrt{C}, C>0$$的牛顿迭代公式,并计算$$\sqrt{115}$$的近似值,计算结果精确到$$10^{-5}$$.# -*- coding: utf-8 -*-

"""

构造计算sqrt{C}, C>0的牛顿迭代公式,并计算sqrt{115}的近似值,计算结果精确到1e-5.

@author: morxio

"""

import numpy as np

C = 115

x0 = 10

N = 1000

EPS = 1e-5

def fun(x):

'''函数f(x)'''

return x**2 - C

def dfun(x):

"""函数的导函数f'(x)"""

return 2 * x

def newton(x0, EPS, N):

"""

牛顿迭代法x = x - f(x)/f'(x)

x0:初值, N:最大迭代次数, eps:根误差限

"""

for k in range(0,N,1):

x = x0 - fun(x0) / dfun(x0)

print(x)

if np.abs(x) < 1:

if np.abs(x-x0) < EPS:

print(f"经过{k+1:d}次迭代,初值为{x0:f}的根为{x:.6f}, 此时函数值为{fun(x):.6f}")

return (x,k, fun(x))

else:

if np.abs(x-x0)/np.abs(x) < EPS:

print(f"经过{k+1:d}次迭代,初值为{x0:f}的根为{x:.6f}, 此时函数值为{fun(x):.6f}")

return (x,k, fun(x))

x0 = x

print(f"迭代超过{N:d}次,迭代失败")

def main():

newton(x0, EPS, N)

if __name__ == '__main__':

main()

结果:10.75

10.723837209302326

10.723805294811097

经过3次迭代,初值为10.723837的根为10.723805, 此时函数值为0.000000

python牛顿迭代公式_牛顿迭代法Python实现相关推荐

  1. python牛顿迭代公式_python 牛顿迭代法

    使用牛顿迭代法求方程 在x附近的一个实根. 赋值X,即迭代初值:用初值x代入方程中计算此时的f(x)=(a * x * x * x + b * x * x + c * x + d)和f'(x)=(3 ...

  2. python编写股票公式_一个用Python编写的股票数据(沪深)爬虫和选股策略测试框架...

    一个户外论坛的特点: 列出一些活动,有翻页功能,点向一个活动显示当前活动信息,在二楼一般显示报名名单! 需要的数据: 就是活动的信息, 报名的名单,价钱,主 一个股票数据(沪深)爬虫和选股策略测试框架 ...

  3. 泰勒级数+牛顿迭代公式+最简单的C语言求根号的值

    转载自:http://blog.csdn.net/tqtuuuu/article/details/6821767 无意间在CSDN上看见一哥们讨论Tecent的两道面试题,其中一道题目就是求根号2的值 ...

  4. 牛顿迭代公式是如何推导出来的

    牛顿迭代公式是用来求解方程的迭代法之一.它通过不断地迭代来逼近方程的根. 具体来说,假设我们要求解方程 f(x)=0 的根,那么我们可以通过如下步骤来推导牛顿迭代公式: 首先,我们需要确定一个初始猜测 ...

  5. java测试一个泰勒级数,泰勒级数+牛顿迭代公式+最简单的C语言求根号的值

    无意间看见一哥们讨论Tecent的两道面试题,其中一道题目就是求根号2的值,并且保留指点的小数位.我想我一定是不能进Tecent了,并且我一定是一个数学小白,不,就是一个小白.查了一些资料.mark一 ...

  6. 牛顿迭代公式计算平方根立方根

    牛顿迭代公式计算平方根立方根 如何用计算机来求一个数的平方根与立方根呢.可以采用牛顿迭代公式.相类似的还有GCD最大公约数算法,也即欧几里德算法,利用余数辗转相除. 牛顿迭代公式思路 用一个曲线的切线 ...

  7. python牛顿迭代公式_python计算牛顿迭代多项式实例分析

    本文实例讲述了python计算牛顿迭代多项式的方法.分享给大家供大家参考.具体实现方法如下: ''' p = evalPoly(a,xData,x). Evaluates Newton's polyn ...

  8. python牛顿法算立方根_牛顿迭代法求解立方根

    //计算一个数字的立方根,不使用库函数 //详细描述: //接口说明 //原型: //public static double getCubeRoot(double input) //输入:doubl ...

  9. java 牛顿迭代算术平方根,牛顿迭代法求n方根

    一.简单推导 二.使用 借助上述公式,理论上可以求任意次方根,假设要求a(假设非负)的n次方根,则有xn=a,令f(x)=xn-a,则只需求f(x)=0时x的值即可.由上述简单推导知,当f(x)=0时 ...

  10. 最优化方法:牛顿迭代法和拟牛顿迭代法

    http://blog.csdn.net/pipisorry/article/details/24574293 基础 拐点 若曲线图形在一点由凸转凹,或由凹转凸,则称此点为拐点.直观地说,拐点是使切线 ...

最新文章

  1. t490 指纹识别 linux,T490
  2. uva 10622——Perfect P-th Powers
  3. html5制作心路历程,一个真正0基础小白学习前端开发的心路历程
  4. 使用ASP.NET MVC Futures 中的异步Action 【转】
  5. 关于浮动-float
  6. 初中计算机网络操作题,初中信息技术中考excel操作题
  7. 使用Excel功能抓取网页表格数据
  8. 电商主播的上山下乡运动
  9. c语言炉石传说测试数据库,炉石传说:王师傅微博分享算法入门题 网友:快把C语言播完吧!...
  10. 想要制作好看的壁纸,有CorelDRAW就够啦
  11. 计算机主机的跳线怎么接,手把手教你台式机电脑主板跳线接法
  12. sass基础操作记录
  13. 为什么那么都程序员不敢学Python?
  14. Instruction set mismatch
  15. Python复数属性和方法操作实例
  16. 如何解决Win10上OneNote 2016的同步问题
  17. 【c++】1817城堡问题题解
  18. 上海大学计算机科学与技术专业选修课怎么选,大一“选修课”怎么选?这3种选课攻略很关键,第3种才是最重要的!...
  19. react使用百度地图api报错BMap找不到的
  20. 【msvcp110.dll下载】msvcp110.dll丢失修复

热门文章

  1. 如何将自己的电脑做成服务器
  2. USACO-Section 3.4 Raucous Rockers (DP)
  3. 教师资格证考试攻略(高中信息技术)
  4. 表的增删改查(一)(MySQL)
  5. 沉思录(MEDITATIONS)1-12卷
  6. python怎么读音发音英语翻译-python style是什么意思
  7. 2020-09-21
  8. 阿里云服务器使用freessl配置免费证书Nginx
  9. RRZCMS安全防护建议
  10. 2021-01-29