先看一下数学原理!
1.取两个不同的点(x1,x2),
如果x1,x2两点相反 则在x1,x2之内必有一个根。
如果两者同符号则改变x1.x2的值使 f(x1),f(x2)异号为止,
2.连接(x1,f(x1)(x2,f(x2))使之与x轴交于 x轴于一点,
用公式:x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1)) 再用x得出f(x);
3. 若f(x)与f(x1)同号则根必在(x,x2)内 此时将x作为新的 x1, 如果f(x)与f(x2)同符号则根必在
(x,x1)内则此时将x作为新的x2.4.重复2 3的步聚,直到f(x)<一个很小的值,
弦线法求根--c语言描述
#include
#include
double f(double x);
void root(double x1,double x2);
double point(double x1,double x2);
int main()
{
root(-10,10);
}
double f(double x)
{
return x*x+x-1;
}
void root(double x1,double x2)
{
double x;
while(fabs(f(x))>1E-6)
{
x=point(x1,x2);
if(f(x)*f(x1)>0)
{
x1=x;
}
else
x2=x;
}
printf("Root:%lf",x);
}
double point(double x1,double x2)
{
return f(x1)*(x2-x1)/(f(x1)-f(x2))+x1;
}