二分法
2010-04-13 00:04
183 查看
对于在区间 [a , b] 上连续不断,且满足 f (a) f (b) < 0 的函数 y = f ( x) , 通过不断地把函数 f ( x) 的 零点所在的区间一分为二, 使区间的两个端点逐步逼近零点, 进而得到零点近似值的方法叫做二分法。
相关习题:
《C程序设计》(第三版)6.13
《C程序设计教程》 5.13
Solution by Mutoo:
Code:
#include<stdio.h>
#include<math.h>
double F(double x) // 构造原函数
{
return 2*pow(x,3)-4*pow(x,2)+3*x-6; // f(x)=2x^3-4x^2+3x-6
}
void main()
{
double left,right,mid;
left = -10; // 初始化左右边界
right = 10;
do
{
mid = (left+right)/2;
if(F(left)==0) mid=left;
if(F(right)==0) mid=right;
if(F(mid)==0) break; // 如果边界或中间为零点,直接跳出循环
else if(F(left)*F(mid)<0) right=mid; // 否则定义新的边界使范围缩小
else if(F(mid)*F(right)<0) left=mid;
else
{
printf("Error!"); // 如果给定的边界不能使函数的值异号,则无法用二分法解题=>报错。
break;
}
}while(fabs(F(mid))>10e-6); // 误差指导
printf("root=%lf/n",mid);
}
相关习题:
《C程序设计》(第三版)6.13
《C程序设计教程》 5.13
Solution by Mutoo:
Code:
#include<stdio.h>
#include<math.h>
double F(double x) // 构造原函数
{
return 2*pow(x,3)-4*pow(x,2)+3*x-6; // f(x)=2x^3-4x^2+3x-6
}
void main()
{
double left,right,mid;
left = -10; // 初始化左右边界
right = 10;
do
{
mid = (left+right)/2;
if(F(left)==0) mid=left;
if(F(right)==0) mid=right;
if(F(mid)==0) break; // 如果边界或中间为零点,直接跳出循环
else if(F(left)*F(mid)<0) right=mid; // 否则定义新的边界使范围缩小
else if(F(mid)*F(right)<0) left=mid;
else
{
printf("Error!"); // 如果给定的边界不能使函数的值异号,则无法用二分法解题=>报错。
break;
}
}while(fabs(F(mid))>10e-6); // 误差指导
printf("root=%lf/n",mid);
}
相关文章推荐
- UVa3635派-二分法
- 算法思想--二分法
- 数据结构与算法--有序数组和二分法查找
- 二分法查找元素的位置
- 快速幂取模(二分法)
- 7-18 二分法求多项式单根
- 第16天 匿名函数,递归,二分法,内置函数
- python记录_day14 内置函数二 迭代 二分法
- NYOJ 86 找球号(一)(二分法)
- php 二分法查找数组中某数值 案例分析
- Monthly Expense(二分法)
- 20170811(回朔法复习 二分法复习)
- Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)
- CodeForces - 344E Read Time (模拟题 + 二分法)
- 二分法
- 使用二分法与牛顿迭代实现sqrt(int)
- 插入排序之二分法插入排序
- 二分法搜索(JAVA语言实现)
- HDOJ1007(二分法 TLE)
- 二分法查找相关解析