弦线法求根--c语言描述

先看一下数学原理!

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;
}

Leave a Reply

Your email address will not be published. Required fields are marked *