刷清橙OJ--A1081.二分求方程根
来源:互联网 发布:二级备案域名免费注册 编辑:程序博客网 时间:2024/06/12 23:22
问题:
A1081. 二分求方程根
时间限制:1.0s 内存限制:512.0MB
总提交次数:3275 AC次数:935 平均分:29.08
问题描述
给定一个连续实函数f(x)和一个区间[a, b],已知f(a)*f(b)<0。由微积分的知识可知,在[a, b]上至少存在一个点c,使得f(c)=0,即f(x)在[a, b]区间上至少有一个根。请求出这个根。
这是一个补充程序的试题,你要完成一个函数
double getRoot(double (*f)(double), double a, double b)
并将f(x)=0的在[a, b]区间上的一个根返回,考虑到实数的误差,你只要使得f(x)的绝对值小于10-6(1e-6)即可。
其中,第一个参数是一个函数指针,所表示的函数将在测试的时候给出,你可以把它看成是如下的函数:
double f(double x)
并可以直接调用f(x)来得到这个函数在参数为x时的值。
算法描述
由于f(x)在[a, b]上连续且f(a)*f(b)<0,所以可以任取[a, b]区间上的一个点p,若f(p)为0(或者绝对值小于10-6),则p为方程的根,否则f(p)一定与f(a)同号(同正负)或与f(b)同号,如果f(p)与f(a)同号,则在[p, b]上存在一个根,否则在[a, p]上存在一个根。
通过上面的一步,可以将根的范围从[a, b]缩小为[a, p]或[p, b],重复这种方法可以不断缩小根的范围,直到找到根。
一般情况下,我们取p=(a+b)/2,即每次使用区间的中点进行判断,这种求根的方法叫做二分法。
这是一道完善程序的试题,你只需要在下面程序标注的"@你的代码"的位置补充适当的语句或语句段使程序能正确运行即可,在提交的时候,你要提交的内容只包括补充的内容,不包括其他的代码。
- #include <cstdlib>
- #include <cstdio>
- #include <cmath>
- using namespace std;
- double getRoot(double (*f)(double), double a, double b)
- {
- @你的代码
- }
代码:
double x = (a + b) / 2;while(fabs(f(x)) >= 1e-6){if(f(x) * f(a) > 0){a = x;}else{b = x;}x = (a + b) / 2;}return x;
阅读全文
0 0
- 刷清橙OJ--A1081.二分求方程根
- 【二分】求方程的根
- 刷清橙OJ--A1094.牛顿迭代法求方程的根
- 哈理工OJ (二分查找) 求方程的解1187
- OJ刷题之《求方程的根》
- OJ循环——迭代法求方程的根
- 迭代法求方程根
- 二分法求方程根
- 求方程的根
- 求方程的根
- 求方程的根
- HDU2199 Can you solve this equation 二分求方程的根
- 牛顿迭代法求方程根
- 二分法求方程近似根
- 二分法求方程的根
- 牛顿迭代法求方程根
- 求方程的根,亲
- 割线法求方程根
- TensorFlow 中 tf.app.flags.FLAGS 的用法介绍
- MongoDB增删改查(三)
- 【代码笔记】iOS-UIActionSheet字体的修改
- XAMPP和VMware Workstation占用443端口冲突的解决办法
- 数据库的常用查询命令
- 刷清橙OJ--A1081.二分求方程根
- pandas中Timestamp类用法讲解
- java下载网络文件并重命名
- Android EditText输入时闪退
- 分页查询优化
- Xcode使用之安装Xcode Command Line Tools
- 使用svn注意事项
- iOS ReactiveCocoa 常用API整理(可做为手册查询)
- SKyline 基本方法功能的介绍