ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第二章上机实践报告

2021-10-05 14:00:06  阅读:144  来源: 互联网

标签:1.5 上机 实践 mid 二分法 第二章 问题 本题 2.4


实践题目名称:二分法求函数的零点

 

问题描述:

题意:有函数:f(x)=x5−15x4+85x3−225x2+274x−121 已知f(1.5)>0,f(2.4)<0 且方程f(x)=0 在区间[1.5,2.4] 有且只有一个根,请用二分法求出该根。 提示:判断函数是否为0,使用表达式 fabs(f(x)) < 1e-7

输入格式:无

输出格式:该方程在区间[1.5,2.4]中的根。要求四舍五入到小数点后6位。

 

算法描述:

本题的解决方法可采用二分法,已知 f(1.5)>0, f(2.4)<0, 且函数在此区间有且只有一个零点,则我们可以用二分法不断切割mid的位置从而逐渐减小零点所在的区间范围,在保证右区间大于左区间的前提条件下,直到右区间与左区间的范围小到小于1e-7时,便可输出此值,即为函数零点的位置。

本题采用的分治法,将一开始定义的left取1.5,right取2.4,取mid=(1.5+2.4)/2,然后代入函数f(mid),判定f(mid)大于或小于0,则出现两种可能:

(1)f(mid)>0,则零点的位置在mid的右边,那么mid左边的区间便可删掉不管,只需继续判定mid右边的区间。那么下一步,便是把左区间left值改为mid,即可继续在新的区间里寻找mid继续判定。

(2)f(mid)<0,则零点的位置在mid的左边,那么mid右边的区间便可删掉不管,只需继续判定mid左边的区间。那么下一步,便是把左右区间right值改为mid,即可继续在新的区间里寻找mid继续判定。

采取分治法的好处是让算法的效率提高,如果只是单纯的使用从小到大的顺序依次寻找零点位置,是非常复杂的。注意题目并不是一个确切的数列,1.5到2.4可以分解成无数的数,这样很难找到一个精确到六位小数的数作为零点,计算量太大,而二分法的策略可以避免这种低效率的问题发生,我们只需将一个问题分解成若干个小问题,并解决出小问题,本题最后甚至无需合并子问题,只需不断分解问题直到解决为止即可。

 

算法时间复杂度分析:O(logn),本题给出一个范围,只需进行二分问题求解即可,最多logn次解决问题,其他诸如取中点、f值操作均为O(1),故时间复杂度为O(logn)。

算法空间复杂度分析:O(1),本提并没有进行多余的占用空间操作。

 

心得体会:

对于本次实验的题目,基本上都是可以靠二分法简单高效的解决。而二分法也是我们解决问题的一个很好的思路与想法,在学习二分法后,我们可以运用它,将问题分解简化,并将分解后的子问题求出并合并即可。每个问题可能都会存在一个切入点,我们只需在这个点上切入分解,简化并解决,便可避免傻乎乎停留在思考如何解决大问题的层面上,从而有效的解决原来的问题。

 

分治法的个人体会和思考:

1.分治法一般在有序序列的问题上可以更好发挥它的作用,在有序的序列里分解出无数的小序列求解,本题1.5~2.4也可以看成是一个包含无穷多个数的有序序列;而在无序的序列里,分治法往往较难得到一个良好的解决思路。

2.分而治之的方法一般还是运用在数据较为庞大的问题上,这样可以高效的解决一些大问题。

标签:1.5,上机,实践,mid,二分法,第二章,问题,本题,2.4
来源: https://www.cnblogs.com/zeng-bingjun/p/15368527.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有