Python算法100例-1.3 牛顿迭代法求方程根

完整源代码项目地址,关注博主私信’源代码’后可获取

1.问题描述

编写用牛顿迭代法求方程根的函数。方程为 a x 3 + b x 2 + c x + d = 0 ax^3+bx^2+cx+d=0 ax3+bx2+cx+d=0,系数a、b、c、d由主函数输入,求x在1附近的一个实根。求出根后,由主函数输出。

牛顿迭代法的公式: x = x 0 − f ( x ) f ′ ( x 0 ) x=x_0-\frac{f(x)}{f'(x_0)} x=x0f(x0)f(x),设迭代到 ∣ x − x 0 ∣ ≤ 1 ∗ 1 0 − 5 |x-x_0 |≤1*10^{-5} xx01105时结束。

2.问题分析

牛顿迭代法是取 x 0 x_0 x0之后,在这个基础上找到比 x 0 x_0 x0更接近的方程根,一步一步迭代,从而找到更接近方程根的近似根。

r r r f ( x ) = 0 f(x)=0 f(x)=0的根,选取 x 0 x0 x0作为r的初始近似值,过点 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) (x0,f(x0))做曲线 y = f ( x ) y=f(x) y=f(x)的切线L,L的方程为 y = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) y=f(x_0)+f'(x_0)(x-x_0) y=f(x0)+f(x0)(xx0),求出L与x轴交点的横坐标 x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1=x_0-\frac{f(x_0)}{f'(x0)} x1=x0f(x0)f(x0),称 x 1 x_1 x1 r r r的一次近似值;

过点 ( x 1 , f ( x 2 ) ) (x1,f(x_2)) (x1,f(x2))做曲线 y = f ( x ) y=f(x) y=f(x)的切线,并求出该切线与x轴交点的横坐标 x 2 = x 1 − f ( x 1 ) f ′ ( x 1 ) x_2=x_1-\frac{f(x1)}{f'(x1)} x2=x1f(x1)f(x1),称 x 2 x_2 x2 r r r的二次近似值;重复以上过程,得到 r r r的近似值 x n x_n xn。上述过程即为牛顿迭代法的求解过程。

3.算法设计

程序流程分析:

1)在1附近找任一实数作为 x 0 x_0 x0的初值,我们取1.5,即 x 0 x_0 x0=1.5。

2)用初值 x 0 x_0 x0代入方程中计算此时的 f ( x 0 ) f(x0) f(x0) f ′ ( x 0 ) f'(x0) f(x0);程序中用变量f描述方程的值,用fd描述方程求导之后的值。

3)计算增量h=f/fd。

4)计算下一个 x x x x x x= x 0 x_0 x0-h。

5)用新产生的 x x x替换原来的 x 0 x_0 x0,为下一次迭代做好准备。

6)若 ∣ x − x 0 ∣ > = 1 e − 5 |x-x0|>=1e-5 xx0∣=1e5,则转到步骤(3)继续执行,否则转到步骤(7)。

7)所求 x x x就是方程 a x 3 + b x 2 + c x + d = 0 ax^3+bx^2+cx+d=0 ax3+bx2+cx+d=0的根,将其输出。

4.确定程序框架

程序流程图如图所示。

在这里插入图片描述

5.迭代法求方程根

编写程序时要注意的一点是判定|x-x0|>=1e-5,许多初学者认为判定条件应该是|x-x0|<1e-5,从牛顿迭代法的原理可以看出,迭代的实质就是越来越接近方程根的精确值,最初给x0所赋初值与根的精确值是相差很多了,正是因为这个我们才需要不断地进行迭代,也就是程序中循环体的功能。在经过一番迭代之后所求得的值之间的差别也越来越小,直到求得的某两个值的差的绝对值在某个范围之内时便可结束迭代。若我们把判定条件改为|x-x0|<1e-5,则第一次的判断结果必为假,这样我们就不能进入循环体再次执行。希望初学者对于本类题目条件的判定要多加注意。

6.完整的程序

根据上面的分析,编写程序如下:

