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

news2024/11/29 22:47:42

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

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

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

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

相关文章

C++STL之容器

STL的概述 STL(Standard Template Library,标准模板库) STL的6大组件&#xff1a;容器、算法、迭代器、适配器、仿函数、空间配置 容器&#xff1a;存放数据 算法&#xff1a;操作数据 迭代器&#xff1a;算法 通过迭代器 操作 容器 适配器&#xff1a;为算法 提供更多的接口 …

电脑/机顶盒/ps3/4/连接老电视(只有AV、S-Video接口)解决方案之HDMI转AV/S-Video转换器HAV

HDMI转AV/S-Video转换器功能 01、将HDMI高清信号经过视频处理转换成AV、S-VIDEO(PAL/NTSC)的视频信号输出 02、将HDMI数字音频&#xff0c;经过DAC数模芯片处理转成模拟立体声输出 03、采用先进的视频处理技术&#xff0c;对图像的亮度&#xff0c;对比度及色彩进行增强处理 04…

AI重构千行百业!超声波俱乐部大湾区内部分享会圆满落幕

1月27日、28日&#xff0c;超声波俱乐部内部分享会第十六期、第十七期分别在深圳、广州召开&#xff0c;创梦天地、元气森林、新浪智库、百准、A2空间对活动进行了特别支持&#xff0c;六十余名AI领域的创始人和行业嘉宾出席分享会。 出席活动的嘉宾有&#xff1a; 超声波创始…

使用java -jar命令运行jar包提示“错误:找不到或无法加载主类“的问题分析

用maven把普通java项目打包成可运行的jar后&#xff0c;打开cmd用java -jar运行此jar包时报错&#xff1a; 用idea运行该项目则没有问题 。 其实原因很简单&#xff0c;我们忽略了2个细节。 java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。我…

数据中心机房建设的痛点:投资与运维之间的博弈

在数字化浪潮的推动下&#xff0c;数据中心机房建设成为企业发展不可或缺的一环。然而&#xff0c;这一过程中存在一系列的痛点&#xff0c;其中投资与运维之间的博弈成为机房建设的重要议题。本文将深入探讨机房系统建设中的投资及运行维护痛点&#xff0c;并提出相关观点和建…

Vulnhub靶机:hacksudo2 (HackDudo)

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;hacksudo2 (HackDudo)&#xff08;10.0.2.44&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://download.vulnh…

最新酒桌小游戏喝酒骰子小程序源码/带流量主

2023最新酒桌小游戏喝酒小程序源码-带流量主&#xff0c;喝酒神器3.6修改增加了广告位&#xff0c;直接上传源码到开发者端即&#xff0c;可通过后改广告代码&#xff0c;然后关闭广告展示提交&#xff0c;通过后打开即可。 流量主ID替换插屏广告位 adunit-29629a7b54a41a8b视频…

假期day3,三种进程间通信代码实现(2024/2/4)

消息队列 #include<myhead.h> struct msgbuf{long mstype;char text[1024]; };#define SIZE (sizeof(struct msgbuf)-sizeof(long))int main(int argc, const char *argv[]) {int pid;//创建key值key_t keyftok("/",a);if(key -1){perror("creat key&quo…

033 三种初始化及内存分析

三种初始化 内存分析 创建数组后存储解析

租号平台源码 支持单独租用或合租使用

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买) 这是一款租号平台源码,采用常见的租号模式。目前网络上还很少见到此类类型的源码。 平台的主要功能如下: 支持单独…

CTFshow 5——23

借鉴博客 misc5 下载完后&#xff0c;用winhex打开 在最后就可以找到flag misc6 和misc5一样 &#xff08;推测&#xff1a;可能是jpg这种看得见的图片&#xff0c;用winhex&#xff09; misc7 misc8 前置工具安装 这里可以看看见两个png 然后我们在我们的文件夹里面有个…

幻兽帕鲁服务器搭建:专用服务器设置全攻略

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

使用Java编写HTTP客户端和服务器框架:一场“请求与响应”的舞蹈

在这个网络发达的时代&#xff0c;HTTP协议成为了我们与世界沟通的桥梁。而Java&#xff0c;这个强大的编程语言&#xff0c;给了我们工具去编写自己的HTTP客户端和服务器框架。这就像给了我们一套乐高积木&#xff0c;让我们自由地创造自己的城堡。 首先&#xff0c;我们来谈…

openlayers常用示例

简单说一下吧&#xff0c;最近做了十来天的的openlayers&#xff0c;然后稍微研究了一下&#xff0c;这里总结并做了一些示例给大家分享一下&#xff0c;应该是相对常用的一部分吧&#xff0c;由于做的时间比较短&#xff0c;这里写了十来个示例了&#xff0c;有实际项目用到的…

2024 springboot Mybatis-flex 打包出错

Mybatis-flex官网&#xff1a;快速开始 - MyBatis-Flex 官方网站 从 Mybatis-flex官网获取模板后&#xff0c;加入自己的项目内容想打包确保错&#xff0c;先试试一下方法 这里改成skip的默认是true改成false&#xff0c;再次打包就可以了

leetcode206反转链表|详细算法讲解学习

题目 https://leetcode.cn/problems/reverse-linked-list/ 这道题对于刚开始学习数据结构和算法的人来说有点难&#xff0c;是入门的重要典型题目&#xff1b;但等数据结构入门之后&#xff0c;这就会是一道非常简单的题目了。 算法一&#xff08;算法正确但超出时间限制&am…

C++算法学习心得七.贪心算法(3)

1.根据身高重建队列&#xff08;406题&#xff09; 题目描述&#xff1a; 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 …

day42_jdbc

今日内容 0 复习昨日 1 JDBC概述 2 JDBC开发步骤 3 完成增删改操作 4 ResultSet 5 登录案例 0 复习昨日 1 写出JQuery,通过获得id获得dom,并给input输入框赋值的语句 $(“#id”).val(“值”) 2 mysql内连接和外连接的区别 内连接只会保留完全符合关联条件的数据 外连接会保留表…

20240203-平常心

我一直强调自己要保持一颗平常心&#xff0c;耐住性子&#xff0c;过好每一刻&#xff0c;做好每一件事情&#xff0c;不断的向自己的目标去推进。就像图中的橙子一样&#xff0c;从刚收到这棵柠檬树的时候&#xff0c;我就在期待结果。 但是柠檬树的哗哗落叶、蔫啦吧唧&#x…

【GAMES101】Lecture 16 蒙特卡洛积分

为了后面要讲的路径追踪&#xff0c;需要讲一下这个蒙特卡洛积分&#xff0c;同时需要回顾一下高等数学中的微积分和概率论与统计学的知识 目录 微积分 概念论与统计 蒙特卡洛积分 微积分 定积分是微积分中的一种重要概念&#xff0c;用于计算函数在一个区间上的总体积、…