采用二分法求方程的根

 1 //此方法用来求方程x*(e^x)-1=0在一个[x1,x2]反外内的根,x1,x2的值在运行时输入//
 2 #include<math.h>
 3 #include<iostream>
 4 using namespace std;
 5 double f(double x)
 6 {
 7     double y;
 8     y=exp(x)*x-1;
 9     return y;
10 }
11 
12 double point(double x1,double x2)
13 {
14     double y;
15     y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
16     return y;
17 }
18 
19 double root(double x1,double x2)
20 {
21     double x,y,y1;
22     y1=f(x1);
23 
24     do{
25         x=point(x1,x2);
26         y=f(x);
27         if(y*y1>0)
28             {x1=x; y1=y;}
29         else
30             x2=x;
31     }while(fabs(y)>=0.0001);
32     return x;
33 }
34 
35 void main()
36 {
37     double x1,x2,f1,f2,x;
38     do{
39         cin>>x1>>x2;
40         f1=f(x1);
41         f2=f(x2);
42     }while((f1*f2)>=0);
43     x=root(x1,x2);
44     cout<<x<<endl;
45 }

 

posted on 2008-03-24 09:20  Jacky Yu  阅读(243)  评论(0编辑  收藏  举报