作者在 2011-04-17 18:41:00 发布以下内容
二分法简单介绍:例如:y=x*x*x-sqrt(x)-5 对于此方程在x从1到4的变化中,函数的值从负数转变
为正数,此函数又是连续的,所以我们可以断定,在【1,4】之间必有一个实数解,我们可以循环取x1,
x2的中点x12,并求出y12,当y12无限接近于0的时候,这时候x12就是我们要求的解(注意,对于无理方程
我们永远求不出它的准确值,只能无限接近,但是精确程度太高的时候对于我们已经没有太大的意义了)。
#include<stdio.h>
#include<math.h>
void main()
{
double x1,x2,x12,y1,y12;
x1=1;
x2=4;
do{
x12=(x1+x2)/2;
y1=x1*x1*x1-sqrt(x1)-5;
y12=x12*x12*x12-sqrt(x12)-5;
if(y1*y12<0) x2=x12;
else x1=x12;
}while(fabs(y12)>1e-9);
printf("x=%g\ny=%g\n",x12,y12);
}
#include<math.h>
void main()
{
double x1,x2,x12,y1,y12;
x1=1;
x2=4;
do{
x12=(x1+x2)/2;
y1=x1*x1*x1-sqrt(x1)-5;
y12=x12*x12*x12-sqrt(x12)-5;
if(y1*y12<0) x2=x12;
else x1=x12;
}while(fabs(y12)>1e-9);
printf("x=%g\ny=%g\n",x12,y12);
}