1.3求根之牛顿迭代法

目录

  • 目录
  • 前言
  • (一)牛顿迭代法的分析
    • 1.定义
    • 2.条件
    • 3.思想
    • 4.误差
  • (二)代码实现
    • 1.算法流程图
    • 2.源代码
  • (三)案例演示
    • 1.求解:\(f(x)=x^3-x-1=0\)
    • 2.求解:\(f(x)=x^2-115=0\)
    • 3.求解:\(f(x)=x^3-x^2-x+1\)
    • 4.求解:\(f(x)=x^4-4x^2+4=0\)

目录

前言

今天我们讲的是具有收敛速度快,能求重根的解方程之法,牛顿迭代法。

(一)牛顿迭代法的分析

1.定义

迭代公式如下:
\[ x_{k+1} = x_k-\frac{f(x_k)}{f\prime(x_k)} (k=0,1,2...) \]
迭代函数是:
\[ \varphi(x) = x_k-\frac{f(x_k)}{f\prime(x_k)} \]
由于$ \varphi(x)= x_k-\frac{f(x_k)}{f\prime(x_k)}$ 与原方程\(f(x)=0\) 等价。

\(k\rightarrow \infty\) 时,\(x_k\)就是\(f(x)=0\)的近似解。

该方法称为牛顿迭代方法。

2.条件

  1. f(x)函数是连续可导函数。

  2. f(x)在局部收敛,当\(f(x) \times f\prime\prime(x)>0\)时,局部收敛。

    注意:牛顿迭代法的局部收敛性,很依赖于初始值的取法。

    也就是说,初始值的选取,决定该区域的收敛性。

3.思想

其总思想还是迭代的方法,只是其迭代公式是由泰勒展开得来的,其利用的是:用切线方程与x轴的交点来近似f(x)与x轴的交点。

4.误差

任然用的是迭代法的误差,前后两次x的差的绝对值与我们给的精度比较。

(二)代码实现

1.算法流程图

牛顿迭代法.jpg

2.源代码

feval()函数

def feval(string, a):"""根据值来计算数学表达式。:param string: 含有x未知数的数学表达式:param a: 自变量x的具体数值:return:  数学表达式的计算结果"""count = string.count("x")string = string.replace('x', '%f')t = (a, ) * countresult = eval(string % t)return result

float_num()函数

def flaot_num(x, r):"""处理保留几位小数点的函数,四舍五入法:param x: 原始数据:param r: 误差:return: 处理后的数据"""# 处理小数点的位数r = str(r)if "." in r:dian = r.index(".")size = len(r[dian + 1:])result = round(x, size)return resultelif "e" in r:dian = r.index("e")size = int(r[dian+2:])result = round(x, size)return resultelse:result = round(x, 0)return result

牛顿迭代法

"""牛顿迭代法,迭代的思想,不断逼近。
"""
# 求导数需要的库
import sympy as sp
from my_math.func_math import feval, flaot_numdef new_fun(expr, x0, r):"""牛顿迭代法求解方程的根:param expr: 代函数表达式:param x0: 初始值:param r: 误差:return: 计算的结果值"""x = sp.Symbol('x')k = 0# 一阶导与二阶导fx_1 = str(sp.diff(expr))fx_2 = str(sp.diff(fx_1))# 迭代公式y = "x-" + "("+expr + ")/(" + fx_1 + ")"# 判断收敛性if feval(expr, x0)*feval(fx_2, x0) <= 0:print("函数处于该点区域不收敛")result = Noneelse:x1 = feval(y, x0)x2 = feval(y, x1)while abs(x2-x1) > r:x1 = feval(y, x2)x2 = feval(y, x1)k += 1print("次数:", k)print("x1:", x1)print("x2:", x2)result = flaot_num(x2, r)print("=" * 30)print("原始的数据是", x2)print("最后的结果是:", result)return resultif __name__ == '__main__':new_fun("x**4-4*x**2+4", 2, 10**-5)

(三)案例演示

1.求解:\(f(x)=x^3-x-1=0\)

误差:10^-5

图像分析(来确定初值)

01.png

02.png

取在1.5为初始值

运行结果:

03.png

2.求解:\(f(x)=x^2-115=0\)

误差:10^-5

图像分析(来确定初值)

04.png

05.png

取11为初始值。

运行结果:

06.png

3.求解:\(f(x)=x^3-x^2-x+1\)

误差:10^-5

图像分析(来确定初值)

07.png

08.png

取初始值为:1.6

运行结果:

09.png

4.求解:\(f(x)=x^4-4x^2+4=0\)

图像分析(来确定初值)

10.png

11.png

取初值是:0

运行结果:

12.png

我们换另一个点试试,取初始值为2

运行结果:

13.png

作者:Mark

日期:2019/02/19 周二

转载于:https://www.cnblogs.com/zyg123/p/10400543.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Alex Hanna博士:Google道德AI小组研究员

Alex Hanna博士是社会学家和研究科学家&#xff0c;致力于Google的机器学习公平性和道德AI。 (Dr. Alex Hanna is a sociologist and research scientist working on machine learning fairness and ethical AI at Google.) Before that, she was an Assistant Professor at th…

安全开发 | 如何让Django框架中的CSRF_Token的值每次请求都不一样

前言 用过Django 进行开发的同学都知道&#xff0c;Django框架天然支持对CSRF攻击的防护&#xff0c;因为其内置了一个名为CsrfViewMiddleware的中间件&#xff0c;其基于Cookie方式的防护原理&#xff0c;相比基于session的方式&#xff0c;更适合目前前后端分离的业务场景&am…

Kubernetes的共享GPU集群调度

