/**
  弦截法求方程的一个实根
  弦截法公式:x(k+1) = x(k) - ( x(k) - x(k-1) ) * f( x(k) ) / f( x(k) - f(x(k-1) )
  属性:方程求根迭代法
 
  计算x(k+1)时需要利用前两步信息x(k),x(k-1).免去了Newton法中需要求解一阶导函数的繁琐.
但收敛速度比牛顿法要慢
《数值计算方法与算法》-2 Editon -科学出版社 P94
   
 代码维护:2007.04.20   pengkuny
**/
 #include<iostream>
#include<iostream>
 #include<cmath>
#include<cmath>

 using namespace std;
using namespace std;

 #define f(x) (x*x*x-7.7*x*x+19.2*x-15.3)  //举例函数x^3-7.7x^2+19.2x-15.3
#define f(x) (x*x*x-7.7*x*x+19.2*x-15.3)  //举例函数x^3-7.7x^2+19.2x-15.3
 #define epsilon 0.0000001  //精度
#define epsilon 0.0000001  //精度
 #define MAXREAPT 100
#define MAXREAPT 100

 bool RootChord(double &x0, double x1)
bool RootChord(double &x0, double x1)
 //根在区间[x0,x1]附近(不一定在区间里面),同时x0兼作求根结果返回,x0,x1谁大谁小没有关系
//根在区间[x0,x1]附近(不一定在区间里面),同时x0兼作求根结果返回,x0,x1谁大谁小没有关系


 {
{
 double xk, xk1, xk2;
    double xk, xk1, xk2;

 xk = x0;
    xk = x0;
 xk1 = x1;
    xk1 = x1;
 for (int i=0; i<MAXREAPT; i++)
    for (int i=0; i<MAXREAPT; i++)

 
     {
{

 xk2 = xk1 - f(xk1)*(xk1-xk)/(f(xk1)-f(xk)) ;//key step
        xk2 = xk1 - f(xk1)*(xk1-xk)/(f(xk1)-f(xk)) ;//key step

 if (fabs(xk2-xk1) < epsilon)
        if (fabs(xk2-xk1) < epsilon)

 
         {
{
 x0 = xk1;//返回根
            x0 = xk1;//返回根
 return true;
            return true;
 }
        }
 else
        else

 
         {
{
 xk = xk1;
            xk = xk1;
 xk1 = xk2;
            xk1 = xk2;
 }
        }
 }
    }

 //迭代失败
    //迭代失败
 cout<<"迭代次数超过预期."<<endl;
    cout<<"迭代次数超过预期."<<endl;
 return false;
    return false;
 }
}

 int main()
int main()


 {
{
 double x0, x1;
    double x0, x1;
 cout<<"牛顿迭代法求方程根,请输入初始迭代x0,x1值:"<<endl;
    cout<<"牛顿迭代法求方程根,请输入初始迭代x0,x1值:"<<endl;
 cin>>x0>>x1;
    cin>>x0>>x1;

 if(RootChord(x0, x1))
    if(RootChord(x0, x1))

 
     {
{
 cout<<"在该初始值附近的根为:"<<x0<<endl;
        cout<<"在该初始值附近的根为:"<<x0<<endl;
 }
    }
 else
    else

 
     {
{
 cout<<"迭代失败!"<<endl;
        cout<<"迭代失败!"<<endl;
 }
    }

 system("pause");
    system("pause");
 return 0;
    return 0;
 }
}posted on 2007-04-20 22:51 
哈哈 阅读(3086) 
评论(0)  编辑 收藏 引用