%%time
# 牛顿迭代法求方程根
# 函数功能是用牛顿迭代法求方程的根
def solution(a, b, c, d):
    x = 1.5
    x0 = x                                                          # 用所求得的x值代替x0原来的值
    # f用来描述方程的值,fd用来描述方程求导之后的值
    f = a * x0 * x0 * x0 + b * x0 * x0 + c * x0 + d
    fd = 3 * a * x0 * x0 + 2 * b * x0 + c
    h = f / fd
    x = x0 - h                                              # 求得更接近方程根的x值
    while abs(x - x0) >= 1e-5:
        x0 = x
        f = a * x0 * x0 * x0 + b * x0 * x0 + c * x0 + d
        fd = 3 * a * x0 * x0 + 2 * b * x0 + c
        h = f / fd
        x = x0 - h                                          # 求得更接近方程根的x值

    return x

if __name__ == '__main__':
    print("请输入方程的系数:")
    # a,b,c,d代表所求方程的系数
    a, b, c, d = map(float, input().split())
    print("方程的参数为:" , a, b, c, d)
    # x用来记录求得的方程根
    x = solution(a, b, c, d)
    print("所求方程的根为x=%.6f"% x)
请输入方程的系数:
方程的参数为: 2.0 -4.0 3.0 -6.0
所求方程的根为x=2.000000
CPU times: user 214 ms, sys: 78.1 ms, total: 293 ms
Wall time: 27.3 s

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VBA字典与数组第十一讲:普通公式与数组公式的本质区别

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

MAE实战:使用MAE提高主干网络的精度(一)

摘要 MAE已经出来有几年了&#xff0c;很多人还不知道怎么去使用&#xff0c;本文通过两个例子说明一下。分两部分&#xff0c;一部分介绍一个简单的例子&#xff0c;让大家了解MAE训练的流程。一部分是一个新的模型&#xff0c;让大家了解如何将自己的模型加入MAE。 论文标…

Java 获取操作时区 ZonedDateTime

