C++实现二分法求零点(二分法求零点)
前言
首先,我们要清楚我们是干嘛的;其次,知道原理;最后,才能明白自己要怎么办。明确:用二分法求函数。
题目:
二分法求函数的零点: 有函数: f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121
已知 f(1.5) > 0 , f(2.4) < 0 且方程 f(x) = 0 在区间 [1.5,2.4] 有且只有一个根,请用二分法求出该根。
输出: 该方程在区间[1.5,2.4]中的根。要求四舍五入到小数点后6位。
注意:要弄清二分法和零点是啥。
一、零点是什么?
1.零点及零点存在性定理
1.1零点定义,对于函数y = f ( x ) ,使得f ( x ) = 0 的实数x叫做函数f ( x ) 的零点。换句话说,函数y = f ( x )的零点就是方程f ( x ) = 0 f的实数根,也就是函数y = f ( x )的图像与x轴的交点。
1.2零点存在性定理,如果函数f = f ( x ) f=f(x)f=f(x)在区间[ a , b ] [a,b][a,b]上的图像是连续的曲线,并且有f ( a ) ⋅ f ( b ) < 0 ,我们就说函数y = f ( x )在开区间( a , b )内有零点,即存在c ∈ ( a , b ) 使得f ( c ) = 0。
注意:满足该定理是函数存在零点的充分不必要条件。如果该函数是一个单调函数,那么零点有且仅有一个。
————————————————
小总结:零点其实就是令f(x)=0求得的x的值,故零点不是点而是一个数值。
二、二分法求零点
1.二分法
就是求2个点的中点的值
比如f(x)中f(a)>0,f(b)<0
那就求f((a+b)/2)的值
如果f((a+b)/2)>0把f((a+b)/2)赋值给f(a),f(b)不变,继续重复上面的过程。
如果f((a+b)/2)<0把f((a+b)/2)赋值给f(b),f(a)不变,继续重复上面的过程。
直到|f(a)-f(b)|小于你给定的一个很小的数,就可以得到近似解了。
对于函数y=f(x)(x∈R),我们把方程f(x)=0的实数根x叫作函数y=f(x)(x∈R)的零点(the zero of the function)。即函数的零点就是使函数值为0的自变量的值。函数的零点不是一个点,而是一个实数。
小总结:二分法实际就是取半求值与两边比对逐渐逼近零点。
2.完整代码
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <math.h>//可以调用数学运算函数,fabs()求精度
using namespace std;
#include <iostream>
//构造所求的函数
double f(double x)
{return x * x * x * x * x - 15 * x * x * x * x + 85 * x * x * x - 225 * x * x + 274 * x - 121;
}//二分法求零点
double findZero(double a, double b, double err)//a,b为已知所给区间的端点,即零点(该方程等于零的根)在【a,b】中;err为所要求得的f(x)值的精度,此时x是要求的近似零点
{double t = 0.0;//t初始化//区间两端的函数值的精度小于所给的精度就直接返回两端的值即为近似零点if (fabs(f(a)) < err)return a;if (fabs(f(b)) < err)return b;//区间大小的精度大于所给精度时while (fabs(a - b) > err){t = (a + b) / 2;if (f(a) * f(t) < 0){b = t;}else{a = t;}if (fabs(f(t)) < err){return t;}}return t;
}void test01()
{cout << findZero(1.5, 2.4, 0.000001) << endl;
}int main(void)
{test01();system("pause");return 0;
}y
运行结果截图
总结
清楚二分法的原理与用法并弄清楚零点的二分求法是关键。看到这里留个小尾巴不过分吧(请假条)
C++实现二分法求零点(二分法求零点)相关推荐
- 数值计算方法 matlab用二分法或简单迭代法求_牛顿法和二分法介绍及其在空气处理当中的应用...
二分法 如上图所示,对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方 ...
- matlab中精确求零点,matlab求零点
数值计算方法第四章 计算函数零点和极值点的迭代法 本章讨论非线性方程(组)的求解问题 2/80 4.1 不动点迭代法及其收敛性 1.不动点设非线性方程组 f(x) =...... matlab求解零状 ...
- 牛顿法原理(matlab实现,求零点,求极值)
开头 重点 本文对于牛顿法求零点和求极值点进行简单的公式推导,并使用matlab实现算法,同时做两道简单习题. 又是艰难的一天呢. 今天用matlab写牛顿法,竟然又搞了好几个小时,我真的是有点绝望. ...
- 二分法的计算机应用,二分法(数学领域术语)_百度百科
对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法.[1] ...
- c语言二分法排序原理,二分法原理是什么意思_二分法排序原理图解
lookup函数查找是遵循 二分法 查找原理,所以要看懂上例中的查找结果,必须要了解什么是二分法查找.( 二分法求零点是什么意思 ps:与vlookup的遍历查询法不同,lookup的查询原理是二分法 ...
- c语言迭代法求平方根_求平方根问题 (C++ 实现)
下面是用二分法和牛顿迭代法求一个正数的平方根. 二分法 这里的题目稍微宽了一点点,包含了整数和小数的情况,这里二分法就不用多说了,如果中间值的平方与目标值在误差范围内,则返回,否则根据大小情况改变左/ ...
- 求难、求拙、求慢、求少
今天在朋友圈中看到北京化工大学张贝克教授的一篇文章,据说是在飞机场等飞机的时候写的.看到他的标题就被吸引了,读完论述之后,有醍醐灌顶的感觉. 在先进飞速发展的时代,每个人都在运用自己的聪明才智.禀赋资 ...
- python实现二分法查找_python3 二分法查找
''' 二分法查找 有序列表 掐头去尾取中间 查找列表中xx在不在列表中,在,则返回索引值 ''' # lst = [1, 4, 6, 8, 9, 21, 23, 26, 35, 48, 49, 54 ...
- 5.2 matlab多项式计算(多项式的四则运算、求导、求值、求根)
1.多项式的表示 在MATLAB中创建多项式向量时,注意三点: (1)多项式系数向量的顺序是从高到低. (2)多项式系数向量包含0次项系数,所以其长度为多项式最高次数加1. (3)如果有的项没有,系数 ...
- 二阶矩阵转置怎么求_矩阵求导术(下)
本文承接上篇 https://zhuanlan.zhihu.com/p/24709748,来讲矩阵对矩阵的求导术.使用小写字母x表示标量,粗体小写字母 表示列向量,大写字母X表示矩阵.矩阵对矩阵的求导 ...
最新文章
- 搜索引擎之---Apache solr的实现
- win10系统下多python版本部署
- WPF 故事板动画示例
- 通过先序和中序数组生成后续数组
- nginx中配置react-router参数跳转
- jquery的ajax查询数据库,用Jquery和Ajax查询Django数据库
- 实体类 接口_spring-boot-route(五)整合Swagger生成接口文档
- 笨办法学python3 pdf 脚本之家_解决python3输入的坑——input()
- java解析多层嵌套json字符串
- 齿轮箱常见故障数据_齿轮箱故障分析和维护使用
- rhel6中dhcp服务器配置文件,如何在CentOS/RHEL 7/6/5配置DHCP服务器
- 自己动手实现SharePointList的分页展示
- CF1042B Vitamins
- IEEE Fellow 2020名单揭晓!BDTC 2019重磅嘉宾周伯文、叶杰平、陈宝权上榜
- C程序-将华氏温度转换为摄氏和开氏
- 百度网盘打开显示读写权限不足
- 计算机语言工资排行,Python位居编程语言薪资排行榜前列!风变编程打造职场竞争力...
- 升级wamp的php版本,Wamp升级PHP版本
- 音频合并的步骤有哪些
- HyperMesh快捷键、鼠标操作、键盘操作