📄 root.c
字号:
/*思想:二分法属于数学问题,但为了说清楚问题就再说一下原理。*/
/*先取二元方程f(x)的两个初略解x1和x2,若f(x1)与f(x2)的符号相*/
/*反,则方程f(x)=0在[x1,x2]区间至少有一个根;若f(x)在[x1,x2]*/
/*区间单调,则至少有一个实根;所以取x3=(x1+x2)/2,并在x1和x2中*/
/*舍去和f(x3)同号者,那么解就在x3和另外那个没有舍去的初略解组*/
/*成的区间里;如此反复取舍,直到xn与xn-1之差满足要求时,那么*/
/*xn便是方程f(x)的近似根。*/
#include "stdio.h"
#include "math.h"
double root(a,b,eps,f)
double a,b,eps,(*f)();
{ double f0,f1,c;
f0=(*f)(a);
while (fabs(a-b)>=eps)
{ c=(a+b)/2; f1=(*f)(c);
if (f1==0) return(c);/*x就是根,不在迭代*/
if (f0*f1>0) a=c;/*覆盖a,即舍去同号者*/
else b=c;
}
c=(a+b)/2;
return(c);
}
main()
{ double a,b,eps,f();
a=1; b=2; eps=0.000001;
printf("x=%7.3f\n",root(a,b,eps,f));
}
double f(x)
double x;
{ double y;
y=x+log(x)-2.2;
return(y);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -