重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
就是求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的自变量的值。函数的零点不是一个点,而是一个实数。
扩展资料:
函数y=f(x)的零点就是方程f(x)=0的实数根,也就是函数y=f(x)的图像与x轴(直线y=0)交点的横坐标,所以方程f(x)=0有实数根,推出函数y=f(x)的图像与x轴有交点,推出函数y=f(x)有零点。
函数F(x)=f(x)-g(x)的零点就是方程f(x)=g(x)的实数根,也就是函数y=f(x)的图像与函数y=g(x)的图像交点的横坐标,这个结论很有用。
若f(x1)=0,则x1就是函数的零点;若f(a)f(x1)0,则令b=x1(此时零点x∈(a,x1));即图象为(a,x1);若f(x1)f(b)0,则令a=x1。(此时零点x∈(x1,b)
参考资料来源:百度百科--二分法
参考资料来源:百度百科--函数零点
#includestdio.h
#includemath.h
typedef double(*fun)(double xx);//函数指针
#define e 0.000001 //误差
void eff(double a,double b,fun hs)//二分法
{int i=0;
while(fabs(hs(a)-hs(b))efabs(a-b)e){i++;
if(hs(a)*hs((b+a)/2)0){
a=(a+b)/2;
printf("迭代第%d次:\t%f\n",i,a);
}
else {
b=(a+b)/2;
printf("迭代第%d次:\t%f\n",i,b);
}
}
}
double hs1(double xx)//函数f(x)=x^3+x^2-3x-3
{return xx*xx*xx+xx*xx-3*xx-3;}
double hs2(double xx)//函数f(x)=lnx+x
{return log(xx)+xx;}
void main()
{
printf("用二分法求方程x^3+x^2-3x-3=0在1.5附近的根\n");
eff(1.0,2.0,hs1);
printf("用二分法求方程lnx+x在0.5附近的根\n");
eff(0.0,1.0,hs2);
}
对于在区间[a,b]上连续不断,且f(a)·f(b)<0的函数y=f(x),通过
不断把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,
进而得到零点近似值的方法叫二分法 (bisection)。
给定精确度ε,用二分法求函数f(x)零点近似值的步骤:
1、确定区间[a,b],验证f(a)·f(b)<0, 给定精确度ε;
2、求区间(a,b)的中点x1;
3、计算f(x1);
(1)若f(x1)=0,则x1就是函数的零点;
(2)若f(a)·f(x1)<0,则令b=x1(此时零点x0∈(a,x1))
(3)若f(x1)·f(b)<0,则令a=x1(此时零点x0∈(x1,b))
#include stdio.h
#include math.h
double fun_math(double);
int main(void)
{
/* 根据函数可知Y是关于x的一个递增函数 */
/* 先判断输入Y时,X在(0,1)时是否有解 */
double Y;
double X=0 ,big_x=1.0,small_x=0,tmp_X=1;
unsigned int tmp=0;
printf("Please enter Y:");
scanf("%lf",Y);
if(fun_math(1) = Y fun_math(0) = Y)
{
while(tmp_X != X)
{
X =(big_x + small_x)/2;
if(fun_math(X)==Y) break;
if(fun_math(X)Y) big_x = X;
else small_x = X;
tmp_X = X ;
X =(big_x + small_x)/2;
}
printf("X = %.6lf",X);
}
else printf("while Y=%lf, X(0,1) on results\n",Y);
return 0;
}