Posted on 2009-12-23 22:14
蒲奎民 阅读(1132)
评论(0) 编辑 收藏 引用 所属分类:
hhtc-C++
弦截法求方程的根是一种解方程得基本方法,在计算机编程中常用。他的思路是这样的:任取两个数,判断这两个数的函数值,如果函数值是同号,换两个数再试,直到两个数x1,x2对应的函数值为异号时为止,这时方程的解肯定在这两个数x1,x2之间。连接这两点所对应的函数值,连线与x轴的交点为新的x,若f(x)与f(x1)同号,则把x当作新的x1,将新的x1与x2连接,如此循环……如果f(x)与f(x1)异号,则把把x当作新的x2,将x1与新的x2连接,循环……
编程使用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根的近似值(保留4位小数),当fabs(f(x))<0.0001时就停止计算。5.0000
例如输入:
2 6
输出:5.0000
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
#define f(x) (x*x*x-5*x*x+16*x-80)
#define jd 0.000001
#define max 100
double aa;
bool gg(double x0, double x1)
{
double xk, xk1, xk2;
xk = x0;
xk1 = x1;
for (int i=0; i<max; i++)
{
xk2 = xk1-f(xk1)*(xk1-xk)/(f(xk1)-f(xk));
if (fabs(xk2-xk1) < jd)
{
aa = xk1;
return 1;
}
else
{
xk = xk1;
xk1 = xk2;
}
}
return 0;
}
int main()
{
double x0, x1;
cin>>x0>>x1;
if(gg(x0, x1))
{
cout<<setprecision(4)<<fixed<<aa<<endl;
}
return 0;
}