实现用弦截法求f(x)= 0的根
弦截法的定义:弦截法的百度百科
算法描述
(1)任取迭代初始值X0,X1
(2)计算x2= x1-(X1-X0)*f(X1)/(f(X1)-f(X0));
(3)判断收敛性:如果|x 2-x1|<ε或者|f(x2)<ε
则算法收敛,停止计算,输出近似解x2
(4)令x0=x1,x1=x2返回第二步
源程序代码及运行结果截图
#include<iostream>
#include <cmath>
using namespace std;
/*
@param x :获取自变量x,y对应的函数值
*/
float getChordCutFunction(float x)
{
return x * x*x - x - 1.0f;
}
/*
@param x0 :开始迭代求跟的初始值
@param e :精确度
*/
float getChordCutMethodValue(float x0,float x1, float e)
{
while (true)
{
//获取x1的迭代值
float x2 = x1 - (x1 - x0)*getChordCutFunction(x1)/(getChordCutFunction(x1)- getChordCutFunction(x0));
//获取x1-x0的绝对值
float tol = abs(x2 - x1);
//获取x1对应的函数的绝对值
float funtionValue = abs(getChordCutFunction(x2));
//判断是否满足条件的近似解
if (tol < e || funtionValue < e)
{
return x2;
}
//重新赋值迭代
x0 = x1;
x1 = x2;
}
return 0.0f;
}
int main()
{
//测试数据
float answer = getChordCutMethodValue(1.5f,2.0f, 1e-8);
cout << "x^3-x-1的近似根为:" << answer << endl;
system("pause");
return 0;
}