Java 获取操作时区 ZonedDateTime package com.zhong.timeaddress;import java.time.Clock; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Set;public class TimeAddress {public static void main(String[] args) {// 获取系统默认时区ZoneId…

PyTorch 中神经网络库torch.nn的详细介绍

1. torch.nn torch.nn 是 PyTorch 深度学习框架中的一个核心模块&#xff0c;它为构建和训练神经网络提供了丰富的类库。 以下是 torch.nn 的关键组成部分及其功能&#xff1a; nn.Module 类&#xff1a; nn.Module 是所有自定义神经网络模型的基类。用户通常会从这个类派生…

前端工程化之:webpack2-2(内置插件)

目录 一、内置插件 1.DefinePlugin 2.BannerPlugin 3.ProvidePlugin 一、内置插件 所有的 webpack 内置插件都作为 webpack 的静态属性存在的&#xff0c;使用下面的方式即可创建一个插件对象&#xff1a; const webpack require("webpack")new webpack.插件…

计算机设计大赛 深度学习 机器视觉 车位识别车道线检测 - python opencv

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

随机图论基础

一&#xff0c;随机图、随机图空间 1&#xff0c;随机图 一个n个点的无向图&#xff0c;最多有sn(n-1)/2条边。 每条边都有一定的概率存在&#xff0c;有一定概率不存在&#xff0c;那么每个图都有一个出现概率。 2&#xff0c;随机图空间 一共有2^s种不同的图&#xff0c…

C++:按键控制头文件Button.h

★&#xff0e;☆ &#xff0e;★∴★&#xff0e;∴☆ ∴ ☆&#xff0e;&#xff0e; ☆★∴∴ ☆&#xff0e;★∴&#xff0e; ◢◣。 ◢◣。 ☆圣★ ◢★◣。 ◢★◣。 ★诞☆ ◢■■◣。 ◢■■◣。 ☆节★ ◢■■■◣。 ◢■■■◣。 …

集合-02

文章目录 1.Set集合1.1Set集合概述和特点1.2Set集合的使用 2.TreeSet集合2.1TreeSet集合概述和特点2.2TreeSet集合基本使用2.3自然排序Comparable的使用2.4比较器排序Comparator的使用2.5两种比较方式总结 3.HashSet集合3.1HashSet集合概述和特点3.2HashSet集合的基本应用3.3哈…

Java 格式化时间以及计算时间

Java 格式化时间以及计算时间 package com.zhong.datetimeformat;import java.time.*; import java.time.format.DateTimeFormatter;public class DateTimeFormats {public static void main(String[] args) {// 创建一个日期格式化器对象DateTimeFormatter dateTimeFormatter…

【chisel】 环境,资料

Chisel环境搭建教程&#xff08;Ubuntu&#xff09; 根据上边的link去安装&#xff1b; 目前scala最高版本用scala-2.13.10,太高了 没有chisel的库文件支持&#xff1b;会在sbt下载的过程中报错&#xff1b; [error] sbt.librarymanagement.ResolveException: chisel chisel目…

深入理解网络通信和TCP/IP协议

目录 计算机网络是什么&#xff1f; 定义和分类 计算机网络发展简史 计算机网络体系结构 OSI 七层模型 TCP/IP 模型 TCP/IP 协议族 TCP/IP 网络传输中的数据 地址和端口号 MAC地址 IP 地址 端口号 为什么端口号有65535个&#xff1f; 综述 TCP 特性 TCP 三次握…

oc渲染器初始参数怎么设置?oc渲染器初始参数怎么弄

OC渲染器以其用户友好的界面、卓越的渲染品质而受到众多初学者的欢迎&#xff0c;而且它使得创建逼真的视觉效果变得轻而易举。对于产品展示、建筑设计以及室内布局渲染来说&#xff0c;OC渲染器都能表现出优异的性能。下面&#xff0c;我们将介绍新手如何进行OC渲染器的基本初…

【MySQL】学习并使用DQL实现排序查询和分页查询

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-SP91zTA41FlGU0Ce {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

codeforces 1300分

文章目录 1.[B. Random Teams](https://codeforces.com/contest/478/problem/B)2.[D. Anti-Sudoku](https://codeforces.com/problemset/problem/1335/D)3.[B. Trouble Sort](https://codeforces.com/problemset/problem/1365/B)4.[Problem - 1401C - Codeforces](https://code…

【DDD】学习笔记-数据分析模型

在 Eric Evans 提出领域驱动设计之前&#xff0c;对企业系统的分析设计多数采用数据模型驱动设计。如前所述&#xff0c;这种数据模型驱动设计就是站在数据的建模视角&#xff0c;逐步开展分析、设计与实现的建模过程。通过对数据的正确建模&#xff0c;设计人员就可以根据模型…

Python新春烟花盛宴

写在前面 哈喽小伙伴们&#xff0c;博主在这里提前祝大家新春快乐呀&#xff01;我用Python绽放了一场新春烟花盛宴&#xff0c;一起来看看吧&#xff01; 环境需求 python3.11.4及以上PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库…

房企数字化选型-智慧案场:来访到成交,5大环节缺一不可

在“低增长、低利润、高集中度”的房地产存量时代&#xff0c;数字化成为房企突围的必经之路。但面对预算缩减&#xff0c;哪些数字化场景值得优先投入&#xff1f;又有哪些实践案例经验可以借鉴&#xff1f; 【需求与挑战】 线下案场是房地产营销转化成交的最关键环节&#x…

中国古代初入相补原理

中国古代初入相补原理 赵爽&#xff08;约182---250年&#xff0c;东汉末至三国时代吴国人&#xff09;&#xff0c;为《周髀算经》做注时记述了勾股定理的理论证明&#xff0c;将勾股定理表述为&#xff1a;“勾股各自乘&#xff0c;并之&#xff0c;为弦实。开方除之&#xf…

Facebook群控:利用IP代理提高聊单效率

在当今社交媒体竞争激烈的环境中&#xff0c;Facebook已经成为广告营销和推广的重要平台&#xff0c;为了更好地利用Facebook进行推广活动&#xff0c;群控技术应运而生。 本文将深入探讨Facebook群控的定义、作用以及如何利用IP代理来提升群控效率&#xff0c;为你提供全面的…