问题背景 全球主要的容器集群服务厂商的Kubernetes服务都提供了Nvidia GPU容器调度能力&#xff0c;但是通常都是将一个GPU卡分配给一个容器。这可以实现比较好的隔离性&#xff0c;确保使用GPU的应用不会被其他应用影响&#xff1b;对于深度学习模型训练的场景非常适合&#x…

django-celery定时任务以及异步任务and服务器部署并且运行全部过程

Celery 应用Celery之前&#xff0c;我想大家都已经了解了&#xff0c;什么是Celery&#xff0c;Celery可以做什么&#xff0c;等等一些关于Celery的问题&#xff0c;在这里我就不一一解释了。 应用之前&#xff0c;要确保环境中添加了Celery包。 pip install celery pip instal…

网页视频15分钟自动暂停_在15分钟内学习网页爬取

网页视频15分钟自动暂停什么是网页抓取&#xff1f; (What is Web Scraping?) Web scraping, also known as web data extraction, is the process of retrieving or “scraping” data from a website. This information is collected and then exported into a format that …

前嗅ForeSpider教程:创建模板

今天&#xff0c;小编为大家带来的教程是&#xff1a;如何在前嗅ForeSpider中创建模板。主要内容有&#xff1a;模板的概念&#xff0c;模板的配置方式&#xff0c;模板的高级选项&#xff0c;具体内容如下&#xff1a; 一&#xff0c;模板的概念 模板列表的层级相当于网页跳转…

django 性能优化_优化Django管理员

django 性能优化Managing data from the Django administration interface should be fast and easy, especially when we have a lot of data to manage.从Django管理界面管理数据应该快速简便&#xff0c;尤其是当我们要管理大量数据时。 To improve that process and to ma…

3D场景中选取场景中的物体。

杨航最近在学Unity3D&#xfeff;&#xfeff;&#xfeff;&#xfeff;在一些经典的游戏中&#xff0c;需要玩家在一个3D场景中选取场景中的物体。例如《仙剑奇侠传》&#xff0c;选择要攻击的敌人时、为我方角色增加血量、为我方角色添加状态&#xff0c;通常我们使用鼠标来选…

canva怎么使用_使用Canva进行数据可视化项目的4个主要好处

canva怎么使用(Notes: All opinions are my own. I am not affiliated with Canva in any way)(注意&#xff1a;所有观点均为我自己。我与Canva毫无关系) Canva is a very popular design platform that I thought I would never use to create the deliverable for a Data V…

如何利用Shader来渲染游戏中的3D角色

杨航最近在学Unity3D&#xfeff;&#xfeff; 本文主要介绍一下如何利用Shader来渲染游戏中的3D角色&#xff0c;以及如何利用Unity提供的Surface Shader来书写自定义Shader。 一、从Shader开始 1、通过Assets->Create->Shader来创建一个默认的Shader&#xff0c;并取名…

Css单位

尺寸 颜色 转载于:https://www.cnblogs.com/jsunny/p/9866679.html

ai驱动数据安全治理_JupyterLab中的AI驱动的代码完成

ai驱动数据安全治理As a data scientist, you almost surely use a form of Jupyter Notebooks. Hopefully, you have moved over to the goodness of JupyterLab with its integrated sidebar, tabs, and more. When it first launched in 2018, JupyterLab was great but fel…

【Android】Retrofit 2.0 的使用

一、概述 Retrofit是Square公司开发的一个类型安全的Java和Android 的REST客户端库。来自官网的介绍&#xff1a; A type-safe HTTP client for Android and JavaRest API是一种软件设计风格&#xff0c;服务器作为资源存放地。客户端去请求GET,PUT, POST,DELETE资源。并且是无…

Mysql常用命令(二)

对数据库的操作 增 create database db1 charset utf8; 查 # 查看当前创建的数据库 show create database db1; # 查看所有的数据库 show databases; 改 alter database db1 charset gbk; 删 drop database db1; 对表的操作 use db1; #切换文件夹select database(); #查看当前所…

python中定义数据结构_Python中的数据结构—简介

python中定义数据结构You have multiples algorithms, the steps of which require fetching the smallest value in a collection at any given point of time. Values are assigned to variables but are constantly modified, making it impossible for you to remember all…

Unity3D 场景与C# Control进行结合

杨航最近在自学Unity3D&#xff0c;打算使用这个时髦、流行、强大的游戏引擎开发一个三维业务展示系统&#xff0c;不过发现游戏的UI和业务系统的UI还是有一定的差别&#xff0c;很多的用户还是比较习惯WinForm或者WPF中的UI形式&#xff0c;于是在网上搜了一下WinForm和Unity3…

数据质量提升_合作提高数据质量

数据质量提升Author Vlad Rișcuția is joined for this article by co-authors Wayne Yim and Ayyappan Balasubramanian.作者 Vlad Rișcuția 和合著者 Wayne Yim 和 Ayyappan Balasubramanian 共同撰写了这篇文章 。 为什么要数据质量&#xff1f; (Why data quality?) …

unity3d 人员控制代码

普通浏览复制代码private var walkSpeed : float 1.0;private var gravity 100.0;private var moveDirection : Vector3 Vector3.zero;private var charController : CharacterController;function Start(){charController GetComponent(CharacterController);animation.w…

删除wallet里面登机牌_登机牌丢失问题

删除wallet里面登机牌On a sold-out flight, 100 people line up to board the plane. The first passenger in the line has lost his boarding pass but was allowed in regardless. He takes a random seat. Each subsequent passenger takes their assigned seat if availa…

字符串操作截取后面的字符串_对字符串的5个必知的熊猫操作

字符串操作截取后面的字符串We have to represent every bit of data in numerical values to be processed and analyzed by machine learning and deep learning models. However, strings do not usually come in a nice and clean format and require preprocessing